From a9733dbcc47e93a3b2843056f1d587196296c324 Mon Sep 17 00:00:00 2001 From: Ron Shacham Date: Mon, 14 Sep 2020 12:05:31 -0400 Subject: [PATCH] Separated E2Sim lib from E2SM-specific code Issue-ID: SIM-18 Signed-off-by: Ron Shacham Change-Id: Ic4b1edc9011130a5f92a169012cbaeab56f9bc1d Signed-off-by: Ron Shacham --- e2sim/CMakeLists.txt | 234 +- e2sim/README.md | 119 +- e2sim/docker/Dockerfile | 72 +- e2sim/docker/container-tag.yaml | 2 +- .../kpm_e2sm}/ASN1c/ANY.c | 0 .../kpm_e2sm}/ASN1c/ANY.h | 0 .../kpm_e2sm}/ASN1c/BIT_STRING.c | 0 .../kpm_e2sm}/ASN1c/BIT_STRING.h | 0 .../kpm_e2sm}/ASN1c/BIT_STRING_oer.c | 0 .../kpm_e2sm}/ASN1c/C-RNTI.c | 0 .../kpm_e2sm}/ASN1c/C-RNTI.h | 0 .../CU-CP-Usage-Report-CellResourceReportItem.c | 0 .../CU-CP-Usage-Report-CellResourceReportItem.h | 0 .../kpm_e2sm}/ASN1c/CU-CP-Usage-Report-Per-UE.c | 0 .../kpm_e2sm}/ASN1c/CU-CP-Usage-Report-Per-UE.h | 0 .../CU-CP-Usage-Report-UeResourceReportItem.c | 0 .../CU-CP-Usage-Report-UeResourceReportItem.h | 0 .../CU-UP-Usage-Report-CellResourceReportItem.c | 0 .../CU-UP-Usage-Report-CellResourceReportItem.h | 0 .../kpm_e2sm}/ASN1c/CU-UP-Usage-Report-Per-UE.c | 0 .../kpm_e2sm}/ASN1c/CU-UP-Usage-Report-Per-UE.h | 0 .../CU-UP-Usage-Report-UeResourceReportItem.c | 0 .../CU-UP-Usage-Report-UeResourceReportItem.h | 0 .../kpm_e2sm}/ASN1c/CUUPMeasurement-Container.c | 0 .../kpm_e2sm}/ASN1c/CUUPMeasurement-Container.h | 0 .../kpm_e2sm}/ASN1c/Cause.c | 0 .../kpm_e2sm}/ASN1c/Cause.h | 0 .../kpm_e2sm}/ASN1c/CauseMisc.c | 0 .../kpm_e2sm}/ASN1c/CauseMisc.h | 0 .../kpm_e2sm}/ASN1c/CauseProtocol.c | 0 .../kpm_e2sm}/ASN1c/CauseProtocol.h | 0 .../kpm_e2sm}/ASN1c/CauseRIC.c | 0 .../kpm_e2sm}/ASN1c/CauseRIC.h | 0 .../kpm_e2sm}/ASN1c/CauseRICservice.c | 0 .../kpm_e2sm}/ASN1c/CauseRICservice.h | 0 .../kpm_e2sm}/ASN1c/CauseTransport.c | 0 .../kpm_e2sm}/ASN1c/CauseTransport.h | 0 .../kpm_e2sm}/ASN1c/CellResourceReportListItem.c | 0 .../kpm_e2sm}/ASN1c/CellResourceReportListItem.h | 0 .../kpm_e2sm}/ASN1c/Criticality.c | 0 .../kpm_e2sm}/ASN1c/Criticality.h | 0 .../ASN1c/CriticalityDiagnostics-IE-Item.c | 0 .../ASN1c/CriticalityDiagnostics-IE-Item.h | 0 .../ASN1c/CriticalityDiagnostics-IE-List.c | 0 .../ASN1c/CriticalityDiagnostics-IE-List.h | 0 .../kpm_e2sm}/ASN1c/CriticalityDiagnostics.c | 0 .../kpm_e2sm}/ASN1c/CriticalityDiagnostics.h | 0 .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 0 .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 0 .../kpm_e2sm}/ASN1c/DU-Usage-Report-Per-UE.c | 0 .../kpm_e2sm}/ASN1c/DU-Usage-Report-Per-UE.h | 0 .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 0 .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 0 .../kpm_e2sm}/ASN1c/E2AP-PDU.c | 0 .../kpm_e2sm}/ASN1c/E2AP-PDU.h | 0 .../kpm_e2sm}/ASN1c/E2SM-KPM-ActionDefinition.c | 0 .../kpm_e2sm}/ASN1c/E2SM-KPM-ActionDefinition.h | 0 .../E2SM-KPM-EventTriggerDefinition-Format1.c | 0 .../E2SM-KPM-EventTriggerDefinition-Format1.h | 0 .../ASN1c/E2SM-KPM-EventTriggerDefinition.c | 0 .../ASN1c/E2SM-KPM-EventTriggerDefinition.h | 0 .../ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 0 .../ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 0 .../kpm_e2sm}/ASN1c/E2SM-KPM-IndicationHeader.c | 0 .../kpm_e2sm}/ASN1c/E2SM-KPM-IndicationHeader.h | 0 .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 0 .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 0 .../kpm_e2sm}/ASN1c/E2SM-KPM-IndicationMessage.c | 0 .../kpm_e2sm}/ASN1c/E2SM-KPM-IndicationMessage.h | 0 .../ASN1c/E2SM-KPM-RANfunction-Description.c | 0 .../ASN1c/E2SM-KPM-RANfunction-Description.h | 0 .../kpm_e2sm}/ASN1c/E2setupFailure.c | 0 .../kpm_e2sm}/ASN1c/E2setupFailure.h | 0 .../kpm_e2sm}/ASN1c/E2setupRequest.c | 0 .../kpm_e2sm}/ASN1c/E2setupRequest.h | 0 .../kpm_e2sm}/ASN1c/E2setupResponse.c | 0 .../kpm_e2sm}/ASN1c/E2setupResponse.h | 0 .../kpm_e2sm}/ASN1c/ENB-ID-Choice.c | 0 .../kpm_e2sm}/ASN1c/ENB-ID-Choice.h | 0 .../kpm_e2sm}/ASN1c/ENB-ID.c | 0 .../kpm_e2sm}/ASN1c/ENB-ID.h | 0 .../kpm_e2sm}/ASN1c/ENGNB-ID.c | 0 .../kpm_e2sm}/ASN1c/ENGNB-ID.h | 0 .../kpm_e2sm}/ASN1c/EPC-CUUP-PM-Format.c | 0 .../kpm_e2sm}/ASN1c/EPC-CUUP-PM-Format.h | 0 .../kpm_e2sm}/ASN1c/EPC-DU-PM-Container.c | 0 .../kpm_e2sm}/ASN1c/EPC-DU-PM-Container.h | 0 .../kpm_e2sm}/ASN1c/ErrorIndication.c | 0 .../kpm_e2sm}/ASN1c/ErrorIndication.h | 0 .../kpm_e2sm}/ASN1c/FGC-CUUP-PM-Format.c | 0 .../kpm_e2sm}/ASN1c/FGC-CUUP-PM-Format.h | 0 .../kpm_e2sm}/ASN1c/FGC-DU-PM-Container.c | 0 .../kpm_e2sm}/ASN1c/FGC-DU-PM-Container.h | 0 .../kpm_e2sm}/ASN1c/FQIPERSlicesPerPlmnListItem.c | 0 .../kpm_e2sm}/ASN1c/FQIPERSlicesPerPlmnListItem.h | 0 .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 0 .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 0 .../kpm_e2sm}/ASN1c/GNB-CU-CP-Name.c | 0 .../kpm_e2sm}/ASN1c/GNB-CU-CP-Name.h | 0 .../kpm_e2sm}/ASN1c/GNB-CU-UP-ID.c | 0 .../kpm_e2sm}/ASN1c/GNB-CU-UP-ID.h | 0 .../kpm_e2sm}/ASN1c/GNB-CU-UP-Name.c | 0 .../kpm_e2sm}/ASN1c/GNB-CU-UP-Name.h | 0 .../kpm_e2sm}/ASN1c/GNB-DU-ID.c | 0 .../kpm_e2sm}/ASN1c/GNB-DU-ID.h | 0 .../kpm_e2sm}/ASN1c/GNB-DU-Name.c | 0 .../kpm_e2sm}/ASN1c/GNB-DU-Name.h | 0 .../kpm_e2sm}/ASN1c/GNB-ID-Choice.c | 0 .../kpm_e2sm}/ASN1c/GNB-ID-Choice.h | 0 .../kpm_e2sm}/ASN1c/GNB-Name.c | 0 .../kpm_e2sm}/ASN1c/GNB-Name.h | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-eNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-eNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-en-gNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-en-gNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-gNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-gNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-ng-eNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalE2node-ng-eNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalENB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalENB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-eNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-eNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-en-gNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-en-gNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-gNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-gNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalRIC-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalRIC-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalenGNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalenGNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalgNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalgNB-ID.h | 0 .../kpm_e2sm}/ASN1c/GlobalngeNB-ID.c | 0 .../kpm_e2sm}/ASN1c/GlobalngeNB-ID.h | 0 .../kpm_e2sm}/ASN1c/INTEGER.c | 0 .../kpm_e2sm}/ASN1c/INTEGER.h | 0 .../kpm_e2sm}/ASN1c/INTEGER_oer.c | 0 .../kpm_e2sm}/ASN1c/InitiatingMessage.c | 0 .../kpm_e2sm}/ASN1c/InitiatingMessage.h | 0 .../kpm_e2sm}/ASN1c/Makefile.am.asn1convert | 0 .../kpm_e2sm}/ASN1c/Makefile.am.libasncodec | 0 .../kpm_e2sm}/ASN1c/NI-Type.c | 0 .../kpm_e2sm}/ASN1c/NI-Type.h | 0 .../kpm_e2sm}/ASN1c/NRCGI.c | 0 .../kpm_e2sm}/ASN1c/NRCGI.h | 0 .../kpm_e2sm}/ASN1c/NRCellIdentity.c | 0 .../kpm_e2sm}/ASN1c/NRCellIdentity.h | 0 .../kpm_e2sm}/ASN1c/NativeEnumerated.c | 0 .../kpm_e2sm}/ASN1c/NativeEnumerated.h | 0 .../kpm_e2sm}/ASN1c/NativeEnumerated_oer.c | 0 .../kpm_e2sm}/ASN1c/NativeInteger.c | 0 .../kpm_e2sm}/ASN1c/NativeInteger.h | 0 .../kpm_e2sm}/ASN1c/NativeInteger_oer.c | 0 .../kpm_e2sm}/ASN1c/OCTET_STRING.c | 0 .../kpm_e2sm}/ASN1c/OCTET_STRING.h | 0 .../kpm_e2sm}/ASN1c/OCTET_STRING_oer.c | 0 .../kpm_e2sm}/ASN1c/OCUCP-PF-Container.c | 0 .../kpm_e2sm}/ASN1c/OCUCP-PF-Container.h | 0 .../kpm_e2sm}/ASN1c/OCUUP-PF-Container.c | 0 .../kpm_e2sm}/ASN1c/OCUUP-PF-Container.h | 0 .../kpm_e2sm}/ASN1c/ODU-PF-Container.c | 0 .../kpm_e2sm}/ASN1c/ODU-PF-Container.h | 0 .../kpm_e2sm}/ASN1c/OPEN_TYPE.c | 0 .../kpm_e2sm}/ASN1c/OPEN_TYPE.h | 0 .../kpm_e2sm}/ASN1c/OPEN_TYPE_oer.c | 0 .../kpm_e2sm}/ASN1c/PF-Container.c | 0 .../kpm_e2sm}/ASN1c/PF-Container.h | 0 .../kpm_e2sm}/ASN1c/PF-ContainerListItem.c | 0 .../kpm_e2sm}/ASN1c/PF-ContainerListItem.h | 0 .../kpm_e2sm}/ASN1c/PLMN-Identity.c | 0 .../kpm_e2sm}/ASN1c/PLMN-Identity.h | 0 .../kpm_e2sm}/ASN1c/PM-Containers-List.c | 0 .../kpm_e2sm}/ASN1c/PM-Containers-List.h | 0 .../kpm_e2sm}/ASN1c/PerQCIReportListItem.c | 0 .../kpm_e2sm}/ASN1c/PerQCIReportListItem.h | 0 .../kpm_e2sm}/ASN1c/PerQCIReportListItemFormat.c | 0 .../kpm_e2sm}/ASN1c/PerQCIReportListItemFormat.h | 0 .../kpm_e2sm}/ASN1c/PlmnID-List.c | 0 .../kpm_e2sm}/ASN1c/PlmnID-List.h | 0 .../kpm_e2sm}/ASN1c/Presence.c | 0 .../kpm_e2sm}/ASN1c/Presence.h | 0 .../kpm_e2sm}/ASN1c/PrintableString.c | 0 .../kpm_e2sm}/ASN1c/PrintableString.h | 0 .../kpm_e2sm}/ASN1c/ProcedureCode.c | 0 .../kpm_e2sm}/ASN1c/ProcedureCode.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-Container.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-Container.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ContainerList.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ContainerList.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ContainerPair.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ContainerPair.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ContainerPairList.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ContainerPairList.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-Field.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-Field.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-FieldPair.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-FieldPair.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ID.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-ID.h | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-SingleContainer.c | 0 .../kpm_e2sm}/ASN1c/ProtocolIE-SingleContainer.h | 0 .../kpm_e2sm}/ASN1c/RAN-Container.c | 0 .../kpm_e2sm}/ASN1c/RAN-Container.h | 0 .../kpm_e2sm}/ASN1c/RANcallProcess-ID-string.c | 0 .../kpm_e2sm}/ASN1c/RANcallProcess-ID-string.h | 0 .../kpm_e2sm}/ASN1c/RANfunction-Item.c | 0 .../kpm_e2sm}/ASN1c/RANfunction-Item.h | 0 .../kpm_e2sm}/ASN1c/RANfunction-Name.c | 0 .../kpm_e2sm}/ASN1c/RANfunction-Name.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionDefinition.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionDefinition.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionID-Item.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionID-Item.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionID.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionID.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionIDcause-Item.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionIDcause-Item.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionRevision.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionRevision.h | 0 .../kpm_e2sm}/ASN1c/RANfunctions-List.c | 0 .../kpm_e2sm}/ASN1c/RANfunctions-List.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionsID-List.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionsID-List.h | 0 .../kpm_e2sm}/ASN1c/RANfunctionsIDcause-List.c | 0 .../kpm_e2sm}/ASN1c/RANfunctionsIDcause-List.h | 0 .../kpm_e2sm}/ASN1c/RIC-EventTriggerStyle-List.c | 0 .../kpm_e2sm}/ASN1c/RIC-EventTriggerStyle-List.h | 0 .../kpm_e2sm}/ASN1c/RIC-Format-Type.c | 0 .../kpm_e2sm}/ASN1c/RIC-Format-Type.h | 0 .../kpm_e2sm}/ASN1c/RIC-ReportStyle-List.c | 0 .../kpm_e2sm}/ASN1c/RIC-ReportStyle-List.h | 0 .../kpm_e2sm}/ASN1c/RIC-Style-Name.c | 0 .../kpm_e2sm}/ASN1c/RIC-Style-Name.h | 0 .../kpm_e2sm}/ASN1c/RIC-Style-Type.c | 0 .../kpm_e2sm}/ASN1c/RIC-Style-Type.h | 0 .../kpm_e2sm}/ASN1c/RICaction-Admitted-Item.c | 0 .../kpm_e2sm}/ASN1c/RICaction-Admitted-Item.h | 0 .../kpm_e2sm}/ASN1c/RICaction-Admitted-List.c | 0 .../kpm_e2sm}/ASN1c/RICaction-Admitted-List.h | 0 .../kpm_e2sm}/ASN1c/RICaction-NotAdmitted-Item.c | 0 .../kpm_e2sm}/ASN1c/RICaction-NotAdmitted-Item.h | 0 .../kpm_e2sm}/ASN1c/RICaction-NotAdmitted-List.c | 0 .../kpm_e2sm}/ASN1c/RICaction-NotAdmitted-List.h | 0 .../kpm_e2sm}/ASN1c/RICaction-ToBeSetup-Item.c | 0 .../kpm_e2sm}/ASN1c/RICaction-ToBeSetup-Item.h | 0 .../kpm_e2sm}/ASN1c/RICactionDefinition.c | 0 .../kpm_e2sm}/ASN1c/RICactionDefinition.h | 0 .../kpm_e2sm}/ASN1c/RICactionID.c | 0 .../kpm_e2sm}/ASN1c/RICactionID.h | 0 .../kpm_e2sm}/ASN1c/RICactionType.c | 0 .../kpm_e2sm}/ASN1c/RICactionType.h | 0 .../kpm_e2sm}/ASN1c/RICactions-ToBeSetup-List.c | 0 .../kpm_e2sm}/ASN1c/RICactions-ToBeSetup-List.h | 0 .../kpm_e2sm}/ASN1c/RICcallProcessID.c | 0 .../kpm_e2sm}/ASN1c/RICcallProcessID.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolAckRequest.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolAckRequest.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolAcknowledge.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolAcknowledge.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolFailure.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolFailure.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolHeader.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolHeader.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolMessage.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolMessage.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolOutcome.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolOutcome.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolRequest.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolRequest.h | 0 .../kpm_e2sm}/ASN1c/RICcontrolStatus.c | 0 .../kpm_e2sm}/ASN1c/RICcontrolStatus.h | 0 .../kpm_e2sm}/ASN1c/RICeventTriggerDefinition.c | 0 .../kpm_e2sm}/ASN1c/RICeventTriggerDefinition.h | 0 .../kpm_e2sm}/ASN1c/RICindication.c | 0 .../kpm_e2sm}/ASN1c/RICindication.h | 0 .../kpm_e2sm}/ASN1c/RICindicationHeader.c | 0 .../kpm_e2sm}/ASN1c/RICindicationHeader.h | 0 .../kpm_e2sm}/ASN1c/RICindicationMessage.c | 0 .../kpm_e2sm}/ASN1c/RICindicationMessage.h | 0 .../kpm_e2sm}/ASN1c/RICindicationSN.c | 0 .../kpm_e2sm}/ASN1c/RICindicationSN.h | 0 .../kpm_e2sm}/ASN1c/RICindicationType.c | 0 .../kpm_e2sm}/ASN1c/RICindicationType.h | 0 .../kpm_e2sm}/ASN1c/RICrequestID.c | 0 .../kpm_e2sm}/ASN1c/RICrequestID.h | 0 .../kpm_e2sm}/ASN1c/RICserviceQuery.c | 0 .../kpm_e2sm}/ASN1c/RICserviceQuery.h | 0 .../kpm_e2sm}/ASN1c/RICserviceUpdate.c | 0 .../kpm_e2sm}/ASN1c/RICserviceUpdate.h | 0 .../kpm_e2sm}/ASN1c/RICserviceUpdateAcknowledge.c | 0 .../kpm_e2sm}/ASN1c/RICserviceUpdateAcknowledge.h | 0 .../kpm_e2sm}/ASN1c/RICserviceUpdateFailure.c | 0 .../kpm_e2sm}/ASN1c/RICserviceUpdateFailure.h | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionDeleteFailure.c | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionDeleteFailure.h | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionDeleteRequest.c | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionDeleteRequest.h | 0 .../ASN1c/RICsubscriptionDeleteResponse.c | 0 .../ASN1c/RICsubscriptionDeleteResponse.h | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionDetails.c | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionDetails.h | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionFailure.c | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionFailure.h | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionRequest.c | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionRequest.h | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionResponse.c | 0 .../kpm_e2sm}/ASN1c/RICsubscriptionResponse.h | 0 .../kpm_e2sm}/ASN1c/RICsubsequentAction.c | 0 .../kpm_e2sm}/ASN1c/RICsubsequentAction.h | 0 .../kpm_e2sm}/ASN1c/RICsubsequentActionType.c | 0 .../kpm_e2sm}/ASN1c/RICsubsequentActionType.h | 0 .../kpm_e2sm}/ASN1c/RICtimeToWait.c | 0 .../kpm_e2sm}/ASN1c/RICtimeToWait.h | 0 .../kpm_e2sm}/ASN1c/RT-Period-IE.c | 0 .../kpm_e2sm}/ASN1c/RT-Period-IE.h | 0 .../kpm_e2sm}/ASN1c/ResetRequest.c | 0 .../kpm_e2sm}/ASN1c/ResetRequest.h | 0 .../kpm_e2sm}/ASN1c/ResetResponse.c | 0 .../kpm_e2sm}/ASN1c/ResetResponse.h | 0 .../kpm_e2sm}/ASN1c/SNSSAI.c | 0 .../kpm_e2sm}/ASN1c/SNSSAI.h | 0 .../kpm_e2sm}/ASN1c/ServedPlmnPerCellListItem.c | 0 .../kpm_e2sm}/ASN1c/ServedPlmnPerCellListItem.h | 0 .../kpm_e2sm}/ASN1c/SlicePerPlmnPerCellListItem.c | 0 .../kpm_e2sm}/ASN1c/SlicePerPlmnPerCellListItem.h | 0 .../kpm_e2sm}/ASN1c/SliceToReportListItem.c | 0 .../kpm_e2sm}/ASN1c/SliceToReportListItem.h | 0 .../kpm_e2sm}/ASN1c/SuccessfulOutcome.c | 0 .../kpm_e2sm}/ASN1c/SuccessfulOutcome.h | 0 .../kpm_e2sm}/ASN1c/TimeToWait.c | 0 .../kpm_e2sm}/ASN1c/TimeToWait.h | 0 .../kpm_e2sm}/ASN1c/Timestamp.c | 0 .../kpm_e2sm}/ASN1c/Timestamp.h | 0 .../kpm_e2sm}/ASN1c/Trigger-ConditionIE-Item.c | 0 .../kpm_e2sm}/ASN1c/Trigger-ConditionIE-Item.h | 0 .../kpm_e2sm}/ASN1c/TriggeringMessage.c | 0 .../kpm_e2sm}/ASN1c/TriggeringMessage.h | 0 .../kpm_e2sm}/ASN1c/TypeOfError.c | 0 .../kpm_e2sm}/ASN1c/TypeOfError.h | 0 .../kpm_e2sm}/ASN1c/UE-Report-Type.c | 0 .../kpm_e2sm}/ASN1c/UE-Report-Type.h | 0 .../kpm_e2sm}/ASN1c/UnsuccessfulOutcome.c | 0 .../kpm_e2sm}/ASN1c/UnsuccessfulOutcome.h | 0 .../kpm_e2sm}/ASN1c/asn_SEQUENCE_OF.c | 0 .../kpm_e2sm}/ASN1c/asn_SEQUENCE_OF.h | 0 .../kpm_e2sm}/ASN1c/asn_SET_OF.c | 0 .../kpm_e2sm}/ASN1c/asn_SET_OF.h | 0 .../kpm_e2sm}/ASN1c/asn_application.c | 0 .../kpm_e2sm}/ASN1c/asn_application.h | 0 .../kpm_e2sm}/ASN1c/asn_bit_data.c | 0 .../kpm_e2sm}/ASN1c/asn_bit_data.h | 0 .../kpm_e2sm}/ASN1c/asn_codecs.h | 0 .../kpm_e2sm}/ASN1c/asn_codecs_prim.c | 0 .../kpm_e2sm}/ASN1c/asn_codecs_prim.h | 0 .../kpm_e2sm}/ASN1c/asn_constant.h | 0 .../kpm_e2sm}/ASN1c/asn_internal.c | 0 .../kpm_e2sm}/ASN1c/asn_internal.h | 0 .../kpm_e2sm}/ASN1c/asn_ioc.h | 0 .../kpm_e2sm}/ASN1c/asn_random_fill.c | 0 .../kpm_e2sm}/ASN1c/asn_random_fill.h | 0 .../kpm_e2sm}/ASN1c/asn_system.h | 0 .../kpm_e2sm}/ASN1c/ber_decoder.c | 0 .../kpm_e2sm}/ASN1c/ber_decoder.h | 0 .../kpm_e2sm}/ASN1c/ber_tlv_length.c | 0 .../kpm_e2sm}/ASN1c/ber_tlv_length.h | 0 .../kpm_e2sm}/ASN1c/ber_tlv_tag.c | 0 .../kpm_e2sm}/ASN1c/ber_tlv_tag.h | 0 .../kpm_e2sm}/ASN1c/constr_CHOICE.c | 0 .../kpm_e2sm}/ASN1c/constr_CHOICE.h | 0 .../kpm_e2sm}/ASN1c/constr_CHOICE_oer.c | 0 .../kpm_e2sm}/ASN1c/constr_SEQUENCE.c | 0 .../kpm_e2sm}/ASN1c/constr_SEQUENCE.h | 0 .../kpm_e2sm}/ASN1c/constr_SEQUENCE_OF.c | 0 .../kpm_e2sm}/ASN1c/constr_SEQUENCE_OF.h | 0 .../kpm_e2sm}/ASN1c/constr_SEQUENCE_oer.c | 0 .../kpm_e2sm}/ASN1c/constr_SET_OF.c | 0 .../kpm_e2sm}/ASN1c/constr_SET_OF.h | 0 .../kpm_e2sm}/ASN1c/constr_SET_OF_oer.c | 0 .../kpm_e2sm}/ASN1c/constr_TYPE.c | 0 .../kpm_e2sm}/ASN1c/constr_TYPE.h | 0 .../kpm_e2sm}/ASN1c/constraints.c | 0 .../kpm_e2sm}/ASN1c/constraints.h | 0 .../kpm_e2sm}/ASN1c/converter-example.mk | 0 .../kpm_e2sm}/ASN1c/der_encoder.c | 0 .../kpm_e2sm}/ASN1c/der_encoder.h | 0 .../kpm_e2sm}/ASN1c/oer_decoder.c | 0 .../kpm_e2sm}/ASN1c/oer_decoder.h | 0 .../kpm_e2sm}/ASN1c/oer_encoder.c | 0 .../kpm_e2sm}/ASN1c/oer_encoder.h | 0 .../kpm_e2sm}/ASN1c/oer_support.c | 0 .../kpm_e2sm}/ASN1c/oer_support.h | 0 .../kpm_e2sm}/ASN1c/pdu_collection.c | 0 .../kpm_e2sm}/ASN1c/per_decoder.c | 0 .../kpm_e2sm}/ASN1c/per_decoder.h | 0 .../kpm_e2sm}/ASN1c/per_encoder.c | 0 .../kpm_e2sm}/ASN1c/per_encoder.h | 0 .../kpm_e2sm}/ASN1c/per_opentype.c | 0 .../kpm_e2sm}/ASN1c/per_opentype.h | 0 .../kpm_e2sm}/ASN1c/per_support.c | 0 .../kpm_e2sm}/ASN1c/per_support.h | 0 .../kpm_e2sm}/ASN1c/xer_decoder.c | 0 .../kpm_e2sm}/ASN1c/xer_decoder.h | 0 .../kpm_e2sm}/ASN1c/xer_encoder.c | 0 .../kpm_e2sm}/ASN1c/xer_encoder.h | 0 .../kpm_e2sm}/ASN1c/xer_support.c | 0 .../kpm_e2sm}/ASN1c/xer_support.h | 0 e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt | 87 + e2sim/e2sm_examples/kpm_e2sm/Dockerfile | 102 + .../kpm_e2sm}/cellMeasReport.txt | 0 e2sim/e2sm_examples/kpm_e2sm/nlohmann_json_release | 1 + .../kpm_e2sm}/simulation.txt | 0 .../kpm_e2sm/src}/ASN1c/ANY.c | 0 .../kpm_e2sm/src}/ASN1c/ANY.h | 0 .../kpm_e2sm/src}/ASN1c/BIT_STRING.c | 0 .../kpm_e2sm/src}/ASN1c/BIT_STRING.h | 0 .../kpm_e2sm/src}/ASN1c/BIT_STRING_oer.c | 0 .../kpm_e2sm/src}/ASN1c/C-RNTI.c | 0 .../kpm_e2sm/src}/ASN1c/C-RNTI.h | 0 .../kpm_e2sm/src/ASN1c/CMakeLists.txt | 32 + .../CU-CP-Usage-Report-CellResourceReportItem.c | 0 .../CU-CP-Usage-Report-CellResourceReportItem.h | 0 .../src}/ASN1c/CU-CP-Usage-Report-Per-UE.c | 0 .../src}/ASN1c/CU-CP-Usage-Report-Per-UE.h | 0 .../CU-CP-Usage-Report-UeResourceReportItem.c | 0 .../CU-CP-Usage-Report-UeResourceReportItem.h | 0 .../CU-UP-Usage-Report-CellResourceReportItem.c | 0 .../CU-UP-Usage-Report-CellResourceReportItem.h | 0 .../src}/ASN1c/CU-UP-Usage-Report-Per-UE.c | 0 .../src}/ASN1c/CU-UP-Usage-Report-Per-UE.h | 0 .../CU-UP-Usage-Report-UeResourceReportItem.c | 0 .../CU-UP-Usage-Report-UeResourceReportItem.h | 0 .../src}/ASN1c/CUUPMeasurement-Container.c | 0 .../src}/ASN1c/CUUPMeasurement-Container.h | 0 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c | 95 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h | 68 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c | 62 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h | 58 + .../kpm_e2sm/src/ASN1c/CauseProtocol.c | 68 + .../kpm_e2sm/src/ASN1c/CauseProtocol.h | 61 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c | 76 + e2sim/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 | 0 .../src}/ASN1c/CellResourceReportListItem.h | 0 .../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 | 0 .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 0 .../kpm_e2sm/src}/ASN1c/DU-Usage-Report-Per-UE.c | 0 .../kpm_e2sm/src}/ASN1c/DU-Usage-Report-Per-UE.h | 0 .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 0 .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 0 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c | 78 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h | 61 + .../src}/ASN1c/E2SM-KPM-ActionDefinition.c | 0 .../src}/ASN1c/E2SM-KPM-ActionDefinition.h | 0 .../E2SM-KPM-EventTriggerDefinition-Format1.c | 0 .../E2SM-KPM-EventTriggerDefinition-Format1.h | 0 .../src}/ASN1c/E2SM-KPM-EventTriggerDefinition.c | 0 .../src}/ASN1c/E2SM-KPM-EventTriggerDefinition.h | 0 .../src}/ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 0 .../src}/ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 0 .../src}/ASN1c/E2SM-KPM-IndicationHeader.c | 0 .../src}/ASN1c/E2SM-KPM-IndicationHeader.h | 0 .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 0 .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 0 .../src}/ASN1c/E2SM-KPM-IndicationMessage.c | 0 .../src}/ASN1c/E2SM-KPM-IndicationMessage.h | 0 .../src}/ASN1c/E2SM-KPM-RANfunction-Description.c | 0 .../src}/ASN1c/E2SM-KPM-RANfunction-Description.h | 0 .../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 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c | 241 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h | 61 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c | 94 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h | 56 + .../kpm_e2sm/src}/ASN1c/EPC-CUUP-PM-Format.c | 0 .../kpm_e2sm/src}/ASN1c/EPC-CUUP-PM-Format.h | 0 .../kpm_e2sm/src}/ASN1c/EPC-DU-PM-Container.c | 0 .../kpm_e2sm/src}/ASN1c/EPC-DU-PM-Container.h | 0 .../kpm_e2sm/src/ASN1c/ErrorIndication.c | 50 + .../kpm_e2sm/src/ASN1c/ErrorIndication.h | 44 + .../kpm_e2sm/src}/ASN1c/FGC-CUUP-PM-Format.c | 0 .../kpm_e2sm/src}/ASN1c/FGC-CUUP-PM-Format.h | 0 .../kpm_e2sm/src}/ASN1c/FGC-DU-PM-Container.c | 0 .../kpm_e2sm/src}/ASN1c/FGC-DU-PM-Container.h | 0 .../src}/ASN1c/FQIPERSlicesPerPlmnListItem.c | 0 .../src}/ASN1c/FQIPERSlicesPerPlmnListItem.h | 0 .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 0 .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 0 .../kpm_e2sm/src}/ASN1c/GNB-CU-CP-Name.c | 0 .../kpm_e2sm/src}/ASN1c/GNB-CU-CP-Name.h | 0 .../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 | 0 .../kpm_e2sm/src}/ASN1c/GNB-CU-UP-Name.h | 0 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c | 70 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h | 46 + .../kpm_e2sm/src}/ASN1c/GNB-DU-Name.c | 0 .../kpm_e2sm/src}/ASN1c/GNB-DU-Name.h | 0 .../kpm_e2sm/src/ASN1c/GNB-ID-Choice.c | 94 + .../kpm_e2sm/src/ASN1c/GNB-ID-Choice.h | 56 + .../kpm_e2sm/src}/ASN1c/GNB-Name.c | 0 .../kpm_e2sm/src}/ASN1c/GNB-Name.h | 0 .../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 | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-ID.h | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-eNB-ID.c | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-eNB-ID.h | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-en-gNB-ID.c | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-en-gNB-ID.h | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-gNB-ID.c | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-gNB-ID.h | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 0 .../kpm_e2sm/src}/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 0 .../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 + .../kpm_e2sm/src}/ASN1c/INTEGER.c | 0 .../kpm_e2sm/src}/ASN1c/INTEGER.h | 0 .../kpm_e2sm/src}/ASN1c/INTEGER_oer.c | 0 .../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 + .../kpm_e2sm/src}/ASN1c/NI-Type.c | 0 .../kpm_e2sm/src}/ASN1c/NI-Type.h | 0 .../kpm_e2sm/src}/ASN1c/NRCGI.c | 0 .../kpm_e2sm/src}/ASN1c/NRCGI.h | 0 .../kpm_e2sm/src}/ASN1c/NRCellIdentity.c | 0 .../kpm_e2sm/src}/ASN1c/NRCellIdentity.h | 0 .../kpm_e2sm/src}/ASN1c/NativeEnumerated.c | 0 .../kpm_e2sm/src}/ASN1c/NativeEnumerated.h | 0 .../kpm_e2sm/src}/ASN1c/NativeEnumerated_oer.c | 0 .../kpm_e2sm/src}/ASN1c/NativeInteger.c | 0 .../kpm_e2sm/src}/ASN1c/NativeInteger.h | 0 .../kpm_e2sm/src}/ASN1c/NativeInteger_oer.c | 0 .../kpm_e2sm/src}/ASN1c/OCTET_STRING.c | 0 .../kpm_e2sm/src}/ASN1c/OCTET_STRING.h | 0 .../kpm_e2sm/src}/ASN1c/OCTET_STRING_oer.c | 0 .../kpm_e2sm/src}/ASN1c/OCUCP-PF-Container.c | 0 .../kpm_e2sm/src}/ASN1c/OCUCP-PF-Container.h | 0 .../kpm_e2sm/src}/ASN1c/OCUUP-PF-Container.c | 0 .../kpm_e2sm/src}/ASN1c/OCUUP-PF-Container.h | 0 .../kpm_e2sm/src}/ASN1c/ODU-PF-Container.c | 0 .../kpm_e2sm/src}/ASN1c/ODU-PF-Container.h | 0 .../kpm_e2sm/src}/ASN1c/OPEN_TYPE.c | 0 .../kpm_e2sm/src}/ASN1c/OPEN_TYPE.h | 0 .../kpm_e2sm/src}/ASN1c/OPEN_TYPE_oer.c | 0 .../kpm_e2sm/src}/ASN1c/PF-Container.c | 0 .../kpm_e2sm/src}/ASN1c/PF-Container.h | 0 .../kpm_e2sm/src}/ASN1c/PF-ContainerListItem.c | 0 .../kpm_e2sm/src}/ASN1c/PF-ContainerListItem.h | 0 .../kpm_e2sm/src/ASN1c/PLMN-Identity.c | 65 + .../kpm_e2sm/src/ASN1c/PLMN-Identity.h | 46 + .../kpm_e2sm/src}/ASN1c/PM-Containers-List.c | 0 .../kpm_e2sm/src}/ASN1c/PM-Containers-List.h | 0 .../kpm_e2sm/src}/ASN1c/PerQCIReportListItem.c | 0 .../kpm_e2sm/src}/ASN1c/PerQCIReportListItem.h | 0 .../src}/ASN1c/PerQCIReportListItemFormat.c | 0 .../src}/ASN1c/PerQCIReportListItemFormat.h | 0 .../kpm_e2sm/src}/ASN1c/PlmnID-List.c | 0 .../kpm_e2sm/src}/ASN1c/PlmnID-List.h | 0 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c | 58 + e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h | 54 + .../kpm_e2sm/src}/ASN1c/PrintableString.c | 0 .../kpm_e2sm/src}/ASN1c/PrintableString.h | 0 .../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 | 0 .../kpm_e2sm/src}/ASN1c/RAN-Container.h | 0 .../kpm_e2sm/src}/ASN1c/RANcallProcess-ID-string.c | 0 .../kpm_e2sm/src}/ASN1c/RANcallProcess-ID-string.h | 0 .../kpm_e2sm/src/ASN1c/RANfunction-Item.c | 70 + .../kpm_e2sm/src/ASN1c/RANfunction-Item.h | 46 + .../kpm_e2sm/src}/ASN1c/RANfunction-Name.c | 0 .../kpm_e2sm/src}/ASN1c/RANfunction-Name.h | 0 .../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 | 0 .../src}/ASN1c/RIC-EventTriggerStyle-List.h | 0 .../kpm_e2sm/src}/ASN1c/RIC-Format-Type.c | 0 .../kpm_e2sm/src}/ASN1c/RIC-Format-Type.h | 0 .../kpm_e2sm/src}/ASN1c/RIC-ReportStyle-List.c | 0 .../kpm_e2sm/src}/ASN1c/RIC-ReportStyle-List.h | 0 .../kpm_e2sm/src}/ASN1c/RIC-Style-Name.c | 0 .../kpm_e2sm/src}/ASN1c/RIC-Style-Name.h | 0 .../kpm_e2sm/src}/ASN1c/RIC-Style-Type.c | 0 .../kpm_e2sm/src}/ASN1c/RIC-Style-Type.h | 0 .../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 | 0 .../kpm_e2sm/src}/ASN1c/RT-Period-IE.h | 0 .../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 + .../kpm_e2sm/src}/ASN1c/SNSSAI.c | 0 .../kpm_e2sm/src}/ASN1c/SNSSAI.h | 0 .../src}/ASN1c/ServedPlmnPerCellListItem.c | 0 .../src}/ASN1c/ServedPlmnPerCellListItem.h | 0 .../src}/ASN1c/SlicePerPlmnPerCellListItem.c | 0 .../src}/ASN1c/SlicePerPlmnPerCellListItem.h | 0 .../kpm_e2sm/src}/ASN1c/SliceToReportListItem.c | 0 .../kpm_e2sm/src}/ASN1c/SliceToReportListItem.h | 0 .../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 + .../kpm_e2sm/src}/ASN1c/Timestamp.c | 0 .../kpm_e2sm/src}/ASN1c/Timestamp.h | 0 .../kpm_e2sm/src}/ASN1c/Trigger-ConditionIE-Item.c | 0 .../kpm_e2sm/src}/ASN1c/Trigger-ConditionIE-Item.h | 0 .../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 | 0 .../kpm_e2sm/src}/ASN1c/UE-Report-Type.h | 0 .../kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c | 358 + .../kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h | 89 + .../kpm_e2sm/src}/ASN1c/asn_SEQUENCE_OF.c | 0 .../kpm_e2sm/src}/ASN1c/asn_SEQUENCE_OF.h | 0 .../kpm_e2sm/src}/ASN1c/asn_SET_OF.c | 0 .../kpm_e2sm/src}/ASN1c/asn_SET_OF.h | 0 .../kpm_e2sm/src}/ASN1c/asn_application.c | 0 .../kpm_e2sm/src}/ASN1c/asn_application.h | 0 .../kpm_e2sm/src}/ASN1c/asn_bit_data.c | 0 .../kpm_e2sm/src}/ASN1c/asn_bit_data.h | 0 .../kpm_e2sm/src}/ASN1c/asn_codecs.h | 0 .../kpm_e2sm/src}/ASN1c/asn_codecs_prim.c | 0 .../kpm_e2sm/src}/ASN1c/asn_codecs_prim.h | 0 .../kpm_e2sm/src/ASN1c/asn_constant.h | 22 + .../kpm_e2sm/src}/ASN1c/asn_internal.c | 0 .../kpm_e2sm/src}/ASN1c/asn_internal.h | 0 .../kpm_e2sm/src}/ASN1c/asn_ioc.h | 0 .../kpm_e2sm/src}/ASN1c/asn_random_fill.c | 0 .../kpm_e2sm/src}/ASN1c/asn_random_fill.h | 0 .../kpm_e2sm/src}/ASN1c/asn_system.h | 0 .../kpm_e2sm/src}/ASN1c/ber_decoder.c | 0 .../kpm_e2sm/src}/ASN1c/ber_decoder.h | 0 .../kpm_e2sm/src}/ASN1c/ber_tlv_length.c | 0 .../kpm_e2sm/src}/ASN1c/ber_tlv_length.h | 0 .../kpm_e2sm/src}/ASN1c/ber_tlv_tag.c | 0 .../kpm_e2sm/src}/ASN1c/ber_tlv_tag.h | 0 .../kpm_e2sm/src}/ASN1c/constr_CHOICE.c | 0 .../kpm_e2sm/src}/ASN1c/constr_CHOICE.h | 0 .../kpm_e2sm/src}/ASN1c/constr_CHOICE_oer.c | 0 .../kpm_e2sm/src}/ASN1c/constr_SEQUENCE.c | 0 .../kpm_e2sm/src}/ASN1c/constr_SEQUENCE.h | 0 .../kpm_e2sm/src}/ASN1c/constr_SEQUENCE_OF.c | 0 .../kpm_e2sm/src}/ASN1c/constr_SEQUENCE_OF.h | 0 .../kpm_e2sm/src}/ASN1c/constr_SEQUENCE_oer.c | 0 .../kpm_e2sm/src}/ASN1c/constr_SET_OF.c | 0 .../kpm_e2sm/src}/ASN1c/constr_SET_OF.h | 0 .../kpm_e2sm/src}/ASN1c/constr_SET_OF_oer.c | 0 .../kpm_e2sm/src}/ASN1c/constr_TYPE.c | 0 .../kpm_e2sm/src}/ASN1c/constr_TYPE.h | 0 .../kpm_e2sm/src}/ASN1c/constraints.c | 0 .../kpm_e2sm/src}/ASN1c/constraints.h | 0 .../kpm_e2sm/src/ASN1c/converter-example.mk | 33 + .../kpm_e2sm/src}/ASN1c/der_encoder.c | 0 .../kpm_e2sm/src}/ASN1c/der_encoder.h | 0 .../kpm_e2sm/src}/ASN1c/oer_decoder.c | 0 .../kpm_e2sm/src}/ASN1c/oer_decoder.h | 0 .../kpm_e2sm/src}/ASN1c/oer_encoder.c | 0 .../kpm_e2sm/src}/ASN1c/oer_encoder.h | 0 .../kpm_e2sm/src}/ASN1c/oer_support.c | 0 .../kpm_e2sm/src}/ASN1c/oer_support.h | 0 .../kpm_e2sm/src/ASN1c/pdu_collection.c | 15 + .../kpm_e2sm/src}/ASN1c/per_decoder.c | 0 .../kpm_e2sm/src}/ASN1c/per_decoder.h | 0 .../kpm_e2sm/src}/ASN1c/per_encoder.c | 0 .../kpm_e2sm/src}/ASN1c/per_encoder.h | 0 .../kpm_e2sm/src}/ASN1c/per_opentype.c | 0 .../kpm_e2sm/src}/ASN1c/per_opentype.h | 0 .../kpm_e2sm/src}/ASN1c/per_support.c | 0 .../kpm_e2sm/src}/ASN1c/per_support.h | 0 .../kpm_e2sm/src}/ASN1c/xer_decoder.c | 0 .../kpm_e2sm/src}/ASN1c/xer_decoder.h | 0 .../kpm_e2sm/src}/ASN1c/xer_encoder.c | 0 .../kpm_e2sm/src}/ASN1c/xer_encoder.h | 0 .../kpm_e2sm/src}/ASN1c/xer_support.c | 0 .../kpm_e2sm/src}/ASN1c/xer_support.h | 0 .../e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt | 35 + .../e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp | 1872 +++++ .../e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp | 63 + .../kpm_e2sm/src/kpm/kpm_callbacks.cpp | 662 ++ .../kpm_e2sm/src/kpm/kpm_callbacks.hpp | 24 + .../kpm_e2sm}/ueMeasReport.txt | 0 e2sim/{ => previous}/ASN1c/ABS-Status.c | 0 e2sim/{ => previous}/ASN1c/ABS-Status.h | 0 e2sim/{ => previous}/ASN1c/ABSInformation.c | 0 e2sim/{ => previous}/ASN1c/ABSInformation.h | 0 e2sim/{ => previous}/ASN1c/ABSInformationFDD.c | 0 e2sim/{ => previous}/ASN1c/ABSInformationFDD.h | 0 e2sim/{ => previous}/ASN1c/ABSInformationTDD.c | 0 e2sim/{ => previous}/ASN1c/ABSInformationTDD.h | 0 e2sim/{ => previous}/ASN1c/ANY.c | 0 e2sim/{ => previous}/ASN1c/ANY.h | 0 .../{ => previous}/ASN1c/AS-SecurityInformation.c | 0 .../{ => previous}/ASN1c/AS-SecurityInformation.h | 0 e2sim/{ => previous}/ASN1c/ActionParameter-ID.c | 0 e2sim/{ => previous}/ASN1c/ActionParameter-ID.h | 0 e2sim/{ => previous}/ASN1c/ActionParameter-Item.c | 0 e2sim/{ => previous}/ASN1c/ActionParameter-Item.h | 0 e2sim/{ => previous}/ASN1c/ActionParameter-Value.c | 0 e2sim/{ => previous}/ASN1c/ActionParameter-Value.h | 0 .../{ => previous}/ASN1c/ActivatedCellList-Item.c | 0 .../{ => previous}/ASN1c/ActivatedCellList-Item.h | 0 e2sim/{ => previous}/ASN1c/ActivatedCellList.c | 0 e2sim/{ => previous}/ASN1c/ActivatedCellList.h | 0 .../ASN1c/ActivatedNRCellList-Item.c | 0 .../ASN1c/ActivatedNRCellList-Item.h | 0 e2sim/{ => previous}/ASN1c/ActivatedNRCellList.c | 0 e2sim/{ => previous}/ASN1c/ActivatedNRCellList.h | 0 e2sim/{ => previous}/ASN1c/ActivationID.c | 0 e2sim/{ => previous}/ASN1c/ActivationID.h | 0 .../ASN1c/AdditionalSpecialSubframe-Info.c | 0 .../ASN1c/AdditionalSpecialSubframe-Info.h | 0 .../AdditionalSpecialSubframeExtension-Info.c | 0 .../AdditionalSpecialSubframeExtension-Info.h | 0 .../ASN1c/AdditionalSpecialSubframePatterns.c | 0 .../ASN1c/AdditionalSpecialSubframePatterns.h | 0 .../AdditionalSpecialSubframePatternsExtension.c | 0 .../AdditionalSpecialSubframePatternsExtension.h | 0 .../ASN1c/AerialUEsubscriptionInformation.c | 0 .../ASN1c/AerialUEsubscriptionInformation.h | 0 .../ASN1c/AllocationAndRetentionPriority.c | 0 .../ASN1c/AllocationAndRetentionPriority.h | 0 e2sim/{ => previous}/ASN1c/AreaScopeOfMDT.c | 0 e2sim/{ => previous}/ASN1c/AreaScopeOfMDT.h | 0 e2sim/{ => previous}/ASN1c/AreaScopeOfQMC.c | 0 e2sim/{ => previous}/ASN1c/AreaScopeOfQMC.h | 0 e2sim/{ => previous}/ASN1c/BIT_STRING.c | 0 e2sim/{ => previous}/ASN1c/BIT_STRING.h | 0 e2sim/{ => previous}/ASN1c/BOOLEAN.c | 0 e2sim/{ => previous}/ASN1c/BOOLEAN.h | 0 e2sim/{ => previous}/ASN1c/BandInfo.c | 0 e2sim/{ => previous}/ASN1c/BandInfo.h | 0 e2sim/{ => previous}/ASN1c/BandwidthReducedSI.c | 0 e2sim/{ => previous}/ASN1c/BandwidthReducedSI.h | 0 e2sim/{ => previous}/ASN1c/BearerType.c | 0 e2sim/{ => previous}/ASN1c/BearerType.h | 0 e2sim/{ => previous}/ASN1c/BenefitMetric.c | 0 e2sim/{ => previous}/ASN1c/BenefitMetric.h | 0 e2sim/{ => previous}/ASN1c/BitRate.c | 0 e2sim/{ => previous}/ASN1c/BitRate.h | 0 e2sim/{ => previous}/ASN1c/BluetoothMeasConfig.c | 0 e2sim/{ => previous}/ASN1c/BluetoothMeasConfig.h | 0 .../ASN1c/BluetoothMeasConfigNameList.c | 0 .../ASN1c/BluetoothMeasConfigNameList.h | 0 .../ASN1c/BluetoothMeasurementConfiguration.c | 0 .../ASN1c/BluetoothMeasurementConfiguration.h | 0 e2sim/{ => previous}/ASN1c/BluetoothName.c | 0 e2sim/{ => previous}/ASN1c/BluetoothName.h | 0 e2sim/{ => previous}/ASN1c/BroadcastPLMNs-Item.c | 0 e2sim/{ => previous}/ASN1c/BroadcastPLMNs-Item.h | 0 e2sim/{ => previous}/ASN1c/CNTypeRestrictions.c | 0 e2sim/{ => previous}/ASN1c/CNTypeRestrictions.h | 0 .../{ => previous}/ASN1c/CNTypeRestrictionsItem.c | 0 .../{ => previous}/ASN1c/CNTypeRestrictionsItem.h | 0 e2sim/{ => previous}/ASN1c/COUNTValueExtended.c | 0 e2sim/{ => previous}/ASN1c/COUNTValueExtended.h | 0 e2sim/{ => previous}/ASN1c/COUNTvalue.c | 0 e2sim/{ => previous}/ASN1c/COUNTvalue.h | 0 .../ASN1c/COUNTvaluePDCP-SNlength18.c | 0 .../ASN1c/COUNTvaluePDCP-SNlength18.h | 0 e2sim/{ => previous}/ASN1c/CRNTI.c | 0 e2sim/{ => previous}/ASN1c/CRNTI.h | 0 e2sim/{ => previous}/ASN1c/CSG-Id.c | 0 e2sim/{ => previous}/ASN1c/CSG-Id.h | 0 e2sim/{ => previous}/ASN1c/CSGMembershipStatus.c | 0 e2sim/{ => previous}/ASN1c/CSGMembershipStatus.h | 0 e2sim/{ => previous}/ASN1c/CSIReportList.c | 0 e2sim/{ => previous}/ASN1c/CSIReportList.h | 0 .../{ => previous}/ASN1c/CSIReportPerCSIProcess.c | 0 .../{ => previous}/ASN1c/CSIReportPerCSIProcess.h | 0 .../ASN1c/CSIReportPerCSIProcessItem.c | 0 .../ASN1c/CSIReportPerCSIProcessItem.h | 0 e2sim/{ => previous}/ASN1c/CallProcess-ID.c | 0 e2sim/{ => previous}/ASN1c/CallProcess-ID.h | 0 e2sim/{ => previous}/ASN1c/CapacityValue.c | 0 e2sim/{ => previous}/ASN1c/CapacityValue.h | 0 e2sim/{ => previous}/ASN1c/Cause.c | 0 e2sim/{ => previous}/ASN1c/Cause.h | 0 e2sim/{ => previous}/ASN1c/CauseMisc.c | 0 e2sim/{ => previous}/ASN1c/CauseMisc.h | 0 e2sim/{ => previous}/ASN1c/CauseProtocol.c | 0 e2sim/{ => previous}/ASN1c/CauseProtocol.h | 0 e2sim/{ => previous}/ASN1c/CauseRIC.c | 0 e2sim/{ => previous}/ASN1c/CauseRIC.h | 0 e2sim/{ => previous}/ASN1c/CauseRadioNetwork.c | 0 e2sim/{ => previous}/ASN1c/CauseRadioNetwork.h | 0 e2sim/{ => previous}/ASN1c/CauseTransport.c | 0 e2sim/{ => previous}/ASN1c/CauseTransport.h | 0 e2sim/{ => previous}/ASN1c/Cell-Size.c | 0 e2sim/{ => previous}/ASN1c/Cell-Size.h | 0 e2sim/{ => previous}/ASN1c/CellActivationFailure.c | 0 e2sim/{ => previous}/ASN1c/CellActivationFailure.h | 0 e2sim/{ => previous}/ASN1c/CellActivationRequest.c | 0 e2sim/{ => previous}/ASN1c/CellActivationRequest.h | 0 .../{ => previous}/ASN1c/CellActivationResponse.c | 0 .../{ => previous}/ASN1c/CellActivationResponse.h | 0 .../ASN1c/CellAssistanceInformation.c | 0 .../ASN1c/CellAssistanceInformation.h | 0 e2sim/{ => previous}/ASN1c/CellBasedMDT.c | 0 e2sim/{ => previous}/ASN1c/CellBasedMDT.h | 0 e2sim/{ => previous}/ASN1c/CellBasedQMC.c | 0 e2sim/{ => previous}/ASN1c/CellBasedQMC.h | 0 .../{ => previous}/ASN1c/CellCapacityClassValue.c | 0 .../{ => previous}/ASN1c/CellCapacityClassValue.h | 0 .../ASN1c/CellDeploymentStatusIndicator.c | 0 .../ASN1c/CellDeploymentStatusIndicator.h | 0 e2sim/{ => previous}/ASN1c/CellIdListforMDT.c | 0 e2sim/{ => previous}/ASN1c/CellIdListforMDT.h | 0 e2sim/{ => previous}/ASN1c/CellIdListforQMC.c | 0 e2sim/{ => previous}/ASN1c/CellIdListforQMC.h | 0 e2sim/{ => previous}/ASN1c/CellInformation-Item.c | 0 e2sim/{ => previous}/ASN1c/CellInformation-Item.h | 0 e2sim/{ => previous}/ASN1c/CellInformation-List.c | 0 e2sim/{ => previous}/ASN1c/CellInformation-List.h | 0 .../ASN1c/CellMeasurementResult-Item.c | 0 .../ASN1c/CellMeasurementResult-Item.h | 0 .../ASN1c/CellMeasurementResult-List.c | 0 .../ASN1c/CellMeasurementResult-List.h | 0 e2sim/{ => previous}/ASN1c/CellReplacingInfo.c | 0 e2sim/{ => previous}/ASN1c/CellReplacingInfo.h | 0 .../{ => previous}/ASN1c/CellReportingIndicator.c | 0 .../{ => previous}/ASN1c/CellReportingIndicator.h | 0 e2sim/{ => previous}/ASN1c/CellToReport-Item.c | 0 e2sim/{ => previous}/ASN1c/CellToReport-Item.h | 0 e2sim/{ => previous}/ASN1c/CellToReport-List.c | 0 e2sim/{ => previous}/ASN1c/CellToReport-List.h | 0 e2sim/{ => previous}/ASN1c/CellType.c | 0 e2sim/{ => previous}/ASN1c/CellType.h | 0 e2sim/{ => previous}/ASN1c/CoMPHypothesisSet.c | 0 e2sim/{ => previous}/ASN1c/CoMPHypothesisSet.h | 0 e2sim/{ => previous}/ASN1c/CoMPHypothesisSetItem.c | 0 e2sim/{ => previous}/ASN1c/CoMPHypothesisSetItem.h | 0 e2sim/{ => previous}/ASN1c/CoMPInformation.c | 0 e2sim/{ => previous}/ASN1c/CoMPInformation.h | 0 e2sim/{ => previous}/ASN1c/CoMPInformationItem.c | 0 e2sim/{ => previous}/ASN1c/CoMPInformationItem.h | 0 .../ASN1c/CoMPInformationStartTime.c | 0 .../ASN1c/CoMPInformationStartTime.h | 0 .../ASN1c/CompleteFailureCauseInformation-Item.c | 0 .../ASN1c/CompleteFailureCauseInformation-Item.h | 0 .../ASN1c/CompleteFailureCauseInformation-List.c | 0 .../ASN1c/CompleteFailureCauseInformation-List.h | 0 .../ASN1c/CompositeAvailableCapacity.c | 0 .../ASN1c/CompositeAvailableCapacity.h | 0 .../ASN1c/CompositeAvailableCapacityGroup.c | 0 .../ASN1c/CompositeAvailableCapacityGroup.h | 0 e2sim/{ => previous}/ASN1c/Correlation-ID.c | 0 e2sim/{ => previous}/ASN1c/Correlation-ID.h | 0 .../ASN1c/CoverageModification-Item.c | 0 .../ASN1c/CoverageModification-Item.h | 0 .../ASN1c/CoverageModificationList.c | 0 .../ASN1c/CoverageModificationList.h | 0 e2sim/{ => previous}/ASN1c/Criticality.c | 0 e2sim/{ => previous}/ASN1c/Criticality.h | 0 .../ASN1c/CriticalityDiagnostics-IE-List.c | 0 .../ASN1c/CriticalityDiagnostics-IE-List.h | 0 .../{ => previous}/ASN1c/CriticalityDiagnostics.c | 0 .../{ => previous}/ASN1c/CriticalityDiagnostics.h | 0 e2sim/{ => previous}/ASN1c/CyclicPrefixDL.c | 0 e2sim/{ => previous}/ASN1c/CyclicPrefixDL.h | 0 e2sim/{ => previous}/ASN1c/CyclicPrefixUL.c | 0 e2sim/{ => previous}/ASN1c/CyclicPrefixUL.h | 0 e2sim/{ => previous}/ASN1c/DL-ABS-status.c | 0 e2sim/{ => previous}/ASN1c/DL-ABS-status.h | 0 e2sim/{ => previous}/ASN1c/DL-Forwarding.c | 0 e2sim/{ => previous}/ASN1c/DL-Forwarding.h | 0 e2sim/{ => previous}/ASN1c/DL-GBR-PRB-usage.c | 0 e2sim/{ => previous}/ASN1c/DL-GBR-PRB-usage.h | 0 e2sim/{ => previous}/ASN1c/DL-Total-PRB-usage.c | 0 e2sim/{ => previous}/ASN1c/DL-Total-PRB-usage.h | 0 e2sim/{ => previous}/ASN1c/DL-non-GBR-PRB-usage.c | 0 e2sim/{ => previous}/ASN1c/DL-non-GBR-PRB-usage.h | 0 .../ASN1c/DL-scheduling-PDCCH-CCE-usage.c | 0 .../ASN1c/DL-scheduling-PDCCH-CCE-usage.h | 0 .../ASN1c/DLResourceBitmapULandDLSharing.c | 0 .../ASN1c/DLResourceBitmapULandDLSharing.h | 0 .../ASN1c/DLResourcesULandDLSharing.c | 0 .../ASN1c/DLResourcesULandDLSharing.h | 0 e2sim/{ => previous}/ASN1c/DRB-ID.c | 0 e2sim/{ => previous}/ASN1c/DRB-ID.h | 0 .../ASN1c/DataForwardingAddressIndication.c | 0 .../ASN1c/DataForwardingAddressIndication.h | 0 .../ASN1c/DataTrafficResourceIndication.c | 0 .../ASN1c/DataTrafficResourceIndication.h | 0 e2sim/{ => previous}/ASN1c/DataTrafficResources.c | 0 e2sim/{ => previous}/ASN1c/DataTrafficResources.h | 0 .../{ => previous}/ASN1c/DeactivationIndication.c | 0 .../{ => previous}/ASN1c/DeactivationIndication.h | 0 e2sim/{ => previous}/ASN1c/DeliveryStatus.c | 0 e2sim/{ => previous}/ASN1c/DeliveryStatus.h | 0 e2sim/{ => previous}/ASN1c/DuplicationActivation.c | 0 e2sim/{ => previous}/ASN1c/DuplicationActivation.h | 0 .../ASN1c/DynamicDLTransmissionInformation.c | 0 .../ASN1c/DynamicDLTransmissionInformation.h | 0 .../{ => previous}/ASN1c/DynamicNAICSInformation.c | 0 .../{ => previous}/ASN1c/DynamicNAICSInformation.h | 0 e2sim/{ => previous}/ASN1c/E-RAB-ID.c | 0 e2sim/{ => previous}/ASN1c/E-RAB-ID.h | 0 e2sim/{ => previous}/ASN1c/E-RAB-Item.c | 0 e2sim/{ => previous}/ASN1c/E-RAB-Item.h | 0 .../ASN1c/E-RAB-Level-QoS-Parameters.c | 0 .../ASN1c/E-RAB-Level-QoS-Parameters.h | 0 e2sim/{ => previous}/ASN1c/E-RAB-List.c | 0 e2sim/{ => previous}/ASN1c/E-RAB-List.h | 0 e2sim/{ => previous}/ASN1c/E-RABUsageReport-Item.c | 0 e2sim/{ => previous}/ASN1c/E-RABUsageReport-Item.h | 0 e2sim/{ => previous}/ASN1c/E-RABUsageReportList.c | 0 e2sim/{ => previous}/ASN1c/E-RABUsageReportList.h | 0 e2sim/{ => previous}/ASN1c/E-RABs-Admitted-Item.c | 0 e2sim/{ => previous}/ASN1c/E-RABs-Admitted-Item.h | 0 e2sim/{ => previous}/ASN1c/E-RABs-Admitted-List.c | 0 e2sim/{ => previous}/ASN1c/E-RABs-Admitted-List.h | 0 .../E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c | 0 .../E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h | 0 .../E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c | 0 .../E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-Item.c | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-Item.h | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-List.c | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-List.h | 0 ...RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c | 0 ...RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h | 0 ...Bs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c | 0 ...Bs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c | 0 .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h | 0 ...BeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c | 0 ...BeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h | 0 ...-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c | 0 ...-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h | 0 .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c | 0 .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h | 0 .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c | 0 .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h | 0 ...-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c | 0 ...-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h | 0 ...ted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c | 0 ...ted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h | 0 .../E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c | 0 .../E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h | 0 .../E-RABs-Admitted-ToBeAdded-SgNBModAckList.c | 0 .../E-RABs-Admitted-ToBeAdded-SgNBModAckList.h | 0 ...s-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c | 0 ...s-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h | 0 ...Admitted-ToBeModified-ModAckItem-Split-Bearer.c | 0 ...Admitted-ToBeModified-ModAckItem-Split-Bearer.h | 0 .../E-RABs-Admitted-ToBeModified-ModAckItem.c | 0 .../E-RABs-Admitted-ToBeModified-ModAckItem.h | 0 .../E-RABs-Admitted-ToBeModified-ModAckList.c | 0 .../E-RABs-Admitted-ToBeModified-ModAckList.h | 0 ...BeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c | 0 ...BeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h | 0 ...-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c | 0 ...-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h | 0 .../E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c | 0 .../E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h | 0 .../E-RABs-Admitted-ToBeModified-SgNBModAckList.c | 0 .../E-RABs-Admitted-ToBeModified-SgNBModAckList.h | 0 ...s-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c | 0 ...s-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h | 0 ...Admitted-ToBeReleased-ModAckItem-Split-Bearer.c | 0 ...Admitted-ToBeReleased-ModAckItem-Split-Bearer.h | 0 .../E-RABs-Admitted-ToBeReleased-ModAckList.c | 0 .../E-RABs-Admitted-ToBeReleased-ModAckList.h | 0 ...BeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c | 0 ...BeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h | 0 ...-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c | 0 ...-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h | 0 .../E-RABs-Admitted-ToBeReleased-SgNBModAckList.c | 0 .../E-RABs-Admitted-ToBeReleased-SgNBModAckList.h | 0 ...RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c | 0 ...RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h | 0 ...-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c | 0 ...-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h | 0 .../ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c | 0 .../ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h | 0 .../E-RABs-Admitted-ToReleased-SgNBModAck-Item.c | 0 .../E-RABs-Admitted-ToReleased-SgNBModAck-Item.h | 0 ...eModified-SgNBModConf-Item-SgNBPDCPnotpresent.c | 0 ...eModified-SgNBModConf-Item-SgNBPDCPnotpresent.h | 0 ...ToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c | 0 ...ToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h | 0 .../E-RABs-AdmittedToBeModified-SgNBModConf-Item.c | 0 .../E-RABs-AdmittedToBeModified-SgNBModConf-Item.h | 0 .../E-RABs-AdmittedToBeModified-SgNBModConfList.c | 0 .../E-RABs-AdmittedToBeModified-SgNBModConfList.h | 0 .../ASN1c/E-RABs-DataForwardingAddress-Item.c | 0 .../ASN1c/E-RABs-DataForwardingAddress-Item.h | 0 .../ASN1c/E-RABs-DataForwardingAddress-List.c | 0 .../ASN1c/E-RABs-DataForwardingAddress-List.h | 0 .../ASN1c/E-RABs-SubjectToCounterCheck-List.c | 0 .../ASN1c/E-RABs-SubjectToCounterCheck-List.h | 0 .../ASN1c/E-RABs-SubjectToCounterCheckItem.c | 0 .../ASN1c/E-RABs-SubjectToCounterCheckItem.h | 0 .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c | 0 .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h | 0 .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c | 0 .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h | 0 .../ASN1c/E-RABs-SubjectToStatusTransfer-Item.c | 0 .../ASN1c/E-RABs-SubjectToStatusTransfer-Item.h | 0 .../ASN1c/E-RABs-SubjectToStatusTransfer-List.c | 0 .../ASN1c/E-RABs-SubjectToStatusTransfer-List.h | 0 .../ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c | 0 .../ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h | 0 .../ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c | 0 .../ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item.c | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item.h | 0 .../ASN1c/E-RABs-ToBeAdded-List-ModReq.c | 0 .../ASN1c/E-RABs-ToBeAdded-List-ModReq.h | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-List.c | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-List.h | 0 .../ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c | 0 .../ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h | 0 .../E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c | 0 .../E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h | 0 .../ASN1c/E-RABs-ToBeAdded-ModReqItem.c | 0 .../ASN1c/E-RABs-ToBeAdded-ModReqItem.h | 0 ...-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c | 0 ...-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h | 0 ...ABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c | 0 ...ABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h | 0 ...-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c | 0 ...-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h | 0 ...ABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c | 0 ...ABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c | 0 .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h | 0 .../ASN1c/E-RABs-ToBeModified-List-ModReq.c | 0 .../ASN1c/E-RABs-ToBeModified-List-ModReq.h | 0 .../E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c | 0 .../E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h | 0 .../E-RABs-ToBeModified-ModReqItem-Split-Bearer.c | 0 .../E-RABs-ToBeModified-ModReqItem-Split-Bearer.h | 0 .../ASN1c/E-RABs-ToBeModified-ModReqItem.c | 0 .../ASN1c/E-RABs-ToBeModified-ModReqItem.h | 0 ...BeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c | 0 ...BeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h | 0 ...-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c | 0 ...-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h | 0 ...eModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c | 0 ...eModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h | 0 ...ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c | 0 ...ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c | 0 .../ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h | 0 .../ASN1c/E-RABs-ToBeReleased-List-ModReq.c | 0 .../ASN1c/E-RABs-ToBeReleased-List-ModReq.h | 0 .../ASN1c/E-RABs-ToBeReleased-List-RelConf.c | 0 .../ASN1c/E-RABs-ToBeReleased-List-RelConf.h | 0 .../ASN1c/E-RABs-ToBeReleased-List-RelReq.c | 0 .../ASN1c/E-RABs-ToBeReleased-List-RelReq.h | 0 .../E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c | 0 .../E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h | 0 .../E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c | 0 .../E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h | 0 .../ASN1c/E-RABs-ToBeReleased-ModReqItem.c | 0 .../ASN1c/E-RABs-ToBeReleased-ModReqItem.h | 0 .../ASN1c/E-RABs-ToBeReleased-ModReqd.c | 0 .../ASN1c/E-RABs-ToBeReleased-ModReqd.h | 0 .../ASN1c/E-RABs-ToBeReleased-ModReqdItem.c | 0 .../ASN1c/E-RABs-ToBeReleased-ModReqdItem.h | 0 .../E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c | 0 .../E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h | 0 .../E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c | 0 .../E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h | 0 .../ASN1c/E-RABs-ToBeReleased-RelConfItem.c | 0 .../ASN1c/E-RABs-ToBeReleased-RelConfItem.h | 0 .../E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c | 0 .../E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h | 0 .../E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c | 0 .../E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h | 0 .../ASN1c/E-RABs-ToBeReleased-RelReqItem.c | 0 .../ASN1c/E-RABs-ToBeReleased-RelReqItem.h | 0 ...eReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c | 0 ...eReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h | 0 ...ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c | 0 ...ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h | 0 ...BeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c | 0 ...BeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h | 0 ...-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c | 0 ...-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h | 0 ...eReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c | 0 ...eReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h | 0 ...ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c | 0 ...ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h | 0 ...BeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c | 0 ...BeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h | 0 ...-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c | 0 ...-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c | 0 .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-Item.c | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-Item.h | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-List.c | 0 e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-List.h | 0 .../ASN1c/E-RABs-ToBeSetup-ListRetrieve.c | 0 .../ASN1c/E-RABs-ToBeSetup-ListRetrieve.h | 0 .../ASN1c/E-RABs-ToBeSetupRetrieve-Item.c | 0 .../ASN1c/E-RABs-ToBeSetupRetrieve-Item.h | 0 e2sim/{ => previous}/ASN1c/E2AP-PDU.c | 0 e2sim/{ => previous}/ASN1c/E2AP-PDU.h | 0 .../ASN1c/E2SM-gNB-X2-actionDefinition.c | 0 .../ASN1c/E2SM-gNB-X2-actionDefinition.h | 0 .../ASN1c/E2SM-gNB-X2-callProcessID.c | 0 .../ASN1c/E2SM-gNB-X2-callProcessID.h | 0 .../ASN1c/E2SM-gNB-X2-controlHeader.c | 0 .../ASN1c/E2SM-gNB-X2-controlHeader.h | 0 .../ASN1c/E2SM-gNB-X2-controlMessage.c | 0 .../ASN1c/E2SM-gNB-X2-controlMessage.h | 0 .../ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c | 0 .../ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h | 0 .../ASN1c/E2SM-gNB-X2-indicationHeader.c | 0 .../ASN1c/E2SM-gNB-X2-indicationHeader.h | 0 .../ASN1c/E2SM-gNB-X2-indicationMessage.c | 0 .../ASN1c/E2SM-gNB-X2-indicationMessage.h | 0 e2sim/{ => previous}/ASN1c/EARFCN.c | 0 e2sim/{ => previous}/ASN1c/EARFCN.h | 0 e2sim/{ => previous}/ASN1c/EARFCNExtension.c | 0 e2sim/{ => previous}/ASN1c/EARFCNExtension.h | 0 e2sim/{ => previous}/ASN1c/ECGI.c | 0 e2sim/{ => previous}/ASN1c/ECGI.h | 0 .../ASN1c/EN-DC-ResourceConfiguration.c | 0 .../ASN1c/EN-DC-ResourceConfiguration.h | 0 e2sim/{ => previous}/ASN1c/ENB-ID.c | 0 e2sim/{ => previous}/ASN1c/ENB-ID.h | 0 .../{ => previous}/ASN1c/ENBConfigurationUpdate.c | 0 .../{ => previous}/ASN1c/ENBConfigurationUpdate.h | 0 .../ASN1c/ENBConfigurationUpdateAcknowledge.c | 0 .../ASN1c/ENBConfigurationUpdateAcknowledge.h | 0 .../ASN1c/ENBConfigurationUpdateFailure.c | 0 .../ASN1c/ENBConfigurationUpdateFailure.h | 0 .../ASN1c/ENDCCellActivationFailure.c | 0 .../ASN1c/ENDCCellActivationFailure.h | 0 .../ASN1c/ENDCCellActivationRequest.c | 0 .../ASN1c/ENDCCellActivationRequest.h | 0 .../ASN1c/ENDCCellActivationResponse.c | 0 .../ASN1c/ENDCCellActivationResponse.h | 0 .../{ => previous}/ASN1c/ENDCConfigurationUpdate.c | 0 .../{ => previous}/ASN1c/ENDCConfigurationUpdate.h | 0 .../ASN1c/ENDCConfigurationUpdateAcknowledge.c | 0 .../ASN1c/ENDCConfigurationUpdateAcknowledge.h | 0 .../ASN1c/ENDCConfigurationUpdateFailure.c | 0 .../ASN1c/ENDCConfigurationUpdateFailure.h | 0 .../{ => previous}/ASN1c/ENDCPartialResetConfirm.c | 0 .../{ => previous}/ASN1c/ENDCPartialResetConfirm.h | 0 .../ASN1c/ENDCPartialResetRequired.c | 0 .../ASN1c/ENDCPartialResetRequired.h | 0 e2sim/{ => previous}/ASN1c/ENDCX2RemovalFailure.c | 0 e2sim/{ => previous}/ASN1c/ENDCX2RemovalFailure.h | 0 e2sim/{ => previous}/ASN1c/ENDCX2RemovalRequest.c | 0 e2sim/{ => previous}/ASN1c/ENDCX2RemovalRequest.h | 0 e2sim/{ => previous}/ASN1c/ENDCX2RemovalResponse.c | 0 e2sim/{ => previous}/ASN1c/ENDCX2RemovalResponse.h | 0 e2sim/{ => previous}/ASN1c/ENDCX2SetupFailure.c | 0 e2sim/{ => previous}/ASN1c/ENDCX2SetupFailure.h | 0 e2sim/{ => previous}/ASN1c/ENDCX2SetupRequest.c | 0 e2sim/{ => previous}/ASN1c/ENDCX2SetupRequest.h | 0 e2sim/{ => previous}/ASN1c/ENDCX2SetupResponse.c | 0 e2sim/{ => previous}/ASN1c/ENDCX2SetupResponse.h | 0 e2sim/{ => previous}/ASN1c/EPLMNs.c | 0 e2sim/{ => previous}/ASN1c/EPLMNs.h | 0 .../{ => previous}/ASN1c/ERABActivityNotifyItem.c | 0 .../{ => previous}/ASN1c/ERABActivityNotifyItem.h | 0 .../ASN1c/ERABActivityNotifyItemList.c | 0 .../ASN1c/ERABActivityNotifyItemList.h | 0 e2sim/{ => previous}/ASN1c/EUTRA-Mode-Info.c | 0 e2sim/{ => previous}/ASN1c/EUTRA-Mode-Info.h | 0 e2sim/{ => previous}/ASN1c/EUTRANCellIdentifier.c | 0 e2sim/{ => previous}/ASN1c/EUTRANCellIdentifier.h | 0 .../ASN1c/EUTRANRCellResourceCoordinationRequest.c | 0 .../ASN1c/EUTRANRCellResourceCoordinationRequest.h | 0 .../EUTRANRCellResourceCoordinationResponse.c | 0 .../EUTRANRCellResourceCoordinationResponse.h | 0 e2sim/{ => previous}/ASN1c/EUTRANTraceID.c | 0 e2sim/{ => previous}/ASN1c/EUTRANTraceID.h | 0 e2sim/{ => previous}/ASN1c/EncryptionAlgorithms.c | 0 e2sim/{ => previous}/ASN1c/EncryptionAlgorithms.h | 0 e2sim/{ => previous}/ASN1c/EnhancedRNTP.c | 0 e2sim/{ => previous}/ASN1c/EnhancedRNTP.h | 0 e2sim/{ => previous}/ASN1c/EnhancedRNTPStartTime.c | 0 e2sim/{ => previous}/ASN1c/EnhancedRNTPStartTime.h | 0 e2sim/{ => previous}/ASN1c/ErrorIndication.c | 0 e2sim/{ => previous}/ASN1c/ErrorIndication.h | 0 e2sim/{ => previous}/ASN1c/EventType.c | 0 e2sim/{ => previous}/ASN1c/EventType.h | 0 .../{ => previous}/ASN1c/ExpectedActivityPeriod.c | 0 .../{ => previous}/ASN1c/ExpectedActivityPeriod.h | 0 e2sim/{ => previous}/ASN1c/ExpectedHOInterval.c | 0 e2sim/{ => previous}/ASN1c/ExpectedHOInterval.h | 0 e2sim/{ => previous}/ASN1c/ExpectedIdlePeriod.c | 0 e2sim/{ => previous}/ASN1c/ExpectedIdlePeriod.h | 0 .../ASN1c/ExpectedUEActivityBehaviour.c | 0 .../ASN1c/ExpectedUEActivityBehaviour.h | 0 e2sim/{ => previous}/ASN1c/ExpectedUEBehaviour.c | 0 e2sim/{ => previous}/ASN1c/ExpectedUEBehaviour.h | 0 e2sim/{ => previous}/ASN1c/ExtendedBitRate.c | 0 e2sim/{ => previous}/ASN1c/ExtendedBitRate.h | 0 .../ASN1c/ExtendedULInterferenceOverloadInfo.c | 0 .../ASN1c/ExtendedULInterferenceOverloadInfo.h | 0 e2sim/{ => previous}/ASN1c/FDD-Info.c | 0 e2sim/{ => previous}/ASN1c/FDD-Info.h | 0 .../FDD-InfoNeighbourServedNRCell-Information.c | 0 .../FDD-InfoNeighbourServedNRCell-Information.h | 0 .../ASN1c/FDD-InfoServedNRCell-Information.c | 0 .../ASN1c/FDD-InfoServedNRCell-Information.h | 0 e2sim/{ => previous}/ASN1c/FiveGS-TAC.c | 0 e2sim/{ => previous}/ASN1c/FiveGS-TAC.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenInterRATs.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenInterRATs.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenLACs.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenLACs.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenLAs-Item.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenLAs-Item.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenLAs.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenLAs.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenTACs.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenTACs.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenTAs-Item.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenTAs-Item.h | 0 e2sim/{ => previous}/ASN1c/ForbiddenTAs.c | 0 e2sim/{ => previous}/ASN1c/ForbiddenTAs.h | 0 e2sim/{ => previous}/ASN1c/Fourframes.c | 0 e2sim/{ => previous}/ASN1c/Fourframes.h | 0 e2sim/{ => previous}/ASN1c/FreqBandIndicator.c | 0 e2sim/{ => previous}/ASN1c/FreqBandIndicator.h | 0 .../ASN1c/FreqBandIndicatorPriority.c | 0 .../ASN1c/FreqBandIndicatorPriority.h | 0 e2sim/{ => previous}/ASN1c/FreqBandNrItem.c | 0 e2sim/{ => previous}/ASN1c/FreqBandNrItem.h | 0 e2sim/{ => previous}/ASN1c/GBR-QosInformation.c | 0 e2sim/{ => previous}/ASN1c/GBR-QosInformation.h | 0 e2sim/{ => previous}/ASN1c/GNB-ID.c | 0 e2sim/{ => previous}/ASN1c/GNB-ID.h | 0 .../{ => previous}/ASN1c/GNBOverloadInformation.c | 0 .../{ => previous}/ASN1c/GNBOverloadInformation.h | 0 e2sim/{ => previous}/ASN1c/GNBStatusIndication.c | 0 e2sim/{ => previous}/ASN1c/GNBStatusIndication.h | 0 e2sim/{ => previous}/ASN1c/GTP-TEI.c | 0 e2sim/{ => previous}/ASN1c/GTP-TEI.h | 0 e2sim/{ => previous}/ASN1c/GTPtunnelEndpoint.c | 0 e2sim/{ => previous}/ASN1c/GTPtunnelEndpoint.h | 0 e2sim/{ => previous}/ASN1c/GU-Group-ID.c | 0 e2sim/{ => previous}/ASN1c/GU-Group-ID.h | 0 e2sim/{ => previous}/ASN1c/GUGroupIDList.c | 0 e2sim/{ => previous}/ASN1c/GUGroupIDList.h | 0 e2sim/{ => previous}/ASN1c/GUMMEI.c | 0 e2sim/{ => previous}/ASN1c/GUMMEI.h | 0 e2sim/{ => previous}/ASN1c/GlobalENB-ID.c | 0 e2sim/{ => previous}/ASN1c/GlobalENB-ID.h | 0 e2sim/{ => previous}/ASN1c/GlobalGNB-ID.c | 0 e2sim/{ => previous}/ASN1c/GlobalGNB-ID.h | 0 e2sim/{ => previous}/ASN1c/HFN.c | 0 e2sim/{ => previous}/ASN1c/HFN.h | 0 e2sim/{ => previous}/ASN1c/HFNModified.c | 0 e2sim/{ => previous}/ASN1c/HFNModified.h | 0 e2sim/{ => previous}/ASN1c/HFNforPDCP-SNlength18.c | 0 e2sim/{ => previous}/ASN1c/HFNforPDCP-SNlength18.h | 0 e2sim/{ => previous}/ASN1c/HWLoadIndicator.c | 0 e2sim/{ => previous}/ASN1c/HWLoadIndicator.h | 0 e2sim/{ => previous}/ASN1c/HandoverCancel.c | 0 e2sim/{ => previous}/ASN1c/HandoverCancel.h | 0 .../ASN1c/HandoverPreparationFailure.c | 0 .../ASN1c/HandoverPreparationFailure.h | 0 e2sim/{ => previous}/ASN1c/HandoverReport.c | 0 e2sim/{ => previous}/ASN1c/HandoverReport.h | 0 e2sim/{ => previous}/ASN1c/HandoverReportType.c | 0 e2sim/{ => previous}/ASN1c/HandoverReportType.h | 0 e2sim/{ => previous}/ASN1c/HandoverRequest.c | 0 e2sim/{ => previous}/ASN1c/HandoverRequest.h | 0 .../ASN1c/HandoverRequestAcknowledge.c | 0 .../ASN1c/HandoverRequestAcknowledge.h | 0 .../{ => previous}/ASN1c/HandoverRestrictionList.c | 0 .../{ => previous}/ASN1c/HandoverRestrictionList.h | 0 e2sim/{ => previous}/ASN1c/INTEGER.c | 0 e2sim/{ => previous}/ASN1c/INTEGER.h | 0 e2sim/{ => previous}/ASN1c/InitiatingMessage.c | 0 e2sim/{ => previous}/ASN1c/InitiatingMessage.h | 0 .../ASN1c/InitiatingNodeType-EndcConfigUpdate.c | 0 .../ASN1c/InitiatingNodeType-EndcConfigUpdate.h | 0 .../ASN1c/InitiatingNodeType-EndcX2Removal.c | 0 .../ASN1c/InitiatingNodeType-EndcX2Removal.h | 0 .../ASN1c/InitiatingNodeType-EndcX2Setup.c | 0 .../ASN1c/InitiatingNodeType-EndcX2Setup.h | 0 ...atingNodeType-EutranrCellResourceCoordination.c | 0 ...atingNodeType-EutranrCellResourceCoordination.h | 0 .../ASN1c/IntegrityProtectionAlgorithms.c | 0 .../ASN1c/IntegrityProtectionAlgorithms.h | 0 e2sim/{ => previous}/ASN1c/Interface-ID.c | 0 e2sim/{ => previous}/ASN1c/Interface-ID.h | 0 e2sim/{ => previous}/ASN1c/InterfaceDirection.c | 0 e2sim/{ => previous}/ASN1c/InterfaceDirection.h | 0 e2sim/{ => previous}/ASN1c/InterfaceMessage.c | 0 e2sim/{ => previous}/ASN1c/InterfaceMessage.h | 0 e2sim/{ => previous}/ASN1c/InterfaceMessageType.c | 0 e2sim/{ => previous}/ASN1c/InterfaceMessageType.h | 0 .../{ => previous}/ASN1c/InterfaceProtocolIE-ID.c | 0 .../{ => previous}/ASN1c/InterfaceProtocolIE-ID.h | 0 .../ASN1c/InterfaceProtocolIE-Item.c | 0 .../ASN1c/InterfaceProtocolIE-Item.h | 0 .../ASN1c/InterfaceProtocolIE-Test.c | 0 .../ASN1c/InterfaceProtocolIE-Test.h | 0 .../ASN1c/InterfaceProtocolIE-Value.c | 0 .../ASN1c/InterfaceProtocolIE-Value.h | 0 e2sim/{ => previous}/ASN1c/InterfacesToTrace.c | 0 e2sim/{ => previous}/ASN1c/InterfacesToTrace.h | 0 e2sim/{ => previous}/ASN1c/InvokeIndication.c | 0 e2sim/{ => previous}/ASN1c/InvokeIndication.h | 0 e2sim/{ => previous}/ASN1c/Key-eNodeB-Star.c | 0 e2sim/{ => previous}/ASN1c/Key-eNodeB-Star.h | 0 e2sim/{ => previous}/ASN1c/LAC.c | 0 e2sim/{ => previous}/ASN1c/LAC.h | 0 e2sim/{ => previous}/ASN1c/LCID.c | 0 e2sim/{ => previous}/ASN1c/LCID.h | 0 e2sim/{ => previous}/ASN1c/LHN-ID.c | 0 e2sim/{ => previous}/ASN1c/LHN-ID.h | 0 e2sim/{ => previous}/ASN1c/LastVisitedCell-Item.c | 0 e2sim/{ => previous}/ASN1c/LastVisitedCell-Item.h | 0 .../ASN1c/LastVisitedEUTRANCellInformation.c | 0 .../ASN1c/LastVisitedEUTRANCellInformation.h | 0 .../ASN1c/LastVisitedGERANCellInformation.c | 0 .../ASN1c/LastVisitedGERANCellInformation.h | 0 .../ASN1c/LastVisitedNGRANCellInformation.c | 0 .../ASN1c/LastVisitedNGRANCellInformation.h | 0 .../ASN1c/LastVisitedUTRANCellInformation.c | 0 .../ASN1c/LastVisitedUTRANCellInformation.h | 0 e2sim/{ => previous}/ASN1c/Limited-list.c | 0 e2sim/{ => previous}/ASN1c/Limited-list.h | 0 e2sim/{ => previous}/ASN1c/Links-to-log.c | 0 e2sim/{ => previous}/ASN1c/Links-to-log.h | 0 .../ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c | 0 .../ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h | 0 .../ListofEUTRACellsinEUTRACoordinationResp.c | 0 .../ListofEUTRACellsinEUTRACoordinationResp.h | 0 .../ASN1c/ListofEUTRACellsinNRCoordinationReq.c | 0 .../ASN1c/ListofEUTRACellsinNRCoordinationReq.h | 0 .../ASN1c/ListofNRCellsinNRCoordinationReq.c | 0 .../ASN1c/ListofNRCellsinNRCoordinationReq.h | 0 .../ASN1c/ListofNRCellsinNRCoordinationResp.c | 0 .../ASN1c/ListofNRCellsinNRCoordinationResp.h | 0 e2sim/{ => previous}/ASN1c/LoadIndicator.c | 0 e2sim/{ => previous}/ASN1c/LoadIndicator.h | 0 e2sim/{ => previous}/ASN1c/LoadInformation.c | 0 e2sim/{ => previous}/ASN1c/LoadInformation.h | 0 .../ASN1c/LocationReportingInformation.c | 0 .../ASN1c/LocationReportingInformation.h | 0 e2sim/{ => previous}/ASN1c/M1PeriodicReporting.c | 0 e2sim/{ => previous}/ASN1c/M1PeriodicReporting.h | 0 e2sim/{ => previous}/ASN1c/M1ReportingTrigger.c | 0 e2sim/{ => previous}/ASN1c/M1ReportingTrigger.h | 0 e2sim/{ => previous}/ASN1c/M1ThresholdEventA2.c | 0 e2sim/{ => previous}/ASN1c/M1ThresholdEventA2.h | 0 e2sim/{ => previous}/ASN1c/M3Configuration.c | 0 e2sim/{ => previous}/ASN1c/M3Configuration.h | 0 e2sim/{ => previous}/ASN1c/M3period.c | 0 e2sim/{ => previous}/ASN1c/M3period.h | 0 e2sim/{ => previous}/ASN1c/M4Configuration.c | 0 e2sim/{ => previous}/ASN1c/M4Configuration.h | 0 e2sim/{ => previous}/ASN1c/M4period.c | 0 e2sim/{ => previous}/ASN1c/M4period.h | 0 e2sim/{ => previous}/ASN1c/M5Configuration.c | 0 e2sim/{ => previous}/ASN1c/M5Configuration.h | 0 e2sim/{ => previous}/ASN1c/M5period.c | 0 e2sim/{ => previous}/ASN1c/M5period.h | 0 e2sim/{ => previous}/ASN1c/M6Configuration.c | 0 e2sim/{ => previous}/ASN1c/M6Configuration.h | 0 e2sim/{ => previous}/ASN1c/M6delay-threshold.c | 0 e2sim/{ => previous}/ASN1c/M6delay-threshold.h | 0 e2sim/{ => previous}/ASN1c/M6report-interval.c | 0 e2sim/{ => previous}/ASN1c/M6report-interval.h | 0 e2sim/{ => previous}/ASN1c/M7Configuration.c | 0 e2sim/{ => previous}/ASN1c/M7Configuration.h | 0 e2sim/{ => previous}/ASN1c/M7period.c | 0 e2sim/{ => previous}/ASN1c/M7period.h | 0 .../ASN1c/MBMS-Service-Area-Identity-List.c | 0 .../ASN1c/MBMS-Service-Area-Identity-List.h | 0 .../ASN1c/MBMS-Service-Area-Identity.c | 0 .../ASN1c/MBMS-Service-Area-Identity.h | 0 e2sim/{ => previous}/ASN1c/MBSFN-Subframe-Info.c | 0 e2sim/{ => previous}/ASN1c/MBSFN-Subframe-Info.h | 0 .../{ => previous}/ASN1c/MBSFN-Subframe-Infolist.c | 0 .../{ => previous}/ASN1c/MBSFN-Subframe-Infolist.h | 0 e2sim/{ => previous}/ASN1c/MDT-Activation.c | 0 e2sim/{ => previous}/ASN1c/MDT-Activation.h | 0 e2sim/{ => previous}/ASN1c/MDT-Configuration.c | 0 e2sim/{ => previous}/ASN1c/MDT-Configuration.h | 0 e2sim/{ => previous}/ASN1c/MDT-Location-Info.c | 0 e2sim/{ => previous}/ASN1c/MDT-Location-Info.h | 0 e2sim/{ => previous}/ASN1c/MDTPLMNList.c | 0 e2sim/{ => previous}/ASN1c/MDTPLMNList.h | 0 e2sim/{ => previous}/ASN1c/MME-Code.c | 0 e2sim/{ => previous}/ASN1c/MME-Code.h | 0 e2sim/{ => previous}/ASN1c/MME-Group-ID.c | 0 e2sim/{ => previous}/ASN1c/MME-Group-ID.h | 0 .../ASN1c/MakeBeforeBreakIndicator.c | 0 .../ASN1c/MakeBeforeBreakIndicator.h | 0 e2sim/{ => previous}/ASN1c/Makefile.am.asn1convert | 0 e2sim/{ => previous}/ASN1c/Makefile.am.libasncodec | 0 .../ASN1c/ManagementBasedMDTallowed.c | 0 .../ASN1c/ManagementBasedMDTallowed.h | 0 e2sim/{ => previous}/ASN1c/Masked-IMEISV.c | 0 e2sim/{ => previous}/ASN1c/Masked-IMEISV.h | 0 .../ASN1c/MeNBCoordinationAssistanceInformation.c | 0 .../ASN1c/MeNBCoordinationAssistanceInformation.h | 0 .../ASN1c/MeNBResourceCoordinationInformation.c | 0 .../ASN1c/MeNBResourceCoordinationInformation.h | 0 e2sim/{ => previous}/ASN1c/MeNBtoSeNBContainer.c | 0 e2sim/{ => previous}/ASN1c/MeNBtoSeNBContainer.h | 0 e2sim/{ => previous}/ASN1c/MeNBtoSgNBContainer.c | 0 e2sim/{ => previous}/ASN1c/MeNBtoSgNBContainer.h | 0 e2sim/{ => previous}/ASN1c/Measurement-ID.c | 0 e2sim/{ => previous}/ASN1c/Measurement-ID.h | 0 .../ASN1c/MeasurementFailureCause-Item.c | 0 .../ASN1c/MeasurementFailureCause-Item.h | 0 .../ASN1c/MeasurementFailureCause-List.c | 0 .../ASN1c/MeasurementFailureCause-List.h | 0 .../ASN1c/MeasurementInitiationResult-Item.c | 0 .../ASN1c/MeasurementInitiationResult-Item.h | 0 .../ASN1c/MeasurementInitiationResult-List.c | 0 .../ASN1c/MeasurementInitiationResult-List.h | 0 .../{ => previous}/ASN1c/MeasurementThresholdA2.c | 0 .../{ => previous}/ASN1c/MeasurementThresholdA2.h | 0 .../{ => previous}/ASN1c/MeasurementsToActivate.c | 0 .../{ => previous}/ASN1c/MeasurementsToActivate.h | 0 .../ASN1c/MobilityChangeAcknowledge.c | 0 .../ASN1c/MobilityChangeAcknowledge.h | 0 e2sim/{ => previous}/ASN1c/MobilityChangeFailure.c | 0 e2sim/{ => previous}/ASN1c/MobilityChangeFailure.h | 0 e2sim/{ => previous}/ASN1c/MobilityChangeRequest.c | 0 e2sim/{ => previous}/ASN1c/MobilityChangeRequest.h | 0 e2sim/{ => previous}/ASN1c/MobilityInformation.c | 0 e2sim/{ => previous}/ASN1c/MobilityInformation.h | 0 .../ASN1c/MobilityParametersInformation.c | 0 .../ASN1c/MobilityParametersInformation.h | 0 .../ASN1c/MobilityParametersModificationRange.c | 0 .../ASN1c/MobilityParametersModificationRange.h | 0 e2sim/{ => previous}/ASN1c/MultibandInfoList.c | 0 e2sim/{ => previous}/ASN1c/MultibandInfoList.h | 0 e2sim/{ => previous}/ASN1c/NR-TxBW.c | 0 e2sim/{ => previous}/ASN1c/NR-TxBW.h | 0 e2sim/{ => previous}/ASN1c/NRCGI.c | 0 e2sim/{ => previous}/ASN1c/NRCGI.h | 0 e2sim/{ => previous}/ASN1c/NRCellIdentifier.c | 0 e2sim/{ => previous}/ASN1c/NRCellIdentifier.h | 0 e2sim/{ => previous}/ASN1c/NRFreqInfo.c | 0 e2sim/{ => previous}/ASN1c/NRFreqInfo.h | 0 e2sim/{ => previous}/ASN1c/NRNRB.c | 0 e2sim/{ => previous}/ASN1c/NRNRB.h | 0 .../{ => previous}/ASN1c/NRNeighbour-Information.c | 0 .../{ => previous}/ASN1c/NRNeighbour-Information.h | 0 e2sim/{ => previous}/ASN1c/NRPCI.c | 0 e2sim/{ => previous}/ASN1c/NRPCI.h | 0 e2sim/{ => previous}/ASN1c/NRS-NSSS-PowerOffset.c | 0 e2sim/{ => previous}/ASN1c/NRS-NSSS-PowerOffset.h | 0 e2sim/{ => previous}/ASN1c/NRSCS.c | 0 e2sim/{ => previous}/ASN1c/NRSCS.h | 0 .../ASN1c/NRUESecurityCapabilities.c | 0 .../ASN1c/NRUESecurityCapabilities.h | 0 .../{ => previous}/ASN1c/NRencryptionAlgorithms.c | 0 .../{ => previous}/ASN1c/NRencryptionAlgorithms.h | 0 .../ASN1c/NRintegrityProtectionAlgorithms.c | 0 .../ASN1c/NRintegrityProtectionAlgorithms.h | 0 e2sim/{ => previous}/ASN1c/NRrestrictionin5GS.c | 0 e2sim/{ => previous}/ASN1c/NRrestrictionin5GS.h | 0 .../ASN1c/NRrestrictioninEPSasSecondaryRAT.c | 0 .../ASN1c/NRrestrictioninEPSasSecondaryRAT.h | 0 .../ASN1c/NSSS-NumOccasionDifferentPrecoder.c | 0 .../ASN1c/NSSS-NumOccasionDifferentPrecoder.h | 0 e2sim/{ => previous}/ASN1c/NULL.c | 0 e2sim/{ => previous}/ASN1c/NULL.h | 0 e2sim/{ => previous}/ASN1c/NativeEnumerated.c | 0 e2sim/{ => previous}/ASN1c/NativeEnumerated.h | 0 e2sim/{ => previous}/ASN1c/NativeInteger.c | 0 e2sim/{ => previous}/ASN1c/NativeInteger.h | 0 e2sim/{ => previous}/ASN1c/Neighbour-Information.c | 0 e2sim/{ => previous}/ASN1c/Neighbour-Information.h | 0 e2sim/{ => previous}/ASN1c/NewDRBIDrequest.c | 0 e2sim/{ => previous}/ASN1c/NewDRBIDrequest.h | 0 e2sim/{ => previous}/ASN1c/NextHopChainingCount.c | 0 e2sim/{ => previous}/ASN1c/NextHopChainingCount.h | 0 .../{ => previous}/ASN1c/Number-of-Antennaports.c | 0 .../{ => previous}/ASN1c/Number-of-Antennaports.h | 0 e2sim/{ => previous}/ASN1c/OBJECT_IDENTIFIER.c | 0 e2sim/{ => previous}/ASN1c/OBJECT_IDENTIFIER.h | 0 e2sim/{ => previous}/ASN1c/OCTET_STRING.c | 0 e2sim/{ => previous}/ASN1c/OCTET_STRING.h | 0 e2sim/{ => previous}/ASN1c/OPEN_TYPE.c | 0 e2sim/{ => previous}/ASN1c/OPEN_TYPE.h | 0 .../ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c | 0 .../ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h | 0 e2sim/{ => previous}/ASN1c/Old-ECGIs.c | 0 e2sim/{ => previous}/ASN1c/Old-ECGIs.h | 0 e2sim/{ => previous}/ASN1c/Oneframe.c | 0 e2sim/{ => previous}/ASN1c/Oneframe.h | 0 e2sim/{ => previous}/ASN1c/PA-Values.c | 0 e2sim/{ => previous}/ASN1c/PA-Values.h | 0 e2sim/{ => previous}/ASN1c/PCI.c | 0 e2sim/{ => previous}/ASN1c/PCI.h | 0 e2sim/{ => previous}/ASN1c/PDCP-SN.c | 0 e2sim/{ => previous}/ASN1c/PDCP-SN.h | 0 e2sim/{ => previous}/ASN1c/PDCP-SNExtended.c | 0 e2sim/{ => previous}/ASN1c/PDCP-SNExtended.h | 0 e2sim/{ => previous}/ASN1c/PDCP-SNlength18.c | 0 e2sim/{ => previous}/ASN1c/PDCP-SNlength18.h | 0 e2sim/{ => previous}/ASN1c/PDCPChangeIndication.c | 0 e2sim/{ => previous}/ASN1c/PDCPChangeIndication.h | 0 e2sim/{ => previous}/ASN1c/PDCPSnLength.c | 0 e2sim/{ => previous}/ASN1c/PDCPSnLength.h | 0 e2sim/{ => previous}/ASN1c/PLMN-Identity.c | 0 e2sim/{ => previous}/ASN1c/PLMN-Identity.h | 0 e2sim/{ => previous}/ASN1c/PLMNAreaBasedQMC.c | 0 e2sim/{ => previous}/ASN1c/PLMNAreaBasedQMC.h | 0 e2sim/{ => previous}/ASN1c/PLMNListforQMC.c | 0 e2sim/{ => previous}/ASN1c/PLMNListforQMC.h | 0 e2sim/{ => previous}/ASN1c/PRACH-Configuration.c | 0 e2sim/{ => previous}/ASN1c/PRACH-Configuration.h | 0 e2sim/{ => previous}/ASN1c/Packet-LossRate.c | 0 e2sim/{ => previous}/ASN1c/Packet-LossRate.h | 0 .../{ => previous}/ASN1c/PartialSuccessIndicator.c | 0 .../{ => previous}/ASN1c/PartialSuccessIndicator.h | 0 e2sim/{ => previous}/ASN1c/PedestrianUE.c | 0 e2sim/{ => previous}/ASN1c/PedestrianUE.h | 0 e2sim/{ => previous}/ASN1c/Port-Number.c | 0 e2sim/{ => previous}/ASN1c/Port-Number.h | 0 e2sim/{ => previous}/ASN1c/Pre-emptionCapability.c | 0 e2sim/{ => previous}/ASN1c/Pre-emptionCapability.h | 0 .../ASN1c/Pre-emptionVulnerability.c | 0 .../ASN1c/Pre-emptionVulnerability.h | 0 e2sim/{ => previous}/ASN1c/Presence.c | 0 e2sim/{ => previous}/ASN1c/Presence.h | 0 e2sim/{ => previous}/ASN1c/PrintableString.c | 0 e2sim/{ => previous}/ASN1c/PrintableString.h | 0 e2sim/{ => previous}/ASN1c/PriorityLevel.c | 0 e2sim/{ => previous}/ASN1c/PriorityLevel.h | 0 e2sim/{ => previous}/ASN1c/PrivateIE-Container.c | 0 e2sim/{ => previous}/ASN1c/PrivateIE-Container.h | 0 e2sim/{ => previous}/ASN1c/PrivateIE-Field.c | 0 e2sim/{ => previous}/ASN1c/PrivateIE-Field.h | 0 e2sim/{ => previous}/ASN1c/PrivateIE-ID.c | 0 e2sim/{ => previous}/ASN1c/PrivateIE-ID.h | 0 e2sim/{ => previous}/ASN1c/PrivateMessage.c | 0 e2sim/{ => previous}/ASN1c/PrivateMessage.h | 0 e2sim/{ => previous}/ASN1c/ProSeAuthorized.c | 0 e2sim/{ => previous}/ASN1c/ProSeAuthorized.h | 0 .../ASN1c/ProSeDirectCommunication.c | 0 .../ASN1c/ProSeDirectCommunication.h | 0 e2sim/{ => previous}/ASN1c/ProSeDirectDiscovery.c | 0 e2sim/{ => previous}/ASN1c/ProSeDirectDiscovery.h | 0 .../ASN1c/ProSeUEtoNetworkRelaying.c | 0 .../ASN1c/ProSeUEtoNetworkRelaying.h | 0 e2sim/{ => previous}/ASN1c/ProcedureCode.c | 0 e2sim/{ => previous}/ASN1c/ProcedureCode.h | 0 .../ASN1c/ProtectedEUTRAResourceIndication.c | 0 .../ASN1c/ProtectedEUTRAResourceIndication.h | 0 .../ASN1c/ProtectedFootprintTimePattern.c | 0 .../ASN1c/ProtectedFootprintTimePattern.h | 0 .../ASN1c/ProtectedResourceList-Item.c | 0 .../ASN1c/ProtectedResourceList-Item.h | 0 e2sim/{ => previous}/ASN1c/ProtectedResourceList.c | 0 e2sim/{ => previous}/ASN1c/ProtectedResourceList.h | 0 .../ASN1c/ProtocolExtensionContainer.c | 0 .../ASN1c/ProtocolExtensionContainer.h | 0 .../{ => previous}/ASN1c/ProtocolExtensionField.c | 0 .../{ => previous}/ASN1c/ProtocolExtensionField.h | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-Container.c | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-Container.h | 0 .../ASN1c/ProtocolIE-ContainerList.c | 0 .../ASN1c/ProtocolIE-ContainerList.h | 0 .../ASN1c/ProtocolIE-ContainerPair.c | 0 .../ASN1c/ProtocolIE-ContainerPair.h | 0 .../ASN1c/ProtocolIE-ContainerPairList.c | 0 .../ASN1c/ProtocolIE-ContainerPairList.h | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-Field.c | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-Field.h | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-FieldPair.c | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-FieldPair.h | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-ID.c | 0 e2sim/{ => previous}/ASN1c/ProtocolIE-ID.h | 0 .../ASN1c/ProtocolIE-Single-Container.c | 0 .../ASN1c/ProtocolIE-Single-Container.h | 0 e2sim/{ => previous}/ASN1c/QCI.c | 0 e2sim/{ => previous}/ASN1c/QCI.h | 0 e2sim/{ => previous}/ASN1c/RANfunction-Item.c | 0 e2sim/{ => previous}/ASN1c/RANfunction-Item.h | 0 e2sim/{ => previous}/ASN1c/RANfunctionDefinition.c | 0 e2sim/{ => previous}/ASN1c/RANfunctionDefinition.h | 0 e2sim/{ => previous}/ASN1c/RANfunctionID-Item.c | 0 e2sim/{ => previous}/ASN1c/RANfunctionID-Item.h | 0 e2sim/{ => previous}/ASN1c/RANfunctionID.c | 0 e2sim/{ => previous}/ASN1c/RANfunctionID.h | 0 .../{ => previous}/ASN1c/RANfunctionIDcause-Item.c | 0 .../{ => previous}/ASN1c/RANfunctionIDcause-Item.h | 0 e2sim/{ => previous}/ASN1c/RANfunctions-List.c | 0 e2sim/{ => previous}/ASN1c/RANfunctions-List.h | 0 e2sim/{ => previous}/ASN1c/RANfunctionsID-List.c | 0 e2sim/{ => previous}/ASN1c/RANfunctionsID-List.h | 0 .../ASN1c/RANfunctionsIDcause-List.c | 0 .../ASN1c/RANfunctionsIDcause-List.h | 0 .../{ => previous}/ASN1c/RICaction-Admitted-Item.c | 0 .../{ => previous}/ASN1c/RICaction-Admitted-Item.h | 0 .../{ => previous}/ASN1c/RICaction-Admitted-List.c | 0 .../{ => previous}/ASN1c/RICaction-Admitted-List.h | 0 .../ASN1c/RICaction-NotAdmitted-Item.c | 0 .../ASN1c/RICaction-NotAdmitted-Item.h | 0 .../ASN1c/RICaction-NotAdmitted-List.c | 0 .../ASN1c/RICaction-NotAdmitted-List.h | 0 .../ASN1c/RICaction-ToBeSetup-Item.c | 0 .../ASN1c/RICaction-ToBeSetup-Item.h | 0 e2sim/{ => previous}/ASN1c/RICactionDefinition.c | 0 e2sim/{ => previous}/ASN1c/RICactionDefinition.h | 0 e2sim/{ => previous}/ASN1c/RICactionID.c | 0 e2sim/{ => previous}/ASN1c/RICactionID.h | 0 e2sim/{ => previous}/ASN1c/RICactionType.c | 0 e2sim/{ => previous}/ASN1c/RICactionType.h | 0 .../ASN1c/RICactions-ToBeSetup-List.c | 0 .../ASN1c/RICactions-ToBeSetup-List.h | 0 e2sim/{ => previous}/ASN1c/RICcallProcessID.c | 0 e2sim/{ => previous}/ASN1c/RICcallProcessID.h | 0 e2sim/{ => previous}/ASN1c/RICcause.c | 0 e2sim/{ => previous}/ASN1c/RICcause.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolAckRequest.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolAckRequest.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolAcknowledge.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolAcknowledge.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolFailure.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolFailure.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolHeader.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolHeader.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolMessage.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolMessage.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolRequest.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolRequest.h | 0 e2sim/{ => previous}/ASN1c/RICcontrolStatus.c | 0 e2sim/{ => previous}/ASN1c/RICcontrolStatus.h | 0 .../ASN1c/RICeventTriggerDefinition.c | 0 .../ASN1c/RICeventTriggerDefinition.h | 0 e2sim/{ => previous}/ASN1c/RICindication.c | 0 e2sim/{ => previous}/ASN1c/RICindication.h | 0 e2sim/{ => previous}/ASN1c/RICindicationHeader.c | 0 e2sim/{ => previous}/ASN1c/RICindicationHeader.h | 0 e2sim/{ => previous}/ASN1c/RICindicationMessage.c | 0 e2sim/{ => previous}/ASN1c/RICindicationMessage.h | 0 e2sim/{ => previous}/ASN1c/RICindicationSN.c | 0 e2sim/{ => previous}/ASN1c/RICindicationSN.h | 0 e2sim/{ => previous}/ASN1c/RICindicationType.c | 0 e2sim/{ => previous}/ASN1c/RICindicationType.h | 0 e2sim/{ => previous}/ASN1c/RICrequestID.c | 0 e2sim/{ => previous}/ASN1c/RICrequestID.h | 0 e2sim/{ => previous}/ASN1c/RICserviceQuery.c | 0 e2sim/{ => previous}/ASN1c/RICserviceQuery.h | 0 e2sim/{ => previous}/ASN1c/RICserviceUpdate.c | 0 e2sim/{ => previous}/ASN1c/RICserviceUpdate.h | 0 .../ASN1c/RICserviceUpdateAcknowledge.c | 0 .../ASN1c/RICserviceUpdateAcknowledge.h | 0 .../{ => previous}/ASN1c/RICserviceUpdateFailure.c | 0 .../{ => previous}/ASN1c/RICserviceUpdateFailure.h | 0 e2sim/{ => previous}/ASN1c/RICsubscription.c | 0 e2sim/{ => previous}/ASN1c/RICsubscription.h | 0 .../ASN1c/RICsubscriptionDeleteFailure.c | 0 .../ASN1c/RICsubscriptionDeleteFailure.h | 0 .../ASN1c/RICsubscriptionDeleteRequest.c | 0 .../ASN1c/RICsubscriptionDeleteRequest.h | 0 .../ASN1c/RICsubscriptionDeleteResponse.c | 0 .../ASN1c/RICsubscriptionDeleteResponse.h | 0 .../{ => previous}/ASN1c/RICsubscriptionFailure.c | 0 .../{ => previous}/ASN1c/RICsubscriptionFailure.h | 0 .../{ => previous}/ASN1c/RICsubscriptionRequest.c | 0 .../{ => previous}/ASN1c/RICsubscriptionRequest.h | 0 .../{ => previous}/ASN1c/RICsubscriptionResponse.c | 0 .../{ => previous}/ASN1c/RICsubscriptionResponse.h | 0 e2sim/{ => previous}/ASN1c/RICsubsequentAction.c | 0 e2sim/{ => previous}/ASN1c/RICsubsequentAction.h | 0 .../{ => previous}/ASN1c/RICsubsequentActionType.c | 0 .../{ => previous}/ASN1c/RICsubsequentActionType.h | 0 e2sim/{ => previous}/ASN1c/RICtimeToWait.c | 0 e2sim/{ => previous}/ASN1c/RICtimeToWait.h | 0 e2sim/{ => previous}/ASN1c/RLC-Status.c | 0 e2sim/{ => previous}/ASN1c/RLC-Status.h | 0 e2sim/{ => previous}/ASN1c/RLCMode.c | 0 e2sim/{ => previous}/ASN1c/RLCMode.h | 0 e2sim/{ => previous}/ASN1c/RLFIndication.c | 0 e2sim/{ => previous}/ASN1c/RLFIndication.h | 0 e2sim/{ => previous}/ASN1c/RNL-Header.c | 0 e2sim/{ => previous}/ASN1c/RNL-Header.h | 0 e2sim/{ => previous}/ASN1c/RNTP-Threshold.c | 0 e2sim/{ => previous}/ASN1c/RNTP-Threshold.h | 0 e2sim/{ => previous}/ASN1c/RRC-Config-Ind.c | 0 e2sim/{ => previous}/ASN1c/RRC-Config-Ind.h | 0 e2sim/{ => previous}/ASN1c/RRC-Context.c | 0 e2sim/{ => previous}/ASN1c/RRC-Context.h | 0 .../{ => previous}/ASN1c/RRCConnReestabIndicator.c | 0 .../{ => previous}/ASN1c/RRCConnReestabIndicator.h | 0 e2sim/{ => previous}/ASN1c/RRCConnSetupIndicator.c | 0 e2sim/{ => previous}/ASN1c/RRCConnSetupIndicator.h | 0 e2sim/{ => previous}/ASN1c/RRCContainer.c | 0 e2sim/{ => previous}/ASN1c/RRCContainer.h | 0 e2sim/{ => previous}/ASN1c/RRCTransfer.c | 0 e2sim/{ => previous}/ASN1c/RRCTransfer.h | 0 e2sim/{ => previous}/ASN1c/RSRPMRList.c | 0 e2sim/{ => previous}/ASN1c/RSRPMRList.h | 0 e2sim/{ => previous}/ASN1c/RSRPMeasurementResult.c | 0 e2sim/{ => previous}/ASN1c/RSRPMeasurementResult.h | 0 e2sim/{ => previous}/ASN1c/RadioResourceStatus.c | 0 e2sim/{ => previous}/ASN1c/RadioResourceStatus.h | 0 .../ASN1c/RadioframeAllocationOffset.c | 0 .../ASN1c/RadioframeAllocationOffset.h | 0 .../ASN1c/RadioframeAllocationPeriod.c | 0 .../ASN1c/RadioframeAllocationPeriod.h | 0 .../ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c | 0 .../ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h | 0 .../ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c | 0 .../ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h | 0 .../ASN1c/ReceiveStatusofULPDCPSDUs.c | 0 .../ASN1c/ReceiveStatusofULPDCPSDUs.h | 0 .../ASN1c/Reestablishment-Indication.c | 0 .../ASN1c/Reestablishment-Indication.h | 0 e2sim/{ => previous}/ASN1c/Registration-Request.c | 0 e2sim/{ => previous}/ASN1c/Registration-Request.h | 0 .../ASN1c/RelativeNarrowbandTxPower.c | 0 .../ASN1c/RelativeNarrowbandTxPower.h | 0 .../{ => previous}/ASN1c/ReplacingCellsList-Item.c | 0 .../{ => previous}/ASN1c/ReplacingCellsList-Item.h | 0 e2sim/{ => previous}/ASN1c/ReplacingCellsList.c | 0 e2sim/{ => previous}/ASN1c/ReplacingCellsList.h | 0 e2sim/{ => previous}/ASN1c/ReportAmountMDT.c | 0 e2sim/{ => previous}/ASN1c/ReportAmountMDT.h | 0 e2sim/{ => previous}/ASN1c/ReportArea.c | 0 e2sim/{ => previous}/ASN1c/ReportArea.h | 0 e2sim/{ => previous}/ASN1c/ReportCharacteristics.c | 0 e2sim/{ => previous}/ASN1c/ReportCharacteristics.h | 0 e2sim/{ => previous}/ASN1c/ReportIntervalMDT.c | 0 e2sim/{ => previous}/ASN1c/ReportIntervalMDT.h | 0 e2sim/{ => previous}/ASN1c/ReportingPeriodicity.c | 0 e2sim/{ => previous}/ASN1c/ReportingPeriodicity.h | 0 .../ASN1c/ReportingPeriodicityCSIR.c | 0 .../ASN1c/ReportingPeriodicityCSIR.h | 0 .../ASN1c/ReportingPeriodicityRSRPMR.c | 0 .../ASN1c/ReportingPeriodicityRSRPMR.h | 0 .../{ => previous}/ASN1c/ReservedSubframePattern.c | 0 .../{ => previous}/ASN1c/ReservedSubframePattern.h | 0 e2sim/{ => previous}/ASN1c/ResetRequest.c | 0 e2sim/{ => previous}/ASN1c/ResetRequest.h | 0 e2sim/{ => previous}/ASN1c/ResetResponse.c | 0 e2sim/{ => previous}/ASN1c/ResetResponse.h | 0 e2sim/{ => previous}/ASN1c/ResourceStatusFailure.c | 0 e2sim/{ => previous}/ASN1c/ResourceStatusFailure.h | 0 e2sim/{ => previous}/ASN1c/ResourceStatusRequest.c | 0 e2sim/{ => previous}/ASN1c/ResourceStatusRequest.h | 0 .../{ => previous}/ASN1c/ResourceStatusResponse.c | 0 .../{ => previous}/ASN1c/ResourceStatusResponse.h | 0 e2sim/{ => previous}/ASN1c/ResourceStatusUpdate.c | 0 e2sim/{ => previous}/ASN1c/ResourceStatusUpdate.h | 0 e2sim/{ => previous}/ASN1c/ResourceType.c | 0 e2sim/{ => previous}/ASN1c/ResourceType.h | 0 .../ASN1c/RespondingNodeType-EndcConfigUpdate.c | 0 .../ASN1c/RespondingNodeType-EndcConfigUpdate.h | 0 .../ASN1c/RespondingNodeType-EndcX2Removal.c | 0 .../ASN1c/RespondingNodeType-EndcX2Removal.h | 0 .../ASN1c/RespondingNodeType-EndcX2Setup.c | 0 .../ASN1c/RespondingNodeType-EndcX2Setup.h | 0 ...ndingNodeType-EutranrCellResourceCoordination.c | 0 ...ndingNodeType-EutranrCellResourceCoordination.h | 0 ...nseInformationSeNBReconfComp-RejectByMeNBItem.c | 0 ...nseInformationSeNBReconfComp-RejectByMeNBItem.h | 0 ...ResponseInformationSeNBReconfComp-SuccessItem.c | 0 ...ResponseInformationSeNBReconfComp-SuccessItem.h | 0 .../ASN1c/ResponseInformationSeNBReconfComp.c | 0 .../ASN1c/ResponseInformationSeNBReconfComp.h | 0 ...nseInformationSgNBReconfComp-RejectByMeNBItem.c | 0 ...nseInformationSgNBReconfComp-RejectByMeNBItem.h | 0 ...ResponseInformationSgNBReconfComp-SuccessItem.c | 0 ...ResponseInformationSgNBReconfComp-SuccessItem.h | 0 .../ASN1c/ResponseInformationSgNBReconfComp.c | 0 .../ASN1c/ResponseInformationSgNBReconfComp.h | 0 e2sim/{ => previous}/ASN1c/ResumeID.c | 0 e2sim/{ => previous}/ASN1c/ResumeID.h | 0 .../ASN1c/RetrieveUEContextFailure.c | 0 .../ASN1c/RetrieveUEContextFailure.h | 0 .../ASN1c/RetrieveUEContextRequest.c | 0 .../ASN1c/RetrieveUEContextRequest.h | 0 .../ASN1c/RetrieveUEContextResponse.c | 0 .../ASN1c/RetrieveUEContextResponse.h | 0 e2sim/{ => previous}/ASN1c/S1TNLLoadIndicator.c | 0 e2sim/{ => previous}/ASN1c/S1TNLLoadIndicator.h | 0 e2sim/{ => previous}/ASN1c/SCGChangeIndication.c | 0 e2sim/{ => previous}/ASN1c/SCGChangeIndication.h | 0 e2sim/{ => previous}/ASN1c/SCGConfigurationQuery.c | 0 e2sim/{ => previous}/ASN1c/SCGConfigurationQuery.h | 0 .../ASN1c/SGNB-Addition-Trigger-Ind.c | 0 .../ASN1c/SGNB-Addition-Trigger-Ind.h | 0 .../ASN1c/SIPTOBearerDeactivationIndication.c | 0 .../ASN1c/SIPTOBearerDeactivationIndication.h | 0 e2sim/{ => previous}/ASN1c/SNStatusTransfer.c | 0 e2sim/{ => previous}/ASN1c/SNStatusTransfer.h | 0 e2sim/{ => previous}/ASN1c/SRBType.c | 0 e2sim/{ => previous}/ASN1c/SRBType.h | 0 .../{ => previous}/ASN1c/SRVCCOperationPossible.c | 0 .../{ => previous}/ASN1c/SRVCCOperationPossible.h | 0 e2sim/{ => previous}/ASN1c/SULInformation.c | 0 e2sim/{ => previous}/ASN1c/SULInformation.h | 0 .../ASN1c/ScheduledCommunicationTime.c | 0 .../ASN1c/ScheduledCommunicationTime.h | 0 e2sim/{ => previous}/ASN1c/SeNBAdditionRequest.c | 0 e2sim/{ => previous}/ASN1c/SeNBAdditionRequest.h | 0 .../ASN1c/SeNBAdditionRequestAcknowledge.c | 0 .../ASN1c/SeNBAdditionRequestAcknowledge.h | 0 .../ASN1c/SeNBAdditionRequestReject.c | 0 .../ASN1c/SeNBAdditionRequestReject.h | 0 .../{ => previous}/ASN1c/SeNBCounterCheckRequest.c | 0 .../{ => previous}/ASN1c/SeNBCounterCheckRequest.h | 0 .../{ => previous}/ASN1c/SeNBModificationConfirm.c | 0 .../{ => previous}/ASN1c/SeNBModificationConfirm.h | 0 .../{ => previous}/ASN1c/SeNBModificationRefuse.c | 0 .../{ => previous}/ASN1c/SeNBModificationRefuse.h | 0 .../{ => previous}/ASN1c/SeNBModificationRequest.c | 0 .../{ => previous}/ASN1c/SeNBModificationRequest.h | 0 .../ASN1c/SeNBModificationRequestAcknowledge.c | 0 .../ASN1c/SeNBModificationRequestAcknowledge.h | 0 .../ASN1c/SeNBModificationRequestReject.c | 0 .../ASN1c/SeNBModificationRequestReject.h | 0 .../ASN1c/SeNBModificationRequired.c | 0 .../ASN1c/SeNBModificationRequired.h | 0 .../ASN1c/SeNBReconfigurationComplete.c | 0 .../ASN1c/SeNBReconfigurationComplete.h | 0 e2sim/{ => previous}/ASN1c/SeNBReleaseConfirm.c | 0 e2sim/{ => previous}/ASN1c/SeNBReleaseConfirm.h | 0 e2sim/{ => previous}/ASN1c/SeNBReleaseRequest.c | 0 e2sim/{ => previous}/ASN1c/SeNBReleaseRequest.h | 0 e2sim/{ => previous}/ASN1c/SeNBReleaseRequired.c | 0 e2sim/{ => previous}/ASN1c/SeNBReleaseRequired.h | 0 e2sim/{ => previous}/ASN1c/SeNBSecurityKey.c | 0 e2sim/{ => previous}/ASN1c/SeNBSecurityKey.h | 0 e2sim/{ => previous}/ASN1c/SeNBtoMeNBContainer.c | 0 e2sim/{ => previous}/ASN1c/SeNBtoMeNBContainer.h | 0 .../ASN1c/SecondaryRATDataUsageReport.c | 0 .../ASN1c/SecondaryRATDataUsageReport.h | 0 .../ASN1c/SecondaryRATUsageReport-Item.c | 0 .../ASN1c/SecondaryRATUsageReport-Item.h | 0 .../ASN1c/SecondaryRATUsageReportList.c | 0 .../ASN1c/SecondaryRATUsageReportList.h | 0 .../{ => previous}/ASN1c/ServedCell-Information.c | 0 .../{ => previous}/ASN1c/ServedCell-Information.h | 0 e2sim/{ => previous}/ASN1c/ServedCells.c | 0 e2sim/{ => previous}/ASN1c/ServedCells.h | 0 .../ASN1c/ServedCellsToActivate-Item.c | 0 .../ASN1c/ServedCellsToActivate-Item.h | 0 e2sim/{ => previous}/ASN1c/ServedCellsToActivate.c | 0 e2sim/{ => previous}/ASN1c/ServedCellsToActivate.h | 0 .../ASN1c/ServedCellsToModify-Item.c | 0 .../ASN1c/ServedCellsToModify-Item.h | 0 e2sim/{ => previous}/ASN1c/ServedCellsToModify.c | 0 e2sim/{ => previous}/ASN1c/ServedCellsToModify.h | 0 .../ASN1c/ServedEUTRAcellsENDCX2ManagementList.c | 0 .../ASN1c/ServedEUTRAcellsENDCX2ManagementList.h | 0 .../ServedEUTRAcellsToDeleteListENDCConfUpd.c | 0 .../ServedEUTRAcellsToDeleteListENDCConfUpd.h | 0 .../ServedEUTRAcellsToModifyListENDCConfUpd.c | 0 .../ServedEUTRAcellsToModifyListENDCConfUpd.h | 0 .../ASN1c/ServedNRCell-Information.c | 0 .../ASN1c/ServedNRCell-Information.h | 0 .../ASN1c/ServedNRCellsToActivate-Item.c | 0 .../ASN1c/ServedNRCellsToActivate-Item.h | 0 .../{ => previous}/ASN1c/ServedNRCellsToActivate.c | 0 .../{ => previous}/ASN1c/ServedNRCellsToActivate.h | 0 .../ASN1c/ServedNRCellsToModify-Item.c | 0 .../ASN1c/ServedNRCellsToModify-Item.h | 0 .../ASN1c/ServedNRcellsENDCX2ManagementList.c | 0 .../ASN1c/ServedNRcellsENDCX2ManagementList.h | 0 .../ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c | 0 .../ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h | 0 .../ASN1c/ServedNRcellsToModifyENDCConfUpdList.c | 0 .../ASN1c/ServedNRcellsToModifyENDCConfUpdList.h | 0 e2sim/{ => previous}/ASN1c/ServiceType.c | 0 e2sim/{ => previous}/ASN1c/ServiceType.h | 0 e2sim/{ => previous}/ASN1c/SgNB-UE-X2AP-ID.c | 0 e2sim/{ => previous}/ASN1c/SgNB-UE-X2AP-ID.h | 0 .../ASN1c/SgNBActivityNotification.c | 0 .../ASN1c/SgNBActivityNotification.h | 0 e2sim/{ => previous}/ASN1c/SgNBAdditionRequest.c | 0 e2sim/{ => previous}/ASN1c/SgNBAdditionRequest.h | 0 .../ASN1c/SgNBAdditionRequestAcknowledge.c | 0 .../ASN1c/SgNBAdditionRequestAcknowledge.h | 0 .../ASN1c/SgNBAdditionRequestReject.c | 0 .../ASN1c/SgNBAdditionRequestReject.h | 0 e2sim/{ => previous}/ASN1c/SgNBChangeConfirm.c | 0 e2sim/{ => previous}/ASN1c/SgNBChangeConfirm.h | 0 e2sim/{ => previous}/ASN1c/SgNBChangeRefuse.c | 0 e2sim/{ => previous}/ASN1c/SgNBChangeRefuse.h | 0 e2sim/{ => previous}/ASN1c/SgNBChangeRequired.c | 0 e2sim/{ => previous}/ASN1c/SgNBChangeRequired.h | 0 .../ASN1c/SgNBCoordinationAssistanceInformation.c | 0 .../ASN1c/SgNBCoordinationAssistanceInformation.h | 0 .../{ => previous}/ASN1c/SgNBCounterCheckRequest.c | 0 .../{ => previous}/ASN1c/SgNBCounterCheckRequest.h | 0 .../{ => previous}/ASN1c/SgNBModificationConfirm.c | 0 .../{ => previous}/ASN1c/SgNBModificationConfirm.h | 0 .../{ => previous}/ASN1c/SgNBModificationRefuse.c | 0 .../{ => previous}/ASN1c/SgNBModificationRefuse.h | 0 .../{ => previous}/ASN1c/SgNBModificationRequest.c | 0 .../{ => previous}/ASN1c/SgNBModificationRequest.h | 0 .../ASN1c/SgNBModificationRequestAcknowledge.c | 0 .../ASN1c/SgNBModificationRequestAcknowledge.h | 0 .../ASN1c/SgNBModificationRequestReject.c | 0 .../ASN1c/SgNBModificationRequestReject.h | 0 .../ASN1c/SgNBModificationRequired.c | 0 .../ASN1c/SgNBModificationRequired.h | 0 .../ASN1c/SgNBReconfigurationComplete.c | 0 .../ASN1c/SgNBReconfigurationComplete.h | 0 e2sim/{ => previous}/ASN1c/SgNBReleaseConfirm.c | 0 e2sim/{ => previous}/ASN1c/SgNBReleaseConfirm.h | 0 e2sim/{ => previous}/ASN1c/SgNBReleaseRequest.c | 0 e2sim/{ => previous}/ASN1c/SgNBReleaseRequest.h | 0 .../ASN1c/SgNBReleaseRequestAcknowledge.c | 0 .../ASN1c/SgNBReleaseRequestAcknowledge.h | 0 .../ASN1c/SgNBReleaseRequestReject.c | 0 .../ASN1c/SgNBReleaseRequestReject.h | 0 e2sim/{ => previous}/ASN1c/SgNBReleaseRequired.c | 0 e2sim/{ => previous}/ASN1c/SgNBReleaseRequired.h | 0 .../ASN1c/SgNBResourceCoordinationInformation.c | 0 .../ASN1c/SgNBResourceCoordinationInformation.h | 0 e2sim/{ => previous}/ASN1c/SgNBSecurityKey.c | 0 e2sim/{ => previous}/ASN1c/SgNBSecurityKey.h | 0 e2sim/{ => previous}/ASN1c/SgNBtoMeNBContainer.c | 0 e2sim/{ => previous}/ASN1c/SgNBtoMeNBContainer.h | 0 e2sim/{ => previous}/ASN1c/SharedResourceType.c | 0 e2sim/{ => previous}/ASN1c/SharedResourceType.h | 0 e2sim/{ => previous}/ASN1c/ShortMAC-I.c | 0 e2sim/{ => previous}/ASN1c/ShortMAC-I.h | 0 .../ASN1c/SourceOfUEActivityBehaviourInformation.c | 0 .../ASN1c/SourceOfUEActivityBehaviourInformation.h | 0 e2sim/{ => previous}/ASN1c/SpecialSubframe-Info.c | 0 e2sim/{ => previous}/ASN1c/SpecialSubframe-Info.h | 0 .../{ => previous}/ASN1c/SpecialSubframePatterns.c | 0 .../{ => previous}/ASN1c/SpecialSubframePatterns.h | 0 .../{ => previous}/ASN1c/SpectrumSharingGroupID.c | 0 .../{ => previous}/ASN1c/SpectrumSharingGroupID.h | 0 e2sim/{ => previous}/ASN1c/SplitSRB.c | 0 e2sim/{ => previous}/ASN1c/SplitSRB.h | 0 e2sim/{ => previous}/ASN1c/SplitSRBs.c | 0 e2sim/{ => previous}/ASN1c/SplitSRBs.h | 0 e2sim/{ => previous}/ASN1c/Style-ID.c | 0 e2sim/{ => previous}/ASN1c/Style-ID.h | 0 e2sim/{ => previous}/ASN1c/SubbandCQI.c | 0 e2sim/{ => previous}/ASN1c/SubbandCQI.h | 0 e2sim/{ => previous}/ASN1c/SubbandCQICodeword0.c | 0 e2sim/{ => previous}/ASN1c/SubbandCQICodeword0.h | 0 e2sim/{ => previous}/ASN1c/SubbandCQICodeword1.c | 0 e2sim/{ => previous}/ASN1c/SubbandCQICodeword1.h | 0 e2sim/{ => previous}/ASN1c/SubbandCQIItem.c | 0 e2sim/{ => previous}/ASN1c/SubbandCQIItem.h | 0 e2sim/{ => previous}/ASN1c/SubbandCQIList.c | 0 e2sim/{ => previous}/ASN1c/SubbandCQIList.h | 0 e2sim/{ => previous}/ASN1c/SubbandSize.c | 0 e2sim/{ => previous}/ASN1c/SubbandSize.h | 0 e2sim/{ => previous}/ASN1c/SubframeAllocation.c | 0 e2sim/{ => previous}/ASN1c/SubframeAllocation.h | 0 e2sim/{ => previous}/ASN1c/SubframeAssignment.c | 0 e2sim/{ => previous}/ASN1c/SubframeAssignment.h | 0 e2sim/{ => previous}/ASN1c/SubframeType.c | 0 e2sim/{ => previous}/ASN1c/SubframeType.h | 0 .../ASN1c/SubscriberProfileIDforRFP.c | 0 .../ASN1c/SubscriberProfileIDforRFP.h | 0 .../Subscription-Based-UE-DifferentiationInfo.c | 0 .../Subscription-Based-UE-DifferentiationInfo.h | 0 e2sim/{ => previous}/ASN1c/SuccessfulOutcome.c | 0 e2sim/{ => previous}/ASN1c/SuccessfulOutcome.h | 0 .../ASN1c/SupportedSULFreqBandItem.c | 0 .../ASN1c/SupportedSULFreqBandItem.h | 0 e2sim/{ => previous}/ASN1c/TABasedMDT.c | 0 e2sim/{ => previous}/ASN1c/TABasedMDT.h | 0 e2sim/{ => previous}/ASN1c/TABasedQMC.c | 0 e2sim/{ => previous}/ASN1c/TABasedQMC.h | 0 e2sim/{ => previous}/ASN1c/TAC.c | 0 e2sim/{ => previous}/ASN1c/TAC.h | 0 e2sim/{ => previous}/ASN1c/TAI-Item.c | 0 e2sim/{ => previous}/ASN1c/TAI-Item.h | 0 e2sim/{ => previous}/ASN1c/TAIBasedMDT.c | 0 e2sim/{ => previous}/ASN1c/TAIBasedMDT.h | 0 e2sim/{ => previous}/ASN1c/TAIBasedQMC.c | 0 e2sim/{ => previous}/ASN1c/TAIBasedQMC.h | 0 e2sim/{ => previous}/ASN1c/TAIListforMDT.c | 0 e2sim/{ => previous}/ASN1c/TAIListforMDT.h | 0 e2sim/{ => previous}/ASN1c/TAIListforQMC.c | 0 e2sim/{ => previous}/ASN1c/TAIListforQMC.h | 0 e2sim/{ => previous}/ASN1c/TAListforMDT.c | 0 e2sim/{ => previous}/ASN1c/TAListforMDT.h | 0 e2sim/{ => previous}/ASN1c/TAListforQMC.c | 0 e2sim/{ => previous}/ASN1c/TAListforQMC.h | 0 e2sim/{ => previous}/ASN1c/TDD-Info.c | 0 e2sim/{ => previous}/ASN1c/TDD-Info.h | 0 .../TDD-InfoNeighbourServedNRCell-Information.c | 0 .../TDD-InfoNeighbourServedNRCell-Information.h | 0 .../ASN1c/TDD-InfoServedNRCell-Information.c | 0 .../ASN1c/TDD-InfoServedNRCell-Information.h | 0 e2sim/{ => previous}/ASN1c/TargetCellInUTRAN.c | 0 e2sim/{ => previous}/ASN1c/TargetCellInUTRAN.h | 0 .../TargeteNBtoSource-eNBTransparentContainer.c | 0 .../TargeteNBtoSource-eNBTransparentContainer.h | 0 e2sim/{ => previous}/ASN1c/Threshold-RSRP.c | 0 e2sim/{ => previous}/ASN1c/Threshold-RSRP.h | 0 e2sim/{ => previous}/ASN1c/Threshold-RSRQ.c | 0 e2sim/{ => previous}/ASN1c/Threshold-RSRQ.h | 0 .../Time-UE-StayedInCell-EnhancedGranularity.c | 0 .../Time-UE-StayedInCell-EnhancedGranularity.h | 0 e2sim/{ => previous}/ASN1c/Time-UE-StayedInCell.c | 0 e2sim/{ => previous}/ASN1c/Time-UE-StayedInCell.h | 0 e2sim/{ => previous}/ASN1c/TimeStamp.c | 0 e2sim/{ => previous}/ASN1c/TimeStamp.h | 0 e2sim/{ => previous}/ASN1c/TimeToWait.c | 0 e2sim/{ => previous}/ASN1c/TimeToWait.h | 0 e2sim/{ => previous}/ASN1c/TraceActivation.c | 0 e2sim/{ => previous}/ASN1c/TraceActivation.h | 0 .../ASN1c/TraceCollectionEntityIPAddress.c | 0 .../ASN1c/TraceCollectionEntityIPAddress.h | 0 e2sim/{ => previous}/ASN1c/TraceDepth.c | 0 e2sim/{ => previous}/ASN1c/TraceDepth.h | 0 .../{ => previous}/ASN1c/Transmission-Bandwidth.c | 0 .../{ => previous}/ASN1c/Transmission-Bandwidth.h | 0 e2sim/{ => previous}/ASN1c/TransportLayerAddress.c | 0 e2sim/{ => previous}/ASN1c/TransportLayerAddress.h | 0 e2sim/{ => previous}/ASN1c/TriggeringMessage.c | 0 e2sim/{ => previous}/ASN1c/TriggeringMessage.h | 0 e2sim/{ => previous}/ASN1c/TunnelInformation.c | 0 e2sim/{ => previous}/ASN1c/TunnelInformation.h | 0 e2sim/{ => previous}/ASN1c/TypeOfError.c | 0 e2sim/{ => previous}/ASN1c/TypeOfError.h | 0 e2sim/{ => previous}/ASN1c/TypeOfMessage.c | 0 e2sim/{ => previous}/ASN1c/TypeOfMessage.h | 0 .../ASN1c/UE-ContextInformation-SgNBModReq.c | 0 .../ASN1c/UE-ContextInformation-SgNBModReq.h | 0 e2sim/{ => previous}/ASN1c/UE-ContextInformation.c | 0 e2sim/{ => previous}/ASN1c/UE-ContextInformation.h | 0 .../ASN1c/UE-ContextInformationRetrieve.c | 0 .../ASN1c/UE-ContextInformationRetrieve.h | 0 .../ASN1c/UE-ContextInformationSeNBModReq.c | 0 .../ASN1c/UE-ContextInformationSeNBModReq.h | 0 .../{ => previous}/ASN1c/UE-ContextKeptIndicator.c | 0 .../{ => previous}/ASN1c/UE-ContextKeptIndicator.h | 0 .../ASN1c/UE-ContextReferenceAtSeNB.c | 0 .../ASN1c/UE-ContextReferenceAtSeNB.h | 0 .../ASN1c/UE-ContextReferenceAtSgNB.c | 0 .../ASN1c/UE-ContextReferenceAtSgNB.h | 0 .../{ => previous}/ASN1c/UE-ContextReferenceAtWT.c | 0 .../{ => previous}/ASN1c/UE-ContextReferenceAtWT.h | 0 e2sim/{ => previous}/ASN1c/UE-HistoryInformation.c | 0 e2sim/{ => previous}/ASN1c/UE-HistoryInformation.h | 0 .../ASN1c/UE-HistoryInformationFromTheUE.c | 0 .../ASN1c/UE-HistoryInformationFromTheUE.h | 0 .../UE-RLF-Report-Container-for-extended-bands.c | 0 .../UE-RLF-Report-Container-for-extended-bands.h | 0 .../{ => previous}/ASN1c/UE-RLF-Report-Container.c | 0 .../{ => previous}/ASN1c/UE-RLF-Report-Container.h | 0 e2sim/{ => previous}/ASN1c/UE-S1AP-ID.c | 0 e2sim/{ => previous}/ASN1c/UE-S1AP-ID.h | 0 e2sim/{ => previous}/ASN1c/UE-X2AP-ID-Extension.c | 0 e2sim/{ => previous}/ASN1c/UE-X2AP-ID-Extension.h | 0 e2sim/{ => previous}/ASN1c/UE-X2AP-ID.c | 0 e2sim/{ => previous}/ASN1c/UE-X2AP-ID.h | 0 .../ASN1c/UEAggregateMaximumBitRate.c | 0 .../ASN1c/UEAggregateMaximumBitRate.h | 0 e2sim/{ => previous}/ASN1c/UEAppLayerMeasConfig.c | 0 e2sim/{ => previous}/ASN1c/UEAppLayerMeasConfig.h | 0 e2sim/{ => previous}/ASN1c/UEContextRelease.c | 0 e2sim/{ => previous}/ASN1c/UEContextRelease.h | 0 e2sim/{ => previous}/ASN1c/UEID.c | 0 e2sim/{ => previous}/ASN1c/UEID.h | 0 e2sim/{ => previous}/ASN1c/UENRMeasurement.c | 0 e2sim/{ => previous}/ASN1c/UENRMeasurement.h | 0 .../{ => previous}/ASN1c/UESecurityCapabilities.c | 0 .../{ => previous}/ASN1c/UESecurityCapabilities.h | 0 .../ASN1c/UESidelinkAggregateMaximumBitRate.c | 0 .../ASN1c/UESidelinkAggregateMaximumBitRate.h | 0 e2sim/{ => previous}/ASN1c/UEsToBeResetList-Item.c | 0 e2sim/{ => previous}/ASN1c/UEsToBeResetList-Item.h | 0 e2sim/{ => previous}/ASN1c/UEsToBeResetList.c | 0 e2sim/{ => previous}/ASN1c/UEsToBeResetList.h | 0 e2sim/{ => previous}/ASN1c/UL-GBR-PRB-usage.c | 0 e2sim/{ => previous}/ASN1c/UL-GBR-PRB-usage.h | 0 .../ASN1c/UL-HighInterferenceIndication.c | 0 .../ASN1c/UL-HighInterferenceIndication.h | 0 .../ASN1c/UL-HighInterferenceIndicationInfo-Item.c | 0 .../ASN1c/UL-HighInterferenceIndicationInfo-Item.h | 0 .../ASN1c/UL-HighInterferenceIndicationInfo.c | 0 .../ASN1c/UL-HighInterferenceIndicationInfo.h | 0 .../ASN1c/UL-InterferenceOverloadIndication-Item.c | 0 .../ASN1c/UL-InterferenceOverloadIndication-Item.h | 0 .../ASN1c/UL-InterferenceOverloadIndication.c | 0 .../ASN1c/UL-InterferenceOverloadIndication.h | 0 e2sim/{ => previous}/ASN1c/UL-Total-PRB-usage.c | 0 e2sim/{ => previous}/ASN1c/UL-Total-PRB-usage.h | 0 e2sim/{ => previous}/ASN1c/UL-UE-Configuration.c | 0 e2sim/{ => previous}/ASN1c/UL-UE-Configuration.h | 0 e2sim/{ => previous}/ASN1c/UL-non-GBR-PRB-usage.c | 0 e2sim/{ => previous}/ASN1c/UL-non-GBR-PRB-usage.h | 0 .../ASN1c/UL-scheduling-PDCCH-CCE-usage.c | 0 .../ASN1c/UL-scheduling-PDCCH-CCE-usage.h | 0 e2sim/{ => previous}/ASN1c/ULConfiguration.c | 0 e2sim/{ => previous}/ASN1c/ULConfiguration.h | 0 e2sim/{ => previous}/ASN1c/ULOnlySharing.c | 0 e2sim/{ => previous}/ASN1c/ULOnlySharing.h | 0 .../ASN1c/ULResourceBitmapULandDLSharing.c | 0 .../ASN1c/ULResourceBitmapULandDLSharing.h | 0 .../ASN1c/ULResourcesULandDLSharing.c | 0 .../ASN1c/ULResourcesULandDLSharing.h | 0 e2sim/{ => previous}/ASN1c/ULandDLSharing.c | 0 e2sim/{ => previous}/ASN1c/ULandDLSharing.h | 0 e2sim/{ => previous}/ASN1c/UnsuccessfulOutcome.c | 0 e2sim/{ => previous}/ASN1c/UnsuccessfulOutcome.h | 0 e2sim/{ => previous}/ASN1c/UsableABSInformation.c | 0 e2sim/{ => previous}/ASN1c/UsableABSInformation.h | 0 .../{ => previous}/ASN1c/UsableABSInformationFDD.c | 0 .../{ => previous}/ASN1c/UsableABSInformationFDD.h | 0 .../{ => previous}/ASN1c/UsableABSInformationTDD.c | 0 .../{ => previous}/ASN1c/UsableABSInformationTDD.h | 0 .../ASN1c/UserPlaneTrafficActivityReport.c | 0 .../ASN1c/UserPlaneTrafficActivityReport.h | 0 e2sim/{ => previous}/ASN1c/V2XServicesAuthorized.c | 0 e2sim/{ => previous}/ASN1c/V2XServicesAuthorized.h | 0 e2sim/{ => previous}/ASN1c/VehicleUE.c | 0 e2sim/{ => previous}/ASN1c/VehicleUE.h | 0 e2sim/{ => previous}/ASN1c/WLANMeasConfig.c | 0 e2sim/{ => previous}/ASN1c/WLANMeasConfig.h | 0 .../{ => previous}/ASN1c/WLANMeasConfigNameList.c | 0 .../{ => previous}/ASN1c/WLANMeasConfigNameList.h | 0 .../ASN1c/WLANMeasurementConfiguration.c | 0 .../ASN1c/WLANMeasurementConfiguration.h | 0 e2sim/{ => previous}/ASN1c/WLANName.c | 0 e2sim/{ => previous}/ASN1c/WLANName.h | 0 e2sim/{ => previous}/ASN1c/WT-UE-XwAP-ID.c | 0 e2sim/{ => previous}/ASN1c/WT-UE-XwAP-ID.h | 0 e2sim/{ => previous}/ASN1c/WTID-Long-Type2.c | 0 e2sim/{ => previous}/ASN1c/WTID-Long-Type2.h | 0 e2sim/{ => previous}/ASN1c/WTID-Type1.c | 0 e2sim/{ => previous}/ASN1c/WTID-Type1.h | 0 e2sim/{ => previous}/ASN1c/WTID.c | 0 e2sim/{ => previous}/ASN1c/WTID.h | 0 e2sim/{ => previous}/ASN1c/WidebandCQI.c | 0 e2sim/{ => previous}/ASN1c/WidebandCQI.h | 0 e2sim/{ => previous}/ASN1c/WidebandCQICodeword1.c | 0 e2sim/{ => previous}/ASN1c/WidebandCQICodeword1.h | 0 e2sim/{ => previous}/ASN1c/X2AP-Message.c | 0 e2sim/{ => previous}/ASN1c/X2AP-Message.h | 0 e2sim/{ => previous}/ASN1c/X2APMessageTransfer.c | 0 e2sim/{ => previous}/ASN1c/X2APMessageTransfer.h | 0 e2sim/{ => previous}/ASN1c/X2BenefitValue.c | 0 e2sim/{ => previous}/ASN1c/X2BenefitValue.h | 0 e2sim/{ => previous}/ASN1c/X2Release.c | 0 e2sim/{ => previous}/ASN1c/X2Release.h | 0 e2sim/{ => previous}/ASN1c/X2RemovalFailure.c | 0 e2sim/{ => previous}/ASN1c/X2RemovalFailure.h | 0 e2sim/{ => previous}/ASN1c/X2RemovalRequest.c | 0 e2sim/{ => previous}/ASN1c/X2RemovalRequest.h | 0 e2sim/{ => previous}/ASN1c/X2RemovalResponse.c | 0 e2sim/{ => previous}/ASN1c/X2RemovalResponse.h | 0 e2sim/{ => previous}/ASN1c/X2SetupFailure.c | 0 e2sim/{ => previous}/ASN1c/X2SetupFailure.h | 0 e2sim/{ => previous}/ASN1c/X2SetupRequest.c | 0 e2sim/{ => previous}/ASN1c/X2SetupRequest.h | 0 e2sim/{ => previous}/ASN1c/X2SetupResponse.c | 0 e2sim/{ => previous}/ASN1c/X2SetupResponse.h | 0 e2sim/{ => previous}/ASN1c/asn_SEQUENCE_OF.c | 0 e2sim/{ => previous}/ASN1c/asn_SEQUENCE_OF.h | 0 e2sim/{ => previous}/ASN1c/asn_SET_OF.c | 0 e2sim/{ => previous}/ASN1c/asn_SET_OF.h | 0 e2sim/{ => previous}/ASN1c/asn_application.c | 0 e2sim/{ => previous}/ASN1c/asn_application.h | 0 e2sim/{ => previous}/ASN1c/asn_bit_data.c | 0 e2sim/{ => previous}/ASN1c/asn_bit_data.h | 0 e2sim/{ => previous}/ASN1c/asn_codecs.h | 0 e2sim/{ => previous}/ASN1c/asn_codecs_prim.c | 0 e2sim/{ => previous}/ASN1c/asn_codecs_prim.h | 0 e2sim/{ => previous}/ASN1c/asn_constant.h | 0 e2sim/{ => previous}/ASN1c/asn_internal.c | 0 e2sim/{ => previous}/ASN1c/asn_internal.h | 0 e2sim/{ => previous}/ASN1c/asn_ioc.h | 0 e2sim/{ => previous}/ASN1c/asn_random_fill.c | 0 e2sim/{ => previous}/ASN1c/asn_random_fill.h | 0 e2sim/{ => previous}/ASN1c/asn_system.h | 0 e2sim/{ => previous}/ASN1c/ber_decoder.c | 0 e2sim/{ => previous}/ASN1c/ber_decoder.h | 0 e2sim/{ => previous}/ASN1c/ber_tlv_length.c | 0 e2sim/{ => previous}/ASN1c/ber_tlv_length.h | 0 e2sim/{ => previous}/ASN1c/ber_tlv_tag.c | 0 e2sim/{ => previous}/ASN1c/ber_tlv_tag.h | 0 e2sim/{ => previous}/ASN1c/constr_CHOICE.c | 0 e2sim/{ => previous}/ASN1c/constr_CHOICE.h | 0 e2sim/{ => previous}/ASN1c/constr_SEQUENCE.c | 0 e2sim/{ => previous}/ASN1c/constr_SEQUENCE.h | 0 e2sim/{ => previous}/ASN1c/constr_SEQUENCE_OF.c | 0 e2sim/{ => previous}/ASN1c/constr_SEQUENCE_OF.h | 0 e2sim/{ => previous}/ASN1c/constr_SET_OF.c | 0 e2sim/{ => previous}/ASN1c/constr_SET_OF.h | 0 e2sim/{ => previous}/ASN1c/constr_TYPE.c | 0 e2sim/{ => previous}/ASN1c/constr_TYPE.h | 0 e2sim/{ => previous}/ASN1c/constraints.c | 0 e2sim/{ => previous}/ASN1c/constraints.h | 0 e2sim/{ => previous}/ASN1c/converter-example.mk | 0 e2sim/{ => previous}/ASN1c/der_encoder.c | 0 e2sim/{ => previous}/ASN1c/der_encoder.h | 0 e2sim/{ => previous}/ASN1c/pdu_collection.c | 0 e2sim/{ => previous}/ASN1c/per_decoder.c | 0 e2sim/{ => previous}/ASN1c/per_decoder.h | 0 e2sim/{ => previous}/ASN1c/per_encoder.c | 0 e2sim/{ => previous}/ASN1c/per_encoder.h | 0 e2sim/{ => previous}/ASN1c/per_opentype.c | 0 e2sim/{ => previous}/ASN1c/per_opentype.h | 0 e2sim/{ => previous}/ASN1c/per_support.c | 0 e2sim/{ => previous}/ASN1c/per_support.h | 0 e2sim/{ => previous}/ASN1c/xer_decoder.c | 0 e2sim/{ => previous}/ASN1c/xer_decoder.h | 0 e2sim/{ => previous}/ASN1c/xer_encoder.c | 0 e2sim/{ => previous}/ASN1c/xer_encoder.h | 0 e2sim/{ => previous}/ASN1c/xer_support.c | 0 e2sim/{ => previous}/ASN1c/xer_support.h | 0 e2sim/previous/CMakeLists.txt | 61 + e2sim/previous/README.md | 95 + e2sim/{ => previous}/build_e2sim | 0 e2sim/{e2apv1sim => previous}/docker/Dockerfile | 0 .../docker/container-tag.yaml | 0 e2sim/{ => previous}/docker/old/DockerFile_old | 0 e2sim/{ => previous}/docker/old/Dockerfile | 0 e2sim/{ => previous}/docker/old/Dockerfile_base | 0 e2sim/{ => previous}/docker/old/configure_rmr | 0 e2sim/{ => previous}/docker/old/empty.rt | 0 e2sim/{ => previous}/docker/old/install_asn1c | 0 e2sim/{ => previous}/docker/old/install_rmr | 0 e2sim/{ => previous}/docker/old/local.rt | 0 .../ricsim => previous/e2apv1sim}/ASN1c/ANY.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/ANY.h | 0 .../e2apv1sim}/ASN1c/BIT_STRING.c | 0 .../e2apv1sim}/ASN1c/BIT_STRING.h | 0 .../e2apv1sim}/ASN1c/BIT_STRING_oer.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/C-RNTI.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/C-RNTI.h | 0 .../CU-CP-Usage-Report-CellResourceReportItem.c | 0 .../CU-CP-Usage-Report-CellResourceReportItem.h | 0 .../e2apv1sim}/ASN1c/CU-CP-Usage-Report-Per-UE.c | 0 .../e2apv1sim}/ASN1c/CU-CP-Usage-Report-Per-UE.h | 0 .../CU-CP-Usage-Report-UeResourceReportItem.c | 0 .../CU-CP-Usage-Report-UeResourceReportItem.h | 0 .../CU-UP-Usage-Report-CellResourceReportItem.c | 0 .../CU-UP-Usage-Report-CellResourceReportItem.h | 0 .../e2apv1sim}/ASN1c/CU-UP-Usage-Report-Per-UE.c | 0 .../e2apv1sim}/ASN1c/CU-UP-Usage-Report-Per-UE.h | 0 .../CU-UP-Usage-Report-UeResourceReportItem.c | 0 .../CU-UP-Usage-Report-UeResourceReportItem.h | 0 .../e2apv1sim}/ASN1c/CUUPMeasurement-Container.c | 0 .../e2apv1sim}/ASN1c/CUUPMeasurement-Container.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/Cause.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/Cause.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/CauseMisc.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/CauseMisc.h | 0 .../e2apv1sim}/ASN1c/CauseProtocol.c | 0 .../e2apv1sim}/ASN1c/CauseProtocol.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/CauseRIC.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/CauseRIC.h | 0 .../e2apv1sim}/ASN1c/CauseRICservice.c | 0 .../e2apv1sim}/ASN1c/CauseRICservice.h | 0 .../e2apv1sim}/ASN1c/CauseTransport.c | 0 .../e2apv1sim}/ASN1c/CauseTransport.h | 0 .../e2apv1sim}/ASN1c/CellResourceReportListItem.c | 0 .../e2apv1sim}/ASN1c/CellResourceReportListItem.h | 0 .../e2apv1sim}/ASN1c/Criticality.c | 0 .../e2apv1sim}/ASN1c/Criticality.h | 0 .../ASN1c/CriticalityDiagnostics-IE-Item.c | 0 .../ASN1c/CriticalityDiagnostics-IE-Item.h | 0 .../ASN1c/CriticalityDiagnostics-IE-List.c | 0 .../ASN1c/CriticalityDiagnostics-IE-List.h | 0 .../e2apv1sim}/ASN1c/CriticalityDiagnostics.c | 0 .../e2apv1sim}/ASN1c/CriticalityDiagnostics.h | 0 .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 0 .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 0 .../e2apv1sim}/ASN1c/DU-Usage-Report-Per-UE.c | 0 .../e2apv1sim}/ASN1c/DU-Usage-Report-Per-UE.h | 0 .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 0 .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/E2AP-PDU.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/E2AP-PDU.h | 0 .../e2apv1sim}/ASN1c/E2SM-KPM-ActionDefinition.c | 0 .../e2apv1sim}/ASN1c/E2SM-KPM-ActionDefinition.h | 0 .../E2SM-KPM-EventTriggerDefinition-Format1.c | 0 .../E2SM-KPM-EventTriggerDefinition-Format1.h | 0 .../ASN1c/E2SM-KPM-EventTriggerDefinition.c | 0 .../ASN1c/E2SM-KPM-EventTriggerDefinition.h | 0 .../ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 0 .../ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 0 .../e2apv1sim}/ASN1c/E2SM-KPM-IndicationHeader.c | 0 .../e2apv1sim}/ASN1c/E2SM-KPM-IndicationHeader.h | 0 .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 0 .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 0 .../e2apv1sim}/ASN1c/E2SM-KPM-IndicationMessage.c | 0 .../e2apv1sim}/ASN1c/E2SM-KPM-IndicationMessage.h | 0 .../ASN1c/E2SM-KPM-RANfunction-Description.c | 0 .../ASN1c/E2SM-KPM-RANfunction-Description.h | 0 .../e2apv1sim}/ASN1c/E2setupFailure.c | 0 .../e2apv1sim}/ASN1c/E2setupFailure.h | 0 .../e2apv1sim}/ASN1c/E2setupRequest.c | 0 .../e2apv1sim}/ASN1c/E2setupRequest.h | 0 .../e2apv1sim}/ASN1c/E2setupResponse.c | 0 .../e2apv1sim}/ASN1c/E2setupResponse.h | 0 .../e2apv1sim}/ASN1c/ENB-ID-Choice.c | 0 .../e2apv1sim}/ASN1c/ENB-ID-Choice.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/ENB-ID.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/ENB-ID.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/ENGNB-ID.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/ENGNB-ID.h | 0 .../e2apv1sim}/ASN1c/EPC-CUUP-PM-Format.c | 0 .../e2apv1sim}/ASN1c/EPC-CUUP-PM-Format.h | 0 .../e2apv1sim}/ASN1c/EPC-DU-PM-Container.c | 0 .../e2apv1sim}/ASN1c/EPC-DU-PM-Container.h | 0 .../e2apv1sim}/ASN1c/ErrorIndication.c | 0 .../e2apv1sim}/ASN1c/ErrorIndication.h | 0 .../e2apv1sim}/ASN1c/FGC-CUUP-PM-Format.c | 0 .../e2apv1sim}/ASN1c/FGC-CUUP-PM-Format.h | 0 .../e2apv1sim}/ASN1c/FGC-DU-PM-Container.c | 0 .../e2apv1sim}/ASN1c/FGC-DU-PM-Container.h | 0 .../e2apv1sim}/ASN1c/FQIPERSlicesPerPlmnListItem.c | 0 .../e2apv1sim}/ASN1c/FQIPERSlicesPerPlmnListItem.h | 0 .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 0 .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 0 .../e2apv1sim}/ASN1c/GNB-CU-CP-Name.c | 0 .../e2apv1sim}/ASN1c/GNB-CU-CP-Name.h | 0 .../e2apv1sim}/ASN1c/GNB-CU-UP-ID.c | 0 .../e2apv1sim}/ASN1c/GNB-CU-UP-ID.h | 0 .../e2apv1sim}/ASN1c/GNB-CU-UP-Name.c | 0 .../e2apv1sim}/ASN1c/GNB-CU-UP-Name.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/GNB-DU-ID.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/GNB-DU-ID.h | 0 .../e2apv1sim}/ASN1c/GNB-DU-Name.c | 0 .../e2apv1sim}/ASN1c/GNB-DU-Name.h | 0 .../e2apv1sim}/ASN1c/GNB-ID-Choice.c | 0 .../e2apv1sim}/ASN1c/GNB-ID-Choice.h | 0 .../ricsim => previous/e2apv1sim}/ASN1c/GNB-Name.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/GNB-Name.h | 0 .../e2apv1sim}/ASN1c/GlobalE2node-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalE2node-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalE2node-eNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalE2node-eNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalE2node-en-gNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalE2node-en-gNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalE2node-gNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalE2node-gNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalE2node-ng-eNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalE2node-ng-eNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalENB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalENB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-eNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-eNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-en-gNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-en-gNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-gNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-gNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalRIC-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalRIC-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalenGNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalenGNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalgNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalgNB-ID.h | 0 .../e2apv1sim}/ASN1c/GlobalngeNB-ID.c | 0 .../e2apv1sim}/ASN1c/GlobalngeNB-ID.h | 0 .../ricsim => previous/e2apv1sim}/ASN1c/INTEGER.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/INTEGER.h | 0 .../e2apv1sim}/ASN1c/INTEGER_oer.c | 0 .../e2apv1sim}/ASN1c/InitiatingMessage.c | 0 .../e2apv1sim}/ASN1c/InitiatingMessage.h | 0 .../e2apv1sim}/ASN1c/Makefile.am.asn1convert | 0 .../e2apv1sim}/ASN1c/Makefile.am.libasncodec | 0 .../ricsim => previous/e2apv1sim}/ASN1c/NI-Type.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/NI-Type.h | 0 .../ricsim => previous/e2apv1sim}/ASN1c/NRCGI.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/NRCGI.h | 0 .../e2apv1sim}/ASN1c/NRCellIdentity.c | 0 .../e2apv1sim}/ASN1c/NRCellIdentity.h | 0 .../e2apv1sim}/ASN1c/NativeEnumerated.c | 0 .../e2apv1sim}/ASN1c/NativeEnumerated.h | 0 .../e2apv1sim}/ASN1c/NativeEnumerated_oer.c | 0 .../e2apv1sim}/ASN1c/NativeInteger.c | 0 .../e2apv1sim}/ASN1c/NativeInteger.h | 0 .../e2apv1sim}/ASN1c/NativeInteger_oer.c | 0 .../e2apv1sim}/ASN1c/OCTET_STRING.c | 0 .../e2apv1sim}/ASN1c/OCTET_STRING.h | 0 .../e2apv1sim}/ASN1c/OCTET_STRING_oer.c | 0 .../e2apv1sim}/ASN1c/OCUCP-PF-Container.c | 0 .../e2apv1sim}/ASN1c/OCUCP-PF-Container.h | 0 .../e2apv1sim}/ASN1c/OCUUP-PF-Container.c | 0 .../e2apv1sim}/ASN1c/OCUUP-PF-Container.h | 0 .../e2apv1sim}/ASN1c/ODU-PF-Container.c | 0 .../e2apv1sim}/ASN1c/ODU-PF-Container.h | 0 .../e2apv1sim}/ASN1c/OPEN_TYPE.c | 0 .../e2apv1sim}/ASN1c/OPEN_TYPE.h | 0 .../e2apv1sim}/ASN1c/OPEN_TYPE_oer.c | 0 .../e2apv1sim}/ASN1c/PF-Container.c | 0 .../e2apv1sim}/ASN1c/PF-Container.h | 0 .../e2apv1sim}/ASN1c/PF-ContainerListItem.c | 0 .../e2apv1sim}/ASN1c/PF-ContainerListItem.h | 0 .../e2apv1sim}/ASN1c/PLMN-Identity.c | 0 .../e2apv1sim}/ASN1c/PLMN-Identity.h | 0 .../e2apv1sim}/ASN1c/PM-Containers-List.c | 0 .../e2apv1sim}/ASN1c/PM-Containers-List.h | 0 .../e2apv1sim}/ASN1c/PerQCIReportListItem.c | 0 .../e2apv1sim}/ASN1c/PerQCIReportListItem.h | 0 .../e2apv1sim}/ASN1c/PerQCIReportListItemFormat.c | 0 .../e2apv1sim}/ASN1c/PerQCIReportListItemFormat.h | 0 .../e2apv1sim}/ASN1c/PlmnID-List.c | 0 .../e2apv1sim}/ASN1c/PlmnID-List.h | 0 .../e2sim => previous/e2apv1sim}/ASN1c/Presence.c | 0 .../e2sim => previous/e2apv1sim}/ASN1c/Presence.h | 0 .../e2apv1sim}/ASN1c/PrintableString.c | 0 .../e2apv1sim}/ASN1c/PrintableString.h | 0 .../e2apv1sim}/ASN1c/ProcedureCode.c | 0 .../e2apv1sim}/ASN1c/ProcedureCode.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-Container.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-Container.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-ContainerList.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-ContainerList.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-ContainerPair.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-ContainerPair.h | 0 .../ASN1c/ProtocolIE-ContainerPairList.c | 0 .../ASN1c/ProtocolIE-ContainerPairList.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-Field.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-Field.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-FieldPair.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-FieldPair.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-ID.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-ID.h | 0 .../e2apv1sim}/ASN1c/ProtocolIE-SingleContainer.c | 0 .../e2apv1sim}/ASN1c/ProtocolIE-SingleContainer.h | 0 .../e2apv1sim}/ASN1c/RAN-Container.c | 0 .../e2apv1sim}/ASN1c/RAN-Container.h | 0 .../e2apv1sim}/ASN1c/RANcallProcess-ID-string.c | 0 .../e2apv1sim}/ASN1c/RANcallProcess-ID-string.h | 0 .../e2apv1sim}/ASN1c/RANfunction-Item.c | 0 .../e2apv1sim}/ASN1c/RANfunction-Item.h | 0 .../e2apv1sim}/ASN1c/RANfunction-Name.c | 0 .../e2apv1sim}/ASN1c/RANfunction-Name.h | 0 .../e2apv1sim}/ASN1c/RANfunctionDefinition.c | 0 .../e2apv1sim}/ASN1c/RANfunctionDefinition.h | 0 .../e2apv1sim}/ASN1c/RANfunctionID-Item.c | 0 .../e2apv1sim}/ASN1c/RANfunctionID-Item.h | 0 .../e2apv1sim}/ASN1c/RANfunctionID.c | 0 .../e2apv1sim}/ASN1c/RANfunctionID.h | 0 .../e2apv1sim}/ASN1c/RANfunctionIDcause-Item.c | 0 .../e2apv1sim}/ASN1c/RANfunctionIDcause-Item.h | 0 .../e2apv1sim}/ASN1c/RANfunctionRevision.c | 0 .../e2apv1sim}/ASN1c/RANfunctionRevision.h | 0 .../e2apv1sim}/ASN1c/RANfunctions-List.c | 0 .../e2apv1sim}/ASN1c/RANfunctions-List.h | 0 .../e2apv1sim}/ASN1c/RANfunctionsID-List.c | 0 .../e2apv1sim}/ASN1c/RANfunctionsID-List.h | 0 .../e2apv1sim}/ASN1c/RANfunctionsIDcause-List.c | 0 .../e2apv1sim}/ASN1c/RANfunctionsIDcause-List.h | 0 .../e2apv1sim}/ASN1c/RIC-EventTriggerStyle-List.c | 0 .../e2apv1sim}/ASN1c/RIC-EventTriggerStyle-List.h | 0 .../e2apv1sim}/ASN1c/RIC-Format-Type.c | 0 .../e2apv1sim}/ASN1c/RIC-Format-Type.h | 0 .../e2apv1sim}/ASN1c/RIC-ReportStyle-List.c | 0 .../e2apv1sim}/ASN1c/RIC-ReportStyle-List.h | 0 .../e2apv1sim}/ASN1c/RIC-Style-Name.c | 0 .../e2apv1sim}/ASN1c/RIC-Style-Name.h | 0 .../e2apv1sim}/ASN1c/RIC-Style-Type.c | 0 .../e2apv1sim}/ASN1c/RIC-Style-Type.h | 0 .../e2apv1sim}/ASN1c/RICaction-Admitted-Item.c | 0 .../e2apv1sim}/ASN1c/RICaction-Admitted-Item.h | 0 .../e2apv1sim}/ASN1c/RICaction-Admitted-List.c | 0 .../e2apv1sim}/ASN1c/RICaction-Admitted-List.h | 0 .../e2apv1sim}/ASN1c/RICaction-NotAdmitted-Item.c | 0 .../e2apv1sim}/ASN1c/RICaction-NotAdmitted-Item.h | 0 .../e2apv1sim}/ASN1c/RICaction-NotAdmitted-List.c | 0 .../e2apv1sim}/ASN1c/RICaction-NotAdmitted-List.h | 0 .../e2apv1sim}/ASN1c/RICaction-ToBeSetup-Item.c | 0 .../e2apv1sim}/ASN1c/RICaction-ToBeSetup-Item.h | 0 .../e2apv1sim}/ASN1c/RICactionDefinition.c | 0 .../e2apv1sim}/ASN1c/RICactionDefinition.h | 0 .../e2apv1sim}/ASN1c/RICactionID.c | 0 .../e2apv1sim}/ASN1c/RICactionID.h | 0 .../e2apv1sim}/ASN1c/RICactionType.c | 0 .../e2apv1sim}/ASN1c/RICactionType.h | 0 .../e2apv1sim}/ASN1c/RICactions-ToBeSetup-List.c | 0 .../e2apv1sim}/ASN1c/RICactions-ToBeSetup-List.h | 0 .../e2apv1sim}/ASN1c/RICcallProcessID.c | 0 .../e2apv1sim}/ASN1c/RICcallProcessID.h | 0 .../e2apv1sim}/ASN1c/RICcontrolAckRequest.c | 0 .../e2apv1sim}/ASN1c/RICcontrolAckRequest.h | 0 .../e2apv1sim}/ASN1c/RICcontrolAcknowledge.c | 0 .../e2apv1sim}/ASN1c/RICcontrolAcknowledge.h | 0 .../e2apv1sim}/ASN1c/RICcontrolFailure.c | 0 .../e2apv1sim}/ASN1c/RICcontrolFailure.h | 0 .../e2apv1sim}/ASN1c/RICcontrolHeader.c | 0 .../e2apv1sim}/ASN1c/RICcontrolHeader.h | 0 .../e2apv1sim}/ASN1c/RICcontrolMessage.c | 0 .../e2apv1sim}/ASN1c/RICcontrolMessage.h | 0 .../e2apv1sim}/ASN1c/RICcontrolOutcome.c | 0 .../e2apv1sim}/ASN1c/RICcontrolOutcome.h | 0 .../e2apv1sim}/ASN1c/RICcontrolRequest.c | 0 .../e2apv1sim}/ASN1c/RICcontrolRequest.h | 0 .../e2apv1sim}/ASN1c/RICcontrolStatus.c | 0 .../e2apv1sim}/ASN1c/RICcontrolStatus.h | 0 .../e2apv1sim}/ASN1c/RICeventTriggerDefinition.c | 0 .../e2apv1sim}/ASN1c/RICeventTriggerDefinition.h | 0 .../e2apv1sim}/ASN1c/RICindication.c | 0 .../e2apv1sim}/ASN1c/RICindication.h | 0 .../e2apv1sim}/ASN1c/RICindicationHeader.c | 0 .../e2apv1sim}/ASN1c/RICindicationHeader.h | 0 .../e2apv1sim}/ASN1c/RICindicationMessage.c | 0 .../e2apv1sim}/ASN1c/RICindicationMessage.h | 0 .../e2apv1sim}/ASN1c/RICindicationSN.c | 0 .../e2apv1sim}/ASN1c/RICindicationSN.h | 0 .../e2apv1sim}/ASN1c/RICindicationType.c | 0 .../e2apv1sim}/ASN1c/RICindicationType.h | 0 .../e2apv1sim}/ASN1c/RICrequestID.c | 0 .../e2apv1sim}/ASN1c/RICrequestID.h | 0 .../e2apv1sim}/ASN1c/RICserviceQuery.c | 0 .../e2apv1sim}/ASN1c/RICserviceQuery.h | 0 .../e2apv1sim}/ASN1c/RICserviceUpdate.c | 0 .../e2apv1sim}/ASN1c/RICserviceUpdate.h | 0 .../e2apv1sim}/ASN1c/RICserviceUpdateAcknowledge.c | 0 .../e2apv1sim}/ASN1c/RICserviceUpdateAcknowledge.h | 0 .../e2apv1sim}/ASN1c/RICserviceUpdateFailure.c | 0 .../e2apv1sim}/ASN1c/RICserviceUpdateFailure.h | 0 .../ASN1c/RICsubscriptionDeleteFailure.c | 0 .../ASN1c/RICsubscriptionDeleteFailure.h | 0 .../ASN1c/RICsubscriptionDeleteRequest.c | 0 .../ASN1c/RICsubscriptionDeleteRequest.h | 0 .../ASN1c/RICsubscriptionDeleteResponse.c | 0 .../ASN1c/RICsubscriptionDeleteResponse.h | 0 .../e2apv1sim}/ASN1c/RICsubscriptionDetails.c | 0 .../e2apv1sim}/ASN1c/RICsubscriptionDetails.h | 0 .../e2apv1sim}/ASN1c/RICsubscriptionFailure.c | 0 .../e2apv1sim}/ASN1c/RICsubscriptionFailure.h | 0 .../e2apv1sim}/ASN1c/RICsubscriptionRequest.c | 0 .../e2apv1sim}/ASN1c/RICsubscriptionRequest.h | 0 .../e2apv1sim}/ASN1c/RICsubscriptionResponse.c | 0 .../e2apv1sim}/ASN1c/RICsubscriptionResponse.h | 0 .../e2apv1sim}/ASN1c/RICsubsequentAction.c | 0 .../e2apv1sim}/ASN1c/RICsubsequentAction.h | 0 .../e2apv1sim}/ASN1c/RICsubsequentActionType.c | 0 .../e2apv1sim}/ASN1c/RICsubsequentActionType.h | 0 .../e2apv1sim}/ASN1c/RICtimeToWait.c | 0 .../e2apv1sim}/ASN1c/RICtimeToWait.h | 0 .../e2apv1sim}/ASN1c/RT-Period-IE.c | 0 .../e2apv1sim}/ASN1c/RT-Period-IE.h | 0 .../e2apv1sim}/ASN1c/ResetRequest.c | 0 .../e2apv1sim}/ASN1c/ResetRequest.h | 0 .../e2apv1sim}/ASN1c/ResetResponse.c | 0 .../e2apv1sim}/ASN1c/ResetResponse.h | 0 .../ricsim => previous/e2apv1sim}/ASN1c/SNSSAI.c | 0 .../ricsim => previous/e2apv1sim}/ASN1c/SNSSAI.h | 0 .../e2apv1sim}/ASN1c/ServedPlmnPerCellListItem.c | 0 .../e2apv1sim}/ASN1c/ServedPlmnPerCellListItem.h | 0 .../e2apv1sim}/ASN1c/SlicePerPlmnPerCellListItem.c | 0 .../e2apv1sim}/ASN1c/SlicePerPlmnPerCellListItem.h | 0 .../e2apv1sim}/ASN1c/SliceToReportListItem.c | 0 .../e2apv1sim}/ASN1c/SliceToReportListItem.h | 0 .../e2apv1sim}/ASN1c/SuccessfulOutcome.c | 0 .../e2apv1sim}/ASN1c/SuccessfulOutcome.h | 0 .../e2apv1sim}/ASN1c/TimeToWait.c | 0 .../e2apv1sim}/ASN1c/TimeToWait.h | 0 .../e2apv1sim}/ASN1c/Timestamp.c | 0 .../e2apv1sim}/ASN1c/Timestamp.h | 0 .../e2apv1sim}/ASN1c/Trigger-ConditionIE-Item.c | 0 .../e2apv1sim}/ASN1c/Trigger-ConditionIE-Item.h | 0 .../e2apv1sim}/ASN1c/TriggeringMessage.c | 0 .../e2apv1sim}/ASN1c/TriggeringMessage.h | 0 .../e2apv1sim}/ASN1c/TypeOfError.c | 0 .../e2apv1sim}/ASN1c/TypeOfError.h | 0 .../e2apv1sim}/ASN1c/UE-Report-Type.c | 0 .../e2apv1sim}/ASN1c/UE-Report-Type.h | 0 .../e2apv1sim}/ASN1c/UnsuccessfulOutcome.c | 0 .../e2apv1sim}/ASN1c/UnsuccessfulOutcome.h | 0 .../e2apv1sim}/ASN1c/asn_SEQUENCE_OF.c | 0 .../e2apv1sim}/ASN1c/asn_SEQUENCE_OF.h | 0 .../e2apv1sim}/ASN1c/asn_SET_OF.c | 0 .../e2apv1sim}/ASN1c/asn_SET_OF.h | 0 .../e2apv1sim}/ASN1c/asn_application.c | 0 .../e2apv1sim}/ASN1c/asn_application.h | 0 .../e2apv1sim}/ASN1c/asn_bit_data.c | 0 .../e2apv1sim}/ASN1c/asn_bit_data.h | 0 .../e2apv1sim}/ASN1c/asn_codecs.h | 0 .../e2apv1sim}/ASN1c/asn_codecs_prim.c | 0 .../e2apv1sim}/ASN1c/asn_codecs_prim.h | 0 .../e2apv1sim}/ASN1c/asn_constant.h | 0 .../e2apv1sim}/ASN1c/asn_internal.c | 0 .../e2apv1sim}/ASN1c/asn_internal.h | 0 .../ricsim => previous/e2apv1sim}/ASN1c/asn_ioc.h | 0 .../e2apv1sim}/ASN1c/asn_random_fill.c | 0 .../e2apv1sim}/ASN1c/asn_random_fill.h | 0 .../e2apv1sim}/ASN1c/asn_system.h | 0 .../e2apv1sim}/ASN1c/ber_decoder.c | 0 .../e2apv1sim}/ASN1c/ber_decoder.h | 0 .../e2apv1sim}/ASN1c/ber_tlv_length.c | 0 .../e2apv1sim}/ASN1c/ber_tlv_length.h | 0 .../e2apv1sim}/ASN1c/ber_tlv_tag.c | 0 .../e2apv1sim}/ASN1c/ber_tlv_tag.h | 0 .../e2apv1sim}/ASN1c/constr_CHOICE.c | 0 .../e2apv1sim}/ASN1c/constr_CHOICE.h | 0 .../e2apv1sim}/ASN1c/constr_CHOICE_oer.c | 0 .../e2apv1sim}/ASN1c/constr_SEQUENCE.c | 0 .../e2apv1sim}/ASN1c/constr_SEQUENCE.h | 0 .../e2apv1sim}/ASN1c/constr_SEQUENCE_OF.c | 0 .../e2apv1sim}/ASN1c/constr_SEQUENCE_OF.h | 0 .../e2apv1sim}/ASN1c/constr_SEQUENCE_oer.c | 0 .../e2apv1sim}/ASN1c/constr_SET_OF.c | 0 .../e2apv1sim}/ASN1c/constr_SET_OF.h | 0 .../e2apv1sim}/ASN1c/constr_SET_OF_oer.c | 0 .../e2apv1sim}/ASN1c/constr_TYPE.c | 0 .../e2apv1sim}/ASN1c/constr_TYPE.h | 0 .../e2apv1sim}/ASN1c/constraints.c | 0 .../e2apv1sim}/ASN1c/constraints.h | 0 .../e2apv1sim}/ASN1c/converter-example.mk | 0 .../e2apv1sim}/ASN1c/der_encoder.c | 0 .../e2apv1sim}/ASN1c/der_encoder.h | 0 .../e2apv1sim}/ASN1c/oer_decoder.c | 0 .../e2apv1sim}/ASN1c/oer_decoder.h | 0 .../e2apv1sim}/ASN1c/oer_encoder.c | 0 .../e2apv1sim}/ASN1c/oer_encoder.h | 0 .../e2apv1sim}/ASN1c/oer_support.c | 0 .../e2apv1sim}/ASN1c/oer_support.h | 0 .../e2apv1sim}/ASN1c/pdu_collection.c | 0 .../e2apv1sim}/ASN1c/per_decoder.c | 0 .../e2apv1sim}/ASN1c/per_decoder.h | 0 .../e2apv1sim}/ASN1c/per_encoder.c | 0 .../e2apv1sim}/ASN1c/per_encoder.h | 0 .../e2apv1sim}/ASN1c/per_opentype.c | 0 .../e2apv1sim}/ASN1c/per_opentype.h | 0 .../e2apv1sim}/ASN1c/per_support.c | 0 .../e2apv1sim}/ASN1c/per_support.h | 0 .../e2apv1sim}/ASN1c/xer_decoder.c | 0 .../e2apv1sim}/ASN1c/xer_decoder.h | 0 .../e2apv1sim}/ASN1c/xer_encoder.c | 0 .../e2apv1sim}/ASN1c/xer_encoder.h | 0 .../e2apv1sim}/ASN1c/xer_support.c | 0 .../e2apv1sim}/ASN1c/xer_support.h | 0 e2sim/{ => previous}/e2apv1sim/CMakeLists.txt | 0 e2sim/{ => previous}/e2apv1sim/Dockerfile | 0 e2sim/{ => previous}/e2apv1sim/README.md | 0 e2sim/{ => previous}/e2apv1sim/build_e2sim | 0 .../e2apv1sim}/cellMeasReport.txt | 0 .../e2sim => previous/e2apv1sim}/docker/Dockerfile | 0 .../e2apv1sim}/docker/container-tag.yaml | 0 .../e2apv1sim/docker/old/DockerFile_old | 0 .../{ => previous}/e2apv1sim/docker/old/Dockerfile | 0 .../e2apv1sim/docker/old/Dockerfile_base | 0 .../e2apv1sim/docker/old/configure_rmr | 0 e2sim/{ => previous}/e2apv1sim/docker/old/empty.rt | 0 .../e2apv1sim/docker/old/install_asn1c | 0 .../e2apv1sim/docker/old/install_rmr | 0 e2sim/{ => previous}/e2apv1sim/docker/old/local.rt | 0 e2sim/{ => previous}/e2apv1sim/e2sim.cpp | 0 e2sim/{ => previous}/e2apv1sim/e2sim.hpp | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c | 450 ++ e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h | 65 + e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c | 656 ++ e2sim/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 + .../e2apv1sim/e2sim}/ASN1c/Cause.c | 0 .../e2apv1sim/e2sim}/ASN1c/Cause.h | 0 .../e2apv1sim/e2sim}/ASN1c/CauseMisc.c | 0 .../e2apv1sim/e2sim}/ASN1c/CauseMisc.h | 0 .../e2apv1sim/e2sim}/ASN1c/CauseProtocol.c | 0 .../e2apv1sim/e2sim}/ASN1c/CauseProtocol.h | 0 .../e2apv1sim/e2sim}/ASN1c/CauseRIC.c | 0 .../e2apv1sim/e2sim}/ASN1c/CauseRIC.h | 0 .../e2apv1sim/e2sim}/ASN1c/CauseRICservice.c | 0 .../e2apv1sim/e2sim}/ASN1c/CauseRICservice.h | 0 .../e2apv1sim/e2sim}/ASN1c/CauseTransport.c | 0 .../e2apv1sim/e2sim}/ASN1c/CauseTransport.h | 0 .../e2sim/ASN1c/CellResourceReportListItem.c | 227 + .../e2sim/ASN1c/CellResourceReportListItem.h | 61 + .../e2apv1sim/e2sim}/ASN1c/Criticality.c | 0 .../e2apv1sim/e2sim}/ASN1c/Criticality.h | 0 .../e2sim}/ASN1c/CriticalityDiagnostics-IE-Item.c | 0 .../e2sim}/ASN1c/CriticalityDiagnostics-IE-Item.h | 0 .../e2sim}/ASN1c/CriticalityDiagnostics-IE-List.c | 0 .../e2sim}/ASN1c/CriticalityDiagnostics-IE-List.h | 0 .../e2sim}/ASN1c/CriticalityDiagnostics.c | 0 .../e2sim}/ASN1c/CriticalityDiagnostics.h | 0 .../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 + .../e2apv1sim/e2sim}/ASN1c/E2AP-PDU.c | 0 .../e2apv1sim/e2sim}/ASN1c/E2AP-PDU.h | 0 .../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 | 0 .../e2apv1sim/e2sim}/ASN1c/E2setupFailure.h | 0 .../e2apv1sim/e2sim}/ASN1c/E2setupRequest.c | 0 .../e2apv1sim/e2sim}/ASN1c/E2setupRequest.h | 0 .../e2apv1sim/e2sim}/ASN1c/E2setupResponse.c | 0 .../e2apv1sim/e2sim}/ASN1c/E2setupResponse.h | 0 .../e2apv1sim/e2sim}/ASN1c/ENB-ID-Choice.c | 0 .../e2apv1sim/e2sim}/ASN1c/ENB-ID-Choice.h | 0 .../e2apv1sim/e2sim}/ASN1c/ENB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/ENB-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/ENGNB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/ENGNB-ID.h | 0 .../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 | 0 .../e2apv1sim/e2sim}/ASN1c/ErrorIndication.h | 0 .../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 + .../e2apv1sim/e2sim}/ASN1c/GNB-CU-UP-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GNB-CU-UP-ID.h | 0 .../e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c | 109 + .../e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h | 46 + .../e2apv1sim/e2sim}/ASN1c/GNB-DU-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GNB-DU-ID.h | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c | 109 + e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h | 46 + .../e2apv1sim/e2sim}/ASN1c/GNB-ID-Choice.c | 0 .../e2apv1sim/e2sim}/ASN1c/GNB-ID-Choice.h | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c | 75 + e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h | 62 + .../e2apv1sim/e2sim}/ASN1c/GlobalE2node-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalE2node-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalE2node-eNB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalE2node-eNB-ID.h | 0 .../e2sim}/ASN1c/GlobalE2node-en-gNB-ID.c | 0 .../e2sim}/ASN1c/GlobalE2node-en-gNB-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalE2node-gNB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalE2node-gNB-ID.h | 0 .../e2sim}/ASN1c/GlobalE2node-ng-eNB-ID.c | 0 .../e2sim}/ASN1c/GlobalE2node-ng-eNB-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalENB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalENB-ID.h | 0 .../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 + .../e2apv1sim/e2sim}/ASN1c/GlobalRIC-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalRIC-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalenGNB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalenGNB-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalgNB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalgNB-ID.h | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalngeNB-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/GlobalngeNB-ID.h | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c | 1735 +++++ e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h | 108 + e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c | 179 + .../e2apv1sim/e2sim}/ASN1c/InitiatingMessage.c | 0 .../e2apv1sim/e2sim}/ASN1c/InitiatingMessage.h | 0 .../e2apv1sim/e2sim}/ASN1c/Makefile.am.asn1convert | 0 .../e2apv1sim/e2sim}/ASN1c/Makefile.am.libasncodec | 0 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 + e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c | 509 ++ e2sim/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 + .../e2apv1sim/e2sim}/ASN1c/PLMN-Identity.c | 0 .../e2apv1sim/e2sim}/ASN1c/PLMN-Identity.h | 0 .../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 + e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c | 72 + e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h | 54 + .../e2apv1sim/e2sim}/ASN1c/Presence.c | 0 .../e2apv1sim/e2sim}/ASN1c/Presence.h | 0 .../e2apv1sim/e2sim/ASN1c/PrintableString.c | 130 + .../e2apv1sim/e2sim/ASN1c/PrintableString.h | 37 + .../e2apv1sim/e2sim}/ASN1c/ProcedureCode.c | 0 .../e2apv1sim/e2sim}/ASN1c/ProcedureCode.h | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-Container.c | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-Container.h | 0 .../e2sim}/ASN1c/ProtocolIE-ContainerList.c | 0 .../e2sim}/ASN1c/ProtocolIE-ContainerList.h | 0 .../e2sim}/ASN1c/ProtocolIE-ContainerPair.c | 0 .../e2sim}/ASN1c/ProtocolIE-ContainerPair.h | 0 .../e2sim}/ASN1c/ProtocolIE-ContainerPairList.c | 0 .../e2sim}/ASN1c/ProtocolIE-ContainerPairList.h | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-Field.c | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-Field.h | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-FieldPair.c | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-FieldPair.h | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-ID.c | 0 .../e2apv1sim/e2sim}/ASN1c/ProtocolIE-ID.h | 0 .../e2sim}/ASN1c/ProtocolIE-SingleContainer.c | 0 .../e2sim}/ASN1c/ProtocolIE-SingleContainer.h | 0 .../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 | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunction-Item.h | 0 .../e2apv1sim/e2sim/ASN1c/RANfunction-Name.c | 316 + .../e2apv1sim/e2sim/ASN1c/RANfunction-Name.h | 48 + .../e2apv1sim/e2sim}/ASN1c/RANfunctionDefinition.c | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionDefinition.h | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionID-Item.c | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionID-Item.h | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionID.c | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionID.h | 0 .../e2sim}/ASN1c/RANfunctionIDcause-Item.c | 0 .../e2sim}/ASN1c/RANfunctionIDcause-Item.h | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionRevision.c | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionRevision.h | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctions-List.c | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctions-List.h | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionsID-List.c | 0 .../e2apv1sim/e2sim}/ASN1c/RANfunctionsID-List.h | 0 .../e2sim}/ASN1c/RANfunctionsIDcause-List.c | 0 .../e2sim}/ASN1c/RANfunctionsIDcause-List.h | 0 .../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 | 0 .../e2sim}/ASN1c/RICaction-Admitted-Item.h | 0 .../e2sim}/ASN1c/RICaction-Admitted-List.c | 0 .../e2sim}/ASN1c/RICaction-Admitted-List.h | 0 .../e2sim}/ASN1c/RICaction-NotAdmitted-Item.c | 0 .../e2sim}/ASN1c/RICaction-NotAdmitted-Item.h | 0 .../e2sim}/ASN1c/RICaction-NotAdmitted-List.c | 0 .../e2sim}/ASN1c/RICaction-NotAdmitted-List.h | 0 .../e2sim}/ASN1c/RICaction-ToBeSetup-Item.c | 0 .../e2sim}/ASN1c/RICaction-ToBeSetup-Item.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICactionDefinition.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICactionDefinition.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICactionID.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICactionID.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICactionType.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICactionType.h | 0 .../e2sim}/ASN1c/RICactions-ToBeSetup-List.c | 0 .../e2sim}/ASN1c/RICactions-ToBeSetup-List.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcallProcessID.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcallProcessID.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolAckRequest.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolAckRequest.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolAcknowledge.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolAcknowledge.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolFailure.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolFailure.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolHeader.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolHeader.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolMessage.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolMessage.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolOutcome.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolOutcome.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolRequest.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolRequest.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolStatus.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICcontrolStatus.h | 0 .../e2sim}/ASN1c/RICeventTriggerDefinition.c | 0 .../e2sim}/ASN1c/RICeventTriggerDefinition.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICindication.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICindication.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationHeader.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationHeader.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationMessage.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationMessage.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationSN.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationSN.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationType.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICindicationType.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICrequestID.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICrequestID.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICserviceQuery.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICserviceQuery.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICserviceUpdate.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICserviceUpdate.h | 0 .../e2sim}/ASN1c/RICserviceUpdateAcknowledge.c | 0 .../e2sim}/ASN1c/RICserviceUpdateAcknowledge.h | 0 .../e2sim}/ASN1c/RICserviceUpdateFailure.c | 0 .../e2sim}/ASN1c/RICserviceUpdateFailure.h | 0 .../e2sim}/ASN1c/RICsubscriptionDeleteFailure.c | 0 .../e2sim}/ASN1c/RICsubscriptionDeleteFailure.h | 0 .../e2sim}/ASN1c/RICsubscriptionDeleteRequest.c | 0 .../e2sim}/ASN1c/RICsubscriptionDeleteRequest.h | 0 .../e2sim}/ASN1c/RICsubscriptionDeleteResponse.c | 0 .../e2sim}/ASN1c/RICsubscriptionDeleteResponse.h | 0 .../e2sim}/ASN1c/RICsubscriptionDetails.c | 0 .../e2sim}/ASN1c/RICsubscriptionDetails.h | 0 .../e2sim}/ASN1c/RICsubscriptionFailure.c | 0 .../e2sim}/ASN1c/RICsubscriptionFailure.h | 0 .../e2sim}/ASN1c/RICsubscriptionRequest.c | 0 .../e2sim}/ASN1c/RICsubscriptionRequest.h | 0 .../e2sim}/ASN1c/RICsubscriptionResponse.c | 0 .../e2sim}/ASN1c/RICsubscriptionResponse.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICsubsequentAction.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICsubsequentAction.h | 0 .../e2sim}/ASN1c/RICsubsequentActionType.c | 0 .../e2sim}/ASN1c/RICsubsequentActionType.h | 0 .../e2apv1sim/e2sim}/ASN1c/RICtimeToWait.c | 0 .../e2apv1sim/e2sim}/ASN1c/RICtimeToWait.h | 0 .../previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c | 94 + .../previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h | 74 + .../e2apv1sim/e2sim}/ASN1c/ResetRequest.c | 0 .../e2apv1sim/e2sim}/ASN1c/ResetRequest.h | 0 .../e2apv1sim/e2sim}/ASN1c/ResetResponse.c | 0 .../e2apv1sim/e2sim}/ASN1c/ResetResponse.h | 0 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 | 0 .../e2apv1sim/e2sim}/ASN1c/SuccessfulOutcome.h | 0 .../e2apv1sim/e2sim}/ASN1c/TimeToWait.c | 0 .../e2apv1sim/e2sim}/ASN1c/TimeToWait.h | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c | 31 + e2sim/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 | 0 .../e2apv1sim/e2sim}/ASN1c/TriggeringMessage.h | 0 .../e2apv1sim/e2sim}/ASN1c/TypeOfError.c | 0 .../e2apv1sim/e2sim}/ASN1c/TypeOfError.h | 0 .../e2apv1sim/e2sim/ASN1c/UE-Report-Type.c | 60 + .../e2apv1sim/e2sim/ASN1c/UE-Report-Type.h | 57 + .../e2apv1sim/e2sim}/ASN1c/UnsuccessfulOutcome.c | 0 .../e2apv1sim/e2sim}/ASN1c/UnsuccessfulOutcome.h | 0 .../e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c | 41 + .../e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h | 52 + e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c | 88 + e2sim/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 + e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h | 108 + .../e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c | 317 + .../e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h | 51 + .../e2apv1sim/e2sim}/ASN1c/asn_constant.h | 0 .../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 + e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h | 150 + e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c | 283 + e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h | 66 + .../e2apv1sim/e2sim/ASN1c/ber_tlv_length.c | 168 + .../e2apv1sim/e2sim/ASN1c/ber_tlv_length.h | 50 + e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c | 144 + e2sim/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 + e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c | 80 + e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h | 262 + e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c | 93 + e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h | 62 + .../e2apv1sim/e2sim}/ASN1c/converter-example.mk | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c | 194 + e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h | 68 + e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c | 152 + e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h | 72 + e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c | 141 + e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h | 70 + e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c | 122 + e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h | 47 + .../e2apv1sim/e2sim}/ASN1c/pdu_collection.c | 0 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c | 185 + e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h | 82 + e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c | 265 + e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h | 93 + .../previous/e2apv1sim/e2sim/ASN1c/per_opentype.c | 533 ++ .../previous/e2apv1sim/e2sim/ASN1c/per_opentype.h | 44 + e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c | 489 ++ e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h | 127 + e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c | 369 + e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h | 106 + e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c | 237 + e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h | 83 + e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c | 227 + e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h | 55 + .../{ => previous}/e2apv1sim/e2sim/CMakeLists.txt | 0 e2sim/{ => previous}/e2apv1sim/e2sim/Dockerfile | 0 e2sim/{ => previous}/e2apv1sim/e2sim/README.md | 0 e2sim/{ => previous}/e2apv1sim/e2sim/build_e2sim | 0 e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt | 40 + e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile | 54 + .../e2apv1sim/e2sim/docker/container-tag.yaml | 2 + .../e2apv1sim/e2sim/docker/old/DockerFile_old | 0 .../e2apv1sim/e2sim/docker/old/Dockerfile | 0 .../e2apv1sim/e2sim/docker/old/Dockerfile_base | 0 .../e2apv1sim/e2sim/docker/old/configure_rmr | 0 .../e2apv1sim/e2sim/docker/old/empty.rt | 0 .../e2apv1sim/e2sim/docker/old/install_asn1c | 0 .../e2apv1sim/e2sim/docker/old/install_rmr | 0 .../e2apv1sim/e2sim/docker/old/local.rt | 0 e2sim/{ => previous}/e2apv1sim/e2sim/e2sim.cpp | 0 e2sim/{ => previous}/e2apv1sim/e2sim/e2sim.hpp | 0 .../e2apv1sim/e2sim/encode_e2apv1.cpp | 0 .../e2apv1sim/e2sim/encode_e2apv1.hpp | 0 .../{ => previous}/e2apv1sim/e2sim/encode_kpm.cpp | 0 .../{ => previous}/e2apv1sim/e2sim/encode_kpm.hpp | 0 .../e2apv1sim/e2sim/extras/ricsim.cpp | 0 .../{ => previous}/e2apv1sim/e2sim/helm/README.md | 0 .../e2apv1sim/e2sim/helm/e2sim/Chart.yaml | 0 .../e2sim/helm/e2sim/templates/_helpers.tpl | 0 .../helm/e2sim/templates/bin/_e2sim-run.sh.tpl | 0 .../helm/e2sim/templates/configmap-e2sim-bin.yaml | 0 .../e2sim/helm/e2sim/templates/deployment.yaml | 0 .../e2apv1sim/e2sim/helm/e2sim/values.yaml | 0 .../e2apv1sim/e2sim/helm/e2sim_install.sh | 0 .../e2apv1sim/e2sim/kpm_callbacks.cpp | 0 .../e2apv1sim/e2sim/kpm_callbacks.hpp | 0 .../e2apv1sim/e2sim}/simulation.txt | 0 .../e2apv1sim/e2sim/src/ASN1/asn/asn.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp | 0 .../e2sim/src/ASN1/asn/chunked_allocator.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/elements.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp | 0 .../e2sim/src/ASN1/asn/per/binary_integer.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp | 0 .../e2sim/src/ASN1/asn/per/enumerated.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp | 0 .../e2sim/src/ASN1/asn/per/sequence_of.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp | 0 .../e2sim/src/ASN1/asn/per/whole_number.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/printer.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/type_defs.h | 0 .../e2apv1sim/e2sim/src/ASN1/asn/utility.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/variant.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/asn/version.hpp | 0 .../e2sim/src/ASN1/generated/E2AP-Constants.hpp | 0 .../e2sim/src/ASN1/generated/E2AP-IEs.hpp | 0 .../e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 0 .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 0 .../e2sim/src/ASN1/generated/X2AP-Constants.hpp | 0 .../e2sim/src/ASN1/generated/X2AP-Containers.hpp | 0 .../e2sim/src/ASN1/generated/X2AP-IEs.hpp | 0 .../e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp | 0 .../e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp | 0 .../e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp | 0 .../e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp | 0 .../e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp | 0 .../e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp | 0 .../e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp | 0 .../e2apv1sim/e2sim/src/DEF/e2sim_defs.h | 0 .../e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c | 0 .../e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h | 0 .../e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 0 .../e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 0 .../e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml | 0 .../e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml | 0 .../e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ | 0 .../src/E2AP/XML/E2AP_RICindication_type1.xml | 0 .../src/E2AP/XML/E2AP_RICindication_type2.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 0 .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 0 .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 0 .../e2sim/src/E2AP/XML/E2AP_SetupRequest.xml | 0 .../e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ | 0 .../e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml | 0 .../e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml | 0 .../e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml | 0 .../e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml | 0 .../e2sim/src/E2AP/XML/GlobalE2node-ID.xml | 0 .../e2sim/src/E2AP/XML/reference_constants.txt | 0 .../e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c | 0 .../e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h | 0 .../e2sim/src/E2AP/e2ap_message_handler.cpp | 0 .../e2sim/src/E2AP/e2ap_message_handler.hpp | 0 .../e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c | 0 .../e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h | 0 .../src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml | 0 .../src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml | 0 .../src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml | 0 .../e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml | 0 .../e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml | 0 .../e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ | 0 .../src/E2APr/XML/E2AP_RICindication_type1.xml | 0 .../src/E2APr/XML/E2AP_RICindication_type2.xml | 0 .../src/E2APr/XML/E2AP_RICsubscriptionRequest.xml | 0 .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 0 .../src/E2APr/XML/E2AP_RICsubscriptionResponse.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusFailure.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusRequest.xml | 0 .../E2APr/XML/E2AP_ResourceStatusRequest_bad.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusResponse.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusUpdate.xml | 0 .../e2sim/src/E2APr/XML/E2AP_SetupRequest.xml | 0 .../e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ | 0 .../e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml | 0 .../e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml | 0 .../e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml | 0 .../e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml | 0 .../e2sim/src/E2APr/XML/GlobalE2node-ID.xml | 0 .../e2sim/src/E2APr/XML/reference_constants.txt | 0 .../e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c | 0 .../e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h | 0 .../e2sim/src/E2APr/e2ap_message_handler.cpp | 0 .../e2sim/src/E2APr/e2ap_message_handler.cpp~ | 0 .../e2sim/src/E2APr/e2ap_message_handler.hpp | 0 .../e2sim/src/E2APr/e2ap_message_handler.hpp~ | 0 .../e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c | 0 .../e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp | 0 .../e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h | 0 .../e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp | 0 .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 0 .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c | 0 .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp | 0 .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h | 0 .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp | 0 .../e2sim/src/X2AP/x2ap_generate_messages.c | 0 .../e2sim/src/X2AP/x2ap_generate_messages.h | 0 .../e2sim/src/X2AP/x2ap_message_handler.c | 0 .../e2sim/src/X2AP/x2ap_message_handler.cpp | 0 .../e2sim/src/X2AP/x2ap_message_handler.h | 0 .../e2sim/src/X2AP/x2ap_message_handler.hpp | 0 .../e2apv1sim/e2sim/test/Misc/CMakeLists.txt | 0 .../e2apv1sim/e2sim/test/Misc/test_asn1c.cpp | 0 .../e2sim/test/Pendulum/Pendulum_asn_codec.c | 0 .../e2sim/test/Pendulum/Pendulum_asn_codec.h | 0 .../e2sim/test/Pendulum/Serial/adruino_serial.c | 0 .../e2sim/test/Pendulum/Serial/adruino_serial.h | 0 .../test/Pendulum/Serial/arduino-serial-lib.c | 0 .../test/Pendulum/Serial/arduino-serial-lib.h | 0 .../e2apv1sim/e2sim/test/Pendulum/demo_setup.txt | 0 .../e2sim/test/Pendulum/e2sim_closedloop.c | 0 .../e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c | 0 .../e2sim/test/Pendulum/e2sim_test_client.c | 0 .../e2sim/test/Pendulum/e2termination_test.cpp | 0 .../e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 | 0 .../e2apv1sim/e2sim/test/WLG/CMakeLists.txt | 0 .../e2apv1sim/e2sim/test/WLG/build_wlg.sh | 0 .../e2apv1sim/e2sim/test/WLG/ric_perf.cpp | 0 .../e2apv1sim/e2sim/test/WLG/ric_wlg.cpp | 0 .../e2apv1sim/e2sim/test/X2/CMakeLists.txt | 0 .../e2apv1sim/e2sim/test/X2/x2agent.cpp | 0 .../e2apv1sim/e2sim/test/X2/x2term.cpp | 0 .../e2apv1sim/e2sim/test/X2/x2termination_test.cpp | 0 .../e2apv1sim/e2sim/test/rmr_interface/README | 0 .../e2sim/test/rmr_interface/rmr_install.sh | 0 .../tests/receiver/build_and_run_recvr.sh | 0 .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 0 .../tests/sender/build_and_run_sender.sh | 0 .../test/rmr_interface/tests/sender/rmr_sender.c | 0 .../test/rmr_interface/tests/sender/rmr_wrapper.h | 0 .../e2sim/tools/asn_defs/generate_e2ap_e2sm_codes | 0 .../e2apv1sim/e2sim/tools/build_helper.bash | 0 .../e2apv1sim/e2sim/tools/install_asn1c | 0 .../e2apv1sim/e2sim/tools/install_dependencies | 0 .../e2apv1sim/e2sim}/ueMeasReport.txt | 0 e2sim/{ => previous}/e2apv1sim/encode_e2apv1.cpp | 0 e2sim/{ => previous}/e2apv1sim/encode_e2apv1.hpp | 0 e2sim/{ => previous}/e2apv1sim/encode_kpm.cpp | 0 e2sim/{ => previous}/e2apv1sim/encode_kpm.hpp | 0 e2sim/{ => previous}/e2apv1sim/extras/ricsim.cpp | 0 e2sim/{ => previous}/e2apv1sim/helm/README.md | 0 .../{ => previous}/e2apv1sim/helm/e2sim/Chart.yaml | 0 .../e2apv1sim/helm/e2sim/templates/_helpers.tpl | 0 .../helm/e2sim/templates/bin/_e2sim-run.sh.tpl | 0 .../helm/e2sim/templates/configmap-e2sim-bin.yaml | 0 .../e2apv1sim/helm/e2sim/templates/deployment.yaml | 0 .../e2apv1sim/helm/e2sim/values.yaml | 0 .../{ => previous}/e2apv1sim/helm/e2sim_install.sh | 0 e2sim/{ => previous}/e2apv1sim/kpm_callbacks.cpp | 0 e2sim/{ => previous}/e2apv1sim/kpm_callbacks.hpp | 0 e2sim/{ => previous}/e2apv1sim/ricsim.cpp | 0 e2sim/{ => previous}/e2apv1sim/ricsim.hpp | 0 e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c | 450 ++ e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h | 65 + e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c | 656 ++ e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c | 59 + e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h | 56 + .../e2apv1sim/ricsim/ASN1c/CauseProtocol.c | 65 + .../e2apv1sim/ricsim/ASN1c/CauseProtocol.h | 59 + e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c | 73 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c | 75 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c | 94 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c | 70 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c | 75 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c | 1735 +++++ e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c | 60 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c | 509 ++ e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c | 55 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c | 63 + e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h | 56 + e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c | 31 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c | 88 + e2sim/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 + e2sim/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 + e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h | 51 + .../e2apv1sim/ricsim/ASN1c/asn_random_fill.c | 56 + .../e2apv1sim/ricsim/ASN1c/asn_random_fill.h | 51 + e2sim/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 + .../{ => previous}/e2apv1sim/ricsim/CMakeLists.txt | 0 .../e2apv1sim/ricsim/CMakeLists.txt~ | 0 e2sim/{ => previous}/e2apv1sim/ricsim/build_e2sim | 0 .../e2apv1sim/ricsim/encode_e2apv1.cpp | 0 .../e2apv1sim/ricsim/encode_e2apv1.cpp~ | 0 .../e2apv1sim/ricsim/encode_e2apv1.hpp | 0 .../{ => previous}/e2apv1sim/ricsim/encode_kpm.cpp | 0 .../{ => previous}/e2apv1sim/ricsim/encode_kpm.hpp | 0 .../e2apv1sim/ricsim/extras/ricsim.cpp | 0 e2sim/{ => previous}/e2apv1sim/ricsim/ricsim.cpp | 0 e2sim/{ => previous}/e2apv1sim/ricsim/ricsim.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/asn.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp | 0 .../ricsim/src/ASN1/asn/chunked_allocator.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/elements.hpp | 0 .../ricsim/src/ASN1/asn/error_context.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp | 0 .../ricsim/src/ASN1/asn/per/binary_integer.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp | 0 .../ricsim/src/ASN1/asn/per/enumerated.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp | 0 .../ricsim/src/ASN1/asn/per/sequence_of.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp | 0 .../ricsim/src/ASN1/asn/per/whole_number.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/printer.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/type_defs.h | 0 .../e2apv1sim/ricsim/src/ASN1/asn/utility.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/variant.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/asn/version.hpp | 0 .../ricsim/src/ASN1/generated/E2AP-Constants.hpp | 0 .../ricsim/src/ASN1/generated/E2AP-IEs.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 0 .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 0 .../ricsim/src/ASN1/generated/X2AP-Constants.hpp | 0 .../ricsim/src/ASN1/generated/X2AP-Containers.hpp | 0 .../ricsim/src/ASN1/generated/X2AP-IEs.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp | 0 .../e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp | 0 .../ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp | 0 .../e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp | 0 .../ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp | 0 .../e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp | 0 .../e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp | 0 .../e2apv1sim/ricsim/src/DEF/e2sim_defs.h | 0 .../e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c | 0 .../e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 0 .../ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml | 0 .../ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml | 0 .../ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ | 0 .../src/E2AP/XML/E2AP_RICindication_type1.xml | 0 .../src/E2AP/XML/E2AP_RICindication_type2.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 0 .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 0 .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 0 .../ricsim/src/E2AP/XML/E2AP_SetupRequest.xml | 0 .../ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ | 0 .../ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml | 0 .../ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml | 0 .../ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml | 0 .../ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml | 0 .../ricsim/src/E2AP/XML/GlobalE2node-ID.xml | 0 .../ricsim/src/E2AP/XML/reference_constants.txt | 0 .../e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c | 0 .../e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h | 0 .../ricsim/src/E2AP/e2ap_message_handler.cpp | 0 .../ricsim/src/E2AP/e2ap_message_handler.hpp | 0 .../e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c | 0 .../e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h | 0 .../src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml | 0 .../src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml | 0 .../src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml | 0 .../ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml | 0 .../ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml | 0 .../src/E2APr/XML/E2AP_PartSetupRequest.xml~ | 0 .../src/E2APr/XML/E2AP_RICindication_type1.xml | 0 .../src/E2APr/XML/E2AP_RICindication_type2.xml | 0 .../src/E2APr/XML/E2AP_RICsubscriptionRequest.xml | 0 .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 0 .../src/E2APr/XML/E2AP_RICsubscriptionResponse.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusFailure.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusRequest.xml | 0 .../E2APr/XML/E2AP_ResourceStatusRequest_bad.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusResponse.xml | 0 .../src/E2APr/XML/E2AP_ResourceStatusUpdate.xml | 0 .../ricsim/src/E2APr/XML/E2AP_SetupRequest.xml | 0 .../ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ | 0 .../ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml | 0 .../ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml | 0 .../ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml | 0 .../ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml | 0 .../ricsim/src/E2APr/XML/GlobalE2node-ID.xml | 0 .../ricsim/src/E2APr/XML/reference_constants.txt | 0 .../e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c | 0 .../e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h | 0 .../ricsim/src/E2APr/e2ap_message_handler.cpp | 0 .../ricsim/src/E2APr/e2ap_message_handler.cpp~ | 0 .../ricsim/src/E2APr/e2ap_message_handler.hpp | 0 .../ricsim/src/E2APr/e2ap_message_handler.hpp~ | 0 .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c | 0 .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp | 0 .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h | 0 .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp | 0 .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 0 .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c | 0 .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp | 0 .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h | 0 .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp | 0 .../ricsim/src/X2AP/x2ap_generate_messages.c | 0 .../ricsim/src/X2AP/x2ap_generate_messages.h | 0 .../ricsim/src/X2AP/x2ap_message_handler.c | 0 .../ricsim/src/X2AP/x2ap_message_handler.cpp | 0 .../ricsim/src/X2AP/x2ap_message_handler.h | 0 .../ricsim/src/X2AP/x2ap_message_handler.hpp | 0 .../e2apv1sim/ricsim/test/Misc/CMakeLists.txt | 0 .../e2apv1sim/ricsim/test/Misc/test_asn1c.cpp | 0 .../ricsim/test/Pendulum/Pendulum_asn_codec.c | 0 .../ricsim/test/Pendulum/Pendulum_asn_codec.h | 0 .../ricsim/test/Pendulum/Serial/adruino_serial.c | 0 .../ricsim/test/Pendulum/Serial/adruino_serial.h | 0 .../test/Pendulum/Serial/arduino-serial-lib.c | 0 .../test/Pendulum/Serial/arduino-serial-lib.h | 0 .../e2apv1sim/ricsim/test/Pendulum/demo_setup.txt | 0 .../ricsim/test/Pendulum/e2sim_closedloop.c | 0 .../e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c | 0 .../ricsim/test/Pendulum/e2sim_test_client.c | 0 .../ricsim/test/Pendulum/e2termination_test.cpp | 0 .../e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 | 0 .../e2apv1sim/ricsim/test/WLG/CMakeLists.txt | 0 .../e2apv1sim/ricsim/test/WLG/build_wlg.sh | 0 .../e2apv1sim/ricsim/test/WLG/ric_perf.cpp | 0 .../e2apv1sim/ricsim/test/WLG/ric_wlg.cpp | 0 .../e2apv1sim/ricsim/test/X2/CMakeLists.txt | 0 .../e2apv1sim/ricsim/test/X2/x2agent.cpp | 0 .../e2apv1sim/ricsim/test/X2/x2term.cpp | 0 .../ricsim/test/X2/x2termination_test.cpp | 0 .../e2apv1sim/ricsim/test/rmr_interface/README | 0 .../ricsim/test/rmr_interface/rmr_install.sh | 0 .../tests/receiver/build_and_run_recvr.sh | 0 .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 0 .../tests/sender/build_and_run_sender.sh | 0 .../test/rmr_interface/tests/sender/rmr_sender.c | 0 .../test/rmr_interface/tests/sender/rmr_wrapper.h | 0 .../ricsim/tools/asn_defs/generate_e2ap_e2sm_codes | 0 .../e2apv1sim/ricsim/tools/build_helper.bash | 0 .../e2apv1sim/ricsim/tools/install_asn1c | 0 .../e2apv1sim/ricsim/tools/install_dependencies | 0 e2sim/previous/e2apv1sim/simulation.txt | 3 + .../{ => previous}/e2apv1sim/src/ASN1/asn/asn.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/codec.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/common.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/context.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/length.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/opentype.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/tag.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/tools.hpp | 0 .../e2apv1sim/src/ASN1/asn/ber/visitor.hpp | 0 .../e2apv1sim/src/ASN1/asn/buffer.hpp | 0 .../e2apv1sim/src/ASN1/asn/chunked_allocator.hpp | 0 .../e2apv1sim/src/ASN1/asn/constraints.hpp | 0 .../e2apv1sim/src/ASN1/asn/elements.hpp | 0 .../e2apv1sim/src/ASN1/asn/error_context.hpp | 0 .../e2apv1sim/src/ASN1/asn/identifier.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/binary_integer.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/bstring.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/choice.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/codec.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/common.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/context.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/enumerated.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/integer.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/length.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/oid.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/ostring.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/sequence.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/sequence_of.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/visitor.hpp | 0 .../e2apv1sim/src/ASN1/asn/per/whole_number.hpp | 0 .../e2apv1sim/src/ASN1/asn/printer.hpp | 0 .../e2apv1sim/src/ASN1/asn/type_defs.h | 0 .../e2apv1sim/src/ASN1/asn/utility.hpp | 0 .../e2apv1sim/src/ASN1/asn/value_traits.hpp | 0 .../e2apv1sim/src/ASN1/asn/variant.hpp | 0 .../e2apv1sim/src/ASN1/asn/version.hpp | 0 .../src/ASN1/generated/E2AP-Constants.hpp | 0 .../e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 0 .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 0 .../src/ASN1/generated/X2AP-Constants.hpp | 0 .../src/ASN1/generated/X2AP-Containers.hpp | 0 .../e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 0 .../e2apv1sim/src/ASN1/lib/asn_e2ap.cpp | 0 .../e2apv1sim/src/ASN1/lib/asn_e2ap.hpp | 0 .../e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp | 0 .../e2apv1sim/src/ASN1/lib/asn_x2ap.cpp | 0 .../e2apv1sim/src/ASN1/lib/asn_x2ap.hpp | 0 .../e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp | 0 .../e2apv1sim/src/ASN1/lib/e2ap_config.hpp | 0 .../e2apv1sim/src/DEF/e2sim_defs.cpp | 0 .../{ => previous}/e2apv1sim/src/DEF/e2sim_defs.h | 0 .../{ => previous}/e2apv1sim/src/E2AP/E2SM/e2sm.c | 0 .../{ => previous}/e2apv1sim/src/E2AP/E2SM/e2sm.h | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 0 .../src/E2AP/XML/E2AP_ErrorIndication.xml | 0 .../src/E2AP/XML/E2AP_PartSetupRequest.xml | 0 .../src/E2AP/XML/E2AP_PartSetupRequest.xml~ | 0 .../src/E2AP/XML/E2AP_RICindication_type1.xml | 0 .../src/E2AP/XML/E2AP_RICindication_type2.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 0 .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 0 .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 0 .../e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml | 0 .../e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ | 0 .../e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml | 0 .../e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml | 0 .../e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml | 0 .../src/E2AP/XML/E2AP_X2SetupResponse.xml | 0 .../e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml | 0 .../e2apv1sim/src/E2AP/XML/reference_constants.txt | 0 .../e2apv1sim/src/E2AP/e2ap_asn1c_codec.c | 0 .../e2apv1sim/src/E2AP/e2ap_asn1c_codec.h | 0 .../e2apv1sim/src/E2AP/e2ap_message_handler.cpp | 0 .../e2apv1sim/src/E2AP/e2ap_message_handler.hpp | 0 .../{ => previous}/e2apv1sim/src/SCTP/e2sim_sctp.c | 0 .../e2apv1sim/src/SCTP/e2sim_sctp.cpp | 0 .../{ => previous}/e2apv1sim/src/SCTP/e2sim_sctp.h | 0 .../e2apv1sim/src/SCTP/e2sim_sctp.hpp | 0 .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 0 .../e2apv1sim/src/X2AP/x2ap_asn_codec.c | 0 .../e2apv1sim/src/X2AP/x2ap_asn_codec.cpp | 0 .../e2apv1sim/src/X2AP/x2ap_asn_codec.h | 0 .../e2apv1sim/src/X2AP/x2ap_asn_codec.hpp | 0 .../e2apv1sim/src/X2AP/x2ap_generate_messages.c | 0 .../e2apv1sim/src/X2AP/x2ap_generate_messages.h | 0 .../e2apv1sim/src/X2AP/x2ap_message_handler.c | 0 .../e2apv1sim/src/X2AP/x2ap_message_handler.cpp | 0 .../e2apv1sim/src/X2AP/x2ap_message_handler.h | 0 .../e2apv1sim/src/X2AP/x2ap_message_handler.hpp | 0 .../e2apv1sim/test/Misc/CMakeLists.txt | 0 .../e2apv1sim/test/Misc/test_asn1c.cpp | 0 .../e2apv1sim/test/Pendulum/Pendulum_asn_codec.c | 0 .../e2apv1sim/test/Pendulum/Pendulum_asn_codec.h | 0 .../test/Pendulum/Serial/adruino_serial.c | 0 .../test/Pendulum/Serial/adruino_serial.h | 0 .../test/Pendulum/Serial/arduino-serial-lib.c | 0 .../test/Pendulum/Serial/arduino-serial-lib.h | 0 .../e2apv1sim/test/Pendulum/demo_setup.txt | 0 .../e2apv1sim/test/Pendulum/e2sim_closedloop.c | 0 .../e2apv1sim/test/Pendulum/e2sim_serial.c | 0 .../e2apv1sim/test/Pendulum/e2sim_test_client.c | 0 .../e2apv1sim/test/Pendulum/e2termination_test.cpp | 0 .../e2apv1sim/test/Pendulum/pendulum.asn1 | 0 .../e2apv1sim/test/WLG/CMakeLists.txt | 0 .../{ => previous}/e2apv1sim/test/WLG/build_wlg.sh | 0 .../{ => previous}/e2apv1sim/test/WLG/ric_perf.cpp | 0 .../{ => previous}/e2apv1sim/test/WLG/ric_wlg.cpp | 0 .../e2apv1sim/test/X2/CMakeLists.txt | 0 e2sim/{ => previous}/e2apv1sim/test/X2/x2agent.cpp | 0 e2sim/{ => previous}/e2apv1sim/test/X2/x2term.cpp | 0 .../e2apv1sim/test/X2/x2termination_test.cpp | 0 .../e2apv1sim/test/rmr_interface/README | 0 .../e2apv1sim/test/rmr_interface/rmr_install.sh | 0 .../tests/receiver/build_and_run_recvr.sh | 0 .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 0 .../tests/sender/build_and_run_sender.sh | 0 .../test/rmr_interface/tests/sender/rmr_sender.c | 0 .../test/rmr_interface/tests/sender/rmr_wrapper.h | 0 .../tools/asn_defs/generate_e2ap_e2sm_codes | 0 .../e2apv1sim/tools/build_helper.bash | 0 e2sim/{ => previous}/e2apv1sim/tools/install_asn1c | 0 .../e2apv1sim/tools/install_dependencies | 0 e2sim/previous/e2apv1sim/ueMeasReport.txt | 65 + e2sim/{ => previous}/e2sim.cpp | 0 e2sim/{ => previous}/helm/README.md | 0 e2sim/{ => previous}/helm/e2sim/Chart.yaml | 0 .../helm/e2sim/templates/_helpers.tpl | 0 .../helm/e2sim/templates/bin/_e2sim-run.sh.tpl | 0 .../helm/e2sim/templates/configmap-e2sim-bin.yaml | 0 .../helm/e2sim/templates/deployment.yaml | 0 e2sim/{ => previous}/helm/e2sim/values.yaml | 0 e2sim/{ => previous}/helm/e2sim_install.sh | 0 e2sim/{ => previous}/ricsim.cpp | 0 e2sim/{ => previous}/src/ASN1/asn/asn.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/codec.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/common.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/context.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/length.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/opentype.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/tag.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/tools.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/ber/visitor.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/buffer.hpp | 0 .../src/ASN1/asn/chunked_allocator.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/constraints.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/elements.hpp | 0 .../{ => previous}/src/ASN1/asn/error_context.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/identifier.hpp | 0 .../src/ASN1/asn/per/binary_integer.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/bstring.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/choice.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/codec.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/common.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/context.hpp | 0 .../{ => previous}/src/ASN1/asn/per/enumerated.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/integer.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/length.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/oid.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/ostring.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/sequence.hpp | 0 .../src/ASN1/asn/per/sequence_of.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/per/visitor.hpp | 0 .../src/ASN1/asn/per/whole_number.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/printer.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/type_defs.h | 0 e2sim/{ => previous}/src/ASN1/asn/utility.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/value_traits.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/variant.hpp | 0 e2sim/{ => previous}/src/ASN1/asn/version.hpp | 0 .../src/ASN1/generated/E2AP-Constants.hpp | 0 .../{ => previous}/src/ASN1/generated/E2AP-IEs.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 0 .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 0 .../src/ASN1/generated/X2AP-Constants.hpp | 0 .../src/ASN1/generated/X2AP-Containers.hpp | 0 .../{ => previous}/src/ASN1/generated/X2AP-IEs.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Contents.hpp | 0 .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 0 e2sim/{ => previous}/src/ASN1/lib/asn_e2ap.cpp | 0 e2sim/{ => previous}/src/ASN1/lib/asn_e2ap.hpp | 0 .../src/ASN1/lib/asn_e2ap_wrapper.hpp | 0 e2sim/{ => previous}/src/ASN1/lib/asn_x2ap.cpp | 0 e2sim/{ => previous}/src/ASN1/lib/asn_x2ap.hpp | 0 .../src/ASN1/lib/asn_x2ap_wrapper.hpp | 0 e2sim/{ => previous}/src/ASN1/lib/e2ap_config.hpp | 0 e2sim/previous/src/DEF/e2sim_defs.cpp | 125 + e2sim/previous/src/DEF/e2sim_defs.h | 65 + e2sim/{ => previous}/src/E2AP/E2SM/e2sm.c | 0 e2sim/{ => previous}/src/E2AP/E2SM/e2sm.h | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 0 .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 0 .../src/E2AP/XML/E2AP_ErrorIndication.xml | 0 .../src/E2AP/XML/E2AP_RICindication_type1.xml | 0 .../src/E2AP/XML/E2AP_RICindication_type2.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 0 .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 0 .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 0 .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 0 .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 0 .../src/E2AP/XML/E2AP_X2SetupFailure.xml | 0 .../src/E2AP/XML/E2AP_X2SetupRequest.xml | 0 .../src/E2AP/XML/E2AP_X2SetupResponse.xml | 0 .../src/E2AP/XML/reference_constants.txt | 0 e2sim/{ => previous}/src/E2AP/e2ap_asn1c_codec.c | 0 e2sim/{ => previous}/src/E2AP/e2ap_asn1c_codec.h | 0 .../src/E2AP/e2ap_message_handler.cpp | 0 .../src/E2AP/e2ap_message_handler.hpp | 0 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 | 0 .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 0 .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 0 .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 0 e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.c | 0 e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.cpp | 0 e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.h | 0 e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.hpp | 0 .../src/X2AP/x2ap_generate_messages.c | 0 .../src/X2AP/x2ap_generate_messages.h | 0 .../{ => previous}/src/X2AP/x2ap_message_handler.c | 0 .../src/X2AP/x2ap_message_handler.cpp | 0 .../{ => previous}/src/X2AP/x2ap_message_handler.h | 0 .../src/X2AP/x2ap_message_handler.hpp | 0 e2sim/{ => previous}/test/Misc/CMakeLists.txt | 0 e2sim/{ => previous}/test/Misc/test_asn1c.cpp | 0 .../test/Pendulum/Pendulum_asn_codec.c | 0 .../test/Pendulum/Pendulum_asn_codec.h | 0 .../test/Pendulum/Serial/adruino_serial.c | 0 .../test/Pendulum/Serial/adruino_serial.h | 0 .../test/Pendulum/Serial/arduino-serial-lib.c | 0 .../test/Pendulum/Serial/arduino-serial-lib.h | 0 e2sim/{ => previous}/test/Pendulum/demo_setup.txt | 0 .../test/Pendulum/e2sim_closedloop.c | 0 e2sim/{ => previous}/test/Pendulum/e2sim_serial.c | 0 .../test/Pendulum/e2sim_test_client.c | 0 .../test/Pendulum/e2termination_test.cpp | 0 e2sim/{ => previous}/test/Pendulum/pendulum.asn1 | 0 e2sim/{ => previous}/test/WLG/CMakeLists.txt | 0 e2sim/{ => previous}/test/WLG/build_wlg.sh | 0 e2sim/{ => previous}/test/WLG/ric_perf.cpp | 0 e2sim/{ => previous}/test/WLG/ric_wlg.cpp | 0 e2sim/{ => previous}/test/X2/CMakeLists.txt | 0 e2sim/{ => previous}/test/X2/x2agent.cpp | 0 e2sim/{ => previous}/test/X2/x2term.cpp | 0 .../{ => previous}/test/X2/x2termination_test.cpp | 0 e2sim/{ => previous}/test/rmr_interface/README | 0 .../test/rmr_interface/rmr_install.sh | 0 .../tests/receiver/build_and_run_recvr.sh | 0 .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 0 .../tests/sender/build_and_run_sender.sh | 0 .../test/rmr_interface/tests/sender/rmr_sender.c | 0 .../test/rmr_interface/tests/sender/rmr_wrapper.h | 0 .../tools/asn_defs/generate_e2ap_e2sm_codes | 0 e2sim/{ => previous}/tools/build_helper.bash | 0 e2sim/{ => previous}/tools/install_asn1c | 0 e2sim/{ => previous}/tools/install_dependencies | 0 e2sim/src/ASN1c/ANY.c | 450 ++ e2sim/src/ASN1c/ANY.h | 65 + e2sim/src/ASN1c/BIT_STRING.c | 656 ++ e2sim/src/ASN1c/BIT_STRING.h | 48 + e2sim/src/ASN1c/BIT_STRING_oer.c | 174 + e2sim/src/ASN1c/CMakeLists.txt | 40 + e2sim/src/ASN1c/Cause.c | 95 + e2sim/src/ASN1c/Cause.h | 68 + e2sim/src/ASN1c/CauseMisc.c | 62 + e2sim/src/ASN1c/CauseMisc.h | 58 + e2sim/src/ASN1c/CauseProtocol.c | 68 + e2sim/src/ASN1c/CauseProtocol.h | 61 + e2sim/src/ASN1c/CauseRIC.c | 76 + e2sim/src/ASN1c/CauseRIC.h | 65 + e2sim/src/ASN1c/CauseRICservice.c | 60 + e2sim/src/ASN1c/CauseRICservice.h | 57 + e2sim/src/ASN1c/CauseTransport.c | 58 + e2sim/src/ASN1c/CauseTransport.h | 56 + e2sim/src/ASN1c/Criticality.c | 58 + e2sim/src/ASN1c/Criticality.h | 54 + e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c | 53 + e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h | 44 + e2sim/src/ASN1c/CriticalityDiagnostics.c | 94 + e2sim/src/ASN1c/CriticalityDiagnostics.h | 52 + e2sim/src/ASN1c/E2AP-PDU.c | 78 + e2sim/src/ASN1c/E2AP-PDU.h | 61 + e2sim/src/ASN1c/E2setupFailure.c | 50 + e2sim/src/ASN1c/E2setupFailure.h | 44 + e2sim/src/ASN1c/E2setupRequest.c | 50 + e2sim/src/ASN1c/E2setupRequest.h | 44 + e2sim/src/ASN1c/E2setupResponse.c | 50 + e2sim/src/ASN1c/E2setupResponse.h | 44 + e2sim/src/ASN1c/ENB-ID-Choice.c | 192 + e2sim/src/ASN1c/ENB-ID-Choice.h | 60 + e2sim/src/ASN1c/ENB-ID.c | 241 + e2sim/src/ASN1c/ENB-ID.h | 61 + e2sim/src/ASN1c/ENGNB-ID.c | 94 + e2sim/src/ASN1c/ENGNB-ID.h | 56 + e2sim/src/ASN1c/ErrorIndication.c | 50 + e2sim/src/ASN1c/ErrorIndication.h | 44 + e2sim/src/ASN1c/GNB-CU-UP-ID.c | 70 + e2sim/src/ASN1c/GNB-CU-UP-ID.h | 46 + e2sim/src/ASN1c/GNB-DU-ID.c | 70 + e2sim/src/ASN1c/GNB-DU-ID.h | 46 + e2sim/src/ASN1c/GNB-ID-Choice.c | 94 + e2sim/src/ASN1c/GNB-ID-Choice.h | 56 + e2sim/src/ASN1c/GlobalE2node-ID.c | 89 + 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 + e2sim/src/ASN1c/GlobalENB-ID.c | 60 + e2sim/src/ASN1c/GlobalENB-ID.h | 46 + e2sim/src/ASN1c/GlobalRIC-ID.c | 99 + e2sim/src/ASN1c/GlobalRIC-ID.h | 44 + e2sim/src/ASN1c/GlobalenGNB-ID.c | 60 + e2sim/src/ASN1c/GlobalenGNB-ID.h | 46 + e2sim/src/ASN1c/GlobalgNB-ID.c | 60 + e2sim/src/ASN1c/GlobalgNB-ID.h | 46 + e2sim/src/ASN1c/GlobalngeNB-ID.c | 60 + e2sim/src/ASN1c/GlobalngeNB-ID.h | 46 + e2sim/src/ASN1c/INTEGER.c | 1735 +++++ e2sim/src/ASN1c/INTEGER.h | 108 + 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 + e2sim/src/ASN1c/NativeInteger.c | 550 ++ e2sim/src/ASN1c/NativeInteger.h | 46 + e2sim/src/ASN1c/NativeInteger_oer.c | 99 + e2sim/src/ASN1c/OCTET_STRING.c | 2411 +++++++ e2sim/src/ASN1c/OCTET_STRING.h | 102 + e2sim/src/ASN1c/OCTET_STRING_oer.c | 171 + e2sim/src/ASN1c/OPEN_TYPE.c | 509 ++ e2sim/src/ASN1c/OPEN_TYPE.h | 77 + e2sim/src/ASN1c/OPEN_TYPE_oer.c | 92 + e2sim/src/ASN1c/PLMN-Identity.c | 65 + e2sim/src/ASN1c/PLMN-Identity.h | 46 + e2sim/src/ASN1c/Presence.c | 58 + e2sim/src/ASN1c/Presence.h | 54 + e2sim/src/ASN1c/ProcedureCode.c | 64 + 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 + e2sim/src/ASN1c/ProtocolIE-ID.c | 64 + 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 + e2sim/src/ASN1c/RANfunctionID.c | 64 + 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 + e2sim/src/ASN1c/RICactionID.c | 64 + e2sim/src/ASN1c/RICactionID.h | 46 + e2sim/src/ASN1c/RICactionType.c | 60 + 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 + e2sim/src/ASN1c/RICindication.c | 50 + 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 + e2sim/src/ASN1c/RICindicationSN.c | 64 + e2sim/src/ASN1c/RICindicationSN.h | 45 + e2sim/src/ASN1c/RICindicationType.c | 58 + e2sim/src/ASN1c/RICindicationType.h | 54 + e2sim/src/ASN1c/RICrequestID.c | 126 + e2sim/src/ASN1c/RICrequestID.h | 45 + e2sim/src/ASN1c/RICserviceQuery.c | 50 + 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 + e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c | 50 + e2sim/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 + e2sim/src/ASN1c/RICtimeToWait.c | 90 + e2sim/src/ASN1c/RICtimeToWait.h | 72 + e2sim/src/ASN1c/ResetRequest.c | 50 + e2sim/src/ASN1c/ResetRequest.h | 44 + e2sim/src/ASN1c/ResetResponse.c | 50 + e2sim/src/ASN1c/ResetResponse.h | 44 + e2sim/src/ASN1c/SuccessfulOutcome.c | 368 + e2sim/src/ASN1c/SuccessfulOutcome.h | 91 + e2sim/src/ASN1c/TimeToWait.c | 66 + e2sim/src/ASN1c/TimeToWait.h | 58 + e2sim/src/ASN1c/TriggeringMessage.c | 58 + e2sim/src/ASN1c/TriggeringMessage.h | 54 + e2sim/src/ASN1c/TypeOfError.c | 58 + e2sim/src/ASN1c/TypeOfError.h | 56 + e2sim/src/ASN1c/UnsuccessfulOutcome.c | 358 + e2sim/src/ASN1c/UnsuccessfulOutcome.h | 89 + e2sim/src/ASN1c/asn_SEQUENCE_OF.c | 41 + e2sim/src/ASN1c/asn_SEQUENCE_OF.h | 52 + e2sim/src/ASN1c/asn_SET_OF.c | 88 + e2sim/src/ASN1c/asn_SET_OF.h | 72 + e2sim/src/ASN1c/asn_application.c | 481 ++ e2sim/src/ASN1c/asn_application.h | 171 + e2sim/src/ASN1c/asn_bit_data.c | 333 + e2sim/src/ASN1c/asn_bit_data.h | 83 + e2sim/src/ASN1c/asn_codecs.h | 108 + e2sim/src/ASN1c/asn_codecs_prim.c | 317 + e2sim/src/ASN1c/asn_codecs_prim.h | 51 + e2sim/src/ASN1c/asn_constant.h | 22 + e2sim/src/ASN1c/asn_internal.c | 48 + e2sim/src/ASN1c/asn_internal.h | 159 + e2sim/src/ASN1c/asn_ioc.h | 51 + e2sim/src/ASN1c/asn_random_fill.c | 56 + e2sim/src/ASN1c/asn_random_fill.h | 51 + e2sim/src/ASN1c/asn_system.h | 150 + e2sim/src/ASN1c/ber_decoder.c | 283 + e2sim/src/ASN1c/ber_decoder.h | 66 + e2sim/src/ASN1c/ber_tlv_length.c | 168 + e2sim/src/ASN1c/ber_tlv_length.h | 50 + e2sim/src/ASN1c/ber_tlv_tag.c | 144 + e2sim/src/ASN1c/ber_tlv_tag.h | 60 + e2sim/src/ASN1c/constr_CHOICE.c | 1533 ++++ e2sim/src/ASN1c/constr_CHOICE.h | 80 + e2sim/src/ASN1c/constr_CHOICE_oer.c | 380 + e2sim/src/ASN1c/constr_SEQUENCE.c | 2059 ++++++ 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 ++ e2sim/src/ASN1c/constr_SET_OF.c | 1441 ++++ e2sim/src/ASN1c/constr_SET_OF.h | 49 + e2sim/src/ASN1c/constr_SET_OF_oer.c | 285 + e2sim/src/ASN1c/constr_TYPE.c | 80 + e2sim/src/ASN1c/constr_TYPE.h | 262 + e2sim/src/ASN1c/constraints.c | 93 + e2sim/src/ASN1c/constraints.h | 62 + e2sim/src/ASN1c/converter-example.mk | 33 + e2sim/src/ASN1c/der_encoder.c | 194 + e2sim/src/ASN1c/der_encoder.h | 68 + e2sim/src/ASN1c/oer_decoder.c | 152 + e2sim/src/ASN1c/oer_decoder.h | 72 + e2sim/src/ASN1c/oer_encoder.c | 141 + e2sim/src/ASN1c/oer_encoder.h | 70 + e2sim/src/ASN1c/oer_support.c | 122 + e2sim/src/ASN1c/oer_support.h | 47 + e2sim/src/ASN1c/pdu_collection.c | 15 + e2sim/src/ASN1c/per_decoder.c | 185 + e2sim/src/ASN1c/per_decoder.h | 82 + e2sim/src/ASN1c/per_encoder.c | 265 + e2sim/src/ASN1c/per_encoder.h | 93 + e2sim/src/ASN1c/per_opentype.c | 533 ++ e2sim/src/ASN1c/per_opentype.h | 44 + e2sim/src/ASN1c/per_support.c | 489 ++ e2sim/src/ASN1c/per_support.h | 127 + e2sim/src/ASN1c/xer_decoder.c | 369 + e2sim/src/ASN1c/xer_decoder.h | 106 + e2sim/src/ASN1c/xer_encoder.c | 237 + e2sim/src/ASN1c/xer_encoder.h | 83 + e2sim/src/ASN1c/xer_support.c | 227 + e2sim/src/ASN1c/xer_support.h | 55 + e2sim/src/DEF/CMakeLists.txt | 35 + e2sim/src/SCTP/CMakeLists.txt | 37 + e2sim/src/SCTP/e2sim_sctp.cpp | 12 +- e2sim/src/base/CMakeLists.txt | 38 + e2sim/src/base/e2sim.cpp | 194 + e2sim/src/base/e2sim.hpp | 59 + e2sim/src/encoding/CMakeLists.txt | 38 + e2sim/src/encoding/encode_e2apv1.cpp | 1074 +++ e2sim/src/encoding/encode_e2apv1.hpp | 59 + e2sim/src/messagerouting/CMakeLists.txt | 43 + e2sim/src/messagerouting/e2ap_asn1c_codec.c | 229 + e2sim/src/messagerouting/e2ap_asn1c_codec.h | 48 + e2sim/src/messagerouting/e2ap_message_handler.cpp | 294 + e2sim/src/messagerouting/e2ap_message_handler.hpp | 47 + 4639 files changed, 157274 insertions(+), 170 deletions(-) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ANY.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ANY.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/BIT_STRING.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/BIT_STRING.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/BIT_STRING_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/C-RNTI.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/C-RNTI.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-CP-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-CP-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-UP-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-UP-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CUUPMeasurement-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CUUPMeasurement-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Cause.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Cause.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseMisc.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseMisc.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseProtocol.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseProtocol.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseRIC.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseRIC.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseRICservice.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseRICservice.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseTransport.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CauseTransport.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CellResourceReportListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CellResourceReportListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Criticality.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Criticality.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CriticalityDiagnostics-IE-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CriticalityDiagnostics-IE-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CriticalityDiagnostics-IE-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CriticalityDiagnostics-IE-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CriticalityDiagnostics.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/CriticalityDiagnostics.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/DU-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/DU-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/DU-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/DU-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/DU-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/DU-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2AP-PDU.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2AP-PDU.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-ActionDefinition.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-ActionDefinition.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-EventTriggerDefinition.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-EventTriggerDefinition.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationHeader-Format1.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationHeader-Format1.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationHeader.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationHeader.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationMessage-Format1.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationMessage-Format1.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationMessage.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-IndicationMessage.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-RANfunction-Description.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2SM-KPM-RANfunction-Description.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2setupFailure.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2setupFailure.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2setupRequest.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2setupRequest.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2setupResponse.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/E2setupResponse.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ENB-ID-Choice.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ENB-ID-Choice.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ENB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ENB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ENGNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ENGNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/EPC-CUUP-PM-Format.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/EPC-CUUP-PM-Format.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/EPC-DU-PM-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/EPC-DU-PM-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ErrorIndication.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ErrorIndication.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FGC-CUUP-PM-Format.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FGC-CUUP-PM-Format.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FGC-DU-PM-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FGC-DU-PM-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FQIPERSlicesPerPlmnListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FQIPERSlicesPerPlmnListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-CU-CP-Name.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-CU-CP-Name.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-CU-UP-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-CU-UP-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-CU-UP-Name.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-CU-UP-Name.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-DU-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-DU-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-DU-Name.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-DU-Name.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-ID-Choice.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-ID-Choice.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-Name.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GNB-Name.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-eNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-eNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-en-gNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-en-gNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-gNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-gNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-ng-eNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalE2node-ng-eNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalENB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalENB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-eNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-eNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-en-gNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-en-gNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-gNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-gNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-ng-eNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalKPMnode-ng-eNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalRIC-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalRIC-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalenGNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalenGNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalgNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalgNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalngeNB-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/GlobalngeNB-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/INTEGER.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/INTEGER.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/INTEGER_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/InitiatingMessage.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/InitiatingMessage.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Makefile.am.asn1convert (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Makefile.am.libasncodec (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NI-Type.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NI-Type.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NRCGI.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NRCGI.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NRCellIdentity.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NRCellIdentity.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NativeEnumerated.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NativeEnumerated.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NativeEnumerated_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NativeInteger.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NativeInteger.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/NativeInteger_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCTET_STRING.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCTET_STRING.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCTET_STRING_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCUCP-PF-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCUCP-PF-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCUUP-PF-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OCUUP-PF-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ODU-PF-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ODU-PF-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OPEN_TYPE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OPEN_TYPE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/OPEN_TYPE_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PF-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PF-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PF-ContainerListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PF-ContainerListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PLMN-Identity.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PLMN-Identity.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PM-Containers-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PM-Containers-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PerQCIReportListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PerQCIReportListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PerQCIReportListItemFormat.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PerQCIReportListItemFormat.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PlmnID-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PlmnID-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Presence.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Presence.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PrintableString.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/PrintableString.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProcedureCode.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProcedureCode.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ContainerList.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ContainerList.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ContainerPair.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ContainerPair.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ContainerPairList.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ContainerPairList.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-Field.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-Field.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-FieldPair.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-FieldPair.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-ID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-SingleContainer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ProtocolIE-SingleContainer.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RAN-Container.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RAN-Container.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANcallProcess-ID-string.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANcallProcess-ID-string.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunction-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunction-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunction-Name.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunction-Name.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionDefinition.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionDefinition.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionID-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionID-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionIDcause-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionIDcause-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionRevision.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionRevision.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctions-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctions-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionsID-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionsID-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionsIDcause-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RANfunctionsIDcause-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-EventTriggerStyle-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-EventTriggerStyle-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-Format-Type.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-Format-Type.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-ReportStyle-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-ReportStyle-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-Style-Name.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-Style-Name.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-Style-Type.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RIC-Style-Type.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-Admitted-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-Admitted-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-Admitted-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-Admitted-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-NotAdmitted-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-NotAdmitted-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-NotAdmitted-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-NotAdmitted-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-ToBeSetup-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICaction-ToBeSetup-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactionDefinition.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactionDefinition.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactionID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactionID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactionType.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactionType.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactions-ToBeSetup-List.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICactions-ToBeSetup-List.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcallProcessID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcallProcessID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolAckRequest.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolAckRequest.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolAcknowledge.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolAcknowledge.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolFailure.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolFailure.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolHeader.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolHeader.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolMessage.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolMessage.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolOutcome.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolOutcome.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolRequest.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolRequest.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolStatus.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICcontrolStatus.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICeventTriggerDefinition.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICeventTriggerDefinition.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindication.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindication.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationHeader.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationHeader.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationMessage.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationMessage.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationSN.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationSN.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationType.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICindicationType.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICrequestID.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICrequestID.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceQuery.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceQuery.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceUpdate.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceUpdate.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceUpdateAcknowledge.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceUpdateAcknowledge.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceUpdateFailure.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICserviceUpdateFailure.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDeleteFailure.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDeleteFailure.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDeleteRequest.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDeleteRequest.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDeleteResponse.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDeleteResponse.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDetails.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionDetails.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionFailure.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionFailure.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionRequest.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionRequest.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionResponse.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubscriptionResponse.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubsequentAction.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubsequentAction.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubsequentActionType.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICsubsequentActionType.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICtimeToWait.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RICtimeToWait.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RT-Period-IE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/RT-Period-IE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ResetRequest.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ResetRequest.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ResetResponse.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ResetResponse.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SNSSAI.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SNSSAI.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ServedPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ServedPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SlicePerPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SlicePerPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SliceToReportListItem.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SliceToReportListItem.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SuccessfulOutcome.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/SuccessfulOutcome.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/TimeToWait.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/TimeToWait.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Timestamp.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Timestamp.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Trigger-ConditionIE-Item.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/Trigger-ConditionIE-Item.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/TriggeringMessage.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/TriggeringMessage.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/TypeOfError.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/TypeOfError.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/UE-Report-Type.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/UE-Report-Type.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/UnsuccessfulOutcome.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/UnsuccessfulOutcome.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_SEQUENCE_OF.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_SEQUENCE_OF.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_SET_OF.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_SET_OF.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_application.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_application.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_bit_data.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_bit_data.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_codecs.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_codecs_prim.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_codecs_prim.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_constant.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_internal.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_internal.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_ioc.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_random_fill.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_random_fill.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/asn_system.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ber_decoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ber_decoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ber_tlv_length.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ber_tlv_length.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ber_tlv_tag.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/ber_tlv_tag.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_CHOICE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_CHOICE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_CHOICE_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SEQUENCE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SEQUENCE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SEQUENCE_OF.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SEQUENCE_OF.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SEQUENCE_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SET_OF.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SET_OF.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_SET_OF_oer.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_TYPE.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constr_TYPE.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constraints.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/constraints.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/converter-example.mk (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/der_encoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/der_encoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/oer_decoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/oer_decoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/oer_encoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/oer_encoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/oer_support.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/oer_support.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/pdu_collection.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_decoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_decoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_encoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_encoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_opentype.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_opentype.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_support.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/per_support.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/xer_decoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/xer_decoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/xer_encoder.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/xer_encoder.h (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/xer_support.c (100%) rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/ASN1c/xer_support.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt create mode 100644 e2sim/e2sm_examples/kpm_e2sm/Dockerfile rename e2sim/{e2apv1sim => e2sm_examples/kpm_e2sm}/cellMeasReport.txt (100%) create mode 160000 e2sim/e2sm_examples/kpm_e2sm/nlohmann_json_release rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm}/simulation.txt (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ANY.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ANY.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/BIT_STRING.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/BIT_STRING.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/BIT_STRING_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/C-RNTI.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/C-RNTI.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-CP-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-CP-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-UP-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-UP-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CUUPMeasurement-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CUUPMeasurement-Container.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CellResourceReportListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/CellResourceReportListItem.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/DU-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/DU-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/DU-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/DU-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/DU-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/DU-Usage-Report-UeResourceReportItem.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-ActionDefinition.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-ActionDefinition.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-EventTriggerDefinition.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-EventTriggerDefinition.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationHeader-Format1.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationHeader-Format1.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationHeader.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationHeader.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationMessage-Format1.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationMessage-Format1.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationMessage.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-IndicationMessage.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-RANfunction-Description.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/E2SM-KPM-RANfunction-Description.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/EPC-CUUP-PM-Format.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/EPC-CUUP-PM-Format.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/EPC-DU-PM-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/EPC-DU-PM-Container.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FGC-CUUP-PM-Format.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FGC-CUUP-PM-Format.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FGC-DU-PM-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FGC-DU-PM-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FQIPERSlicesPerPlmnListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FQIPERSlicesPerPlmnListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-CU-CP-Name.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-CU-CP-Name.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-CU-UP-Name.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-CU-UP-Name.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-DU-Name.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-DU-Name.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-Name.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GNB-Name.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-eNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-eNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-en-gNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-en-gNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-gNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-gNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-ng-eNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/GlobalKPMnode-ng-eNB-ID.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/INTEGER.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/INTEGER.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/INTEGER_oer.c (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NI-Type.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NI-Type.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NRCGI.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NRCGI.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NRCellIdentity.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NRCellIdentity.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NativeEnumerated.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NativeEnumerated.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NativeEnumerated_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NativeInteger.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NativeInteger.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/NativeInteger_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCTET_STRING.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCTET_STRING.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCTET_STRING_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCUCP-PF-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCUCP-PF-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCUUP-PF-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OCUUP-PF-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ODU-PF-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ODU-PF-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OPEN_TYPE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OPEN_TYPE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/OPEN_TYPE_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PF-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PF-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PF-ContainerListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PF-ContainerListItem.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PM-Containers-List.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PM-Containers-List.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PerQCIReportListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PerQCIReportListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PerQCIReportListItemFormat.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PerQCIReportListItemFormat.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PlmnID-List.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PlmnID-List.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PrintableString.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/PrintableString.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RAN-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RAN-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RANcallProcess-ID-string.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RANcallProcess-ID-string.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RANfunction-Name.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RANfunction-Name.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-EventTriggerStyle-List.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-EventTriggerStyle-List.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-Format-Type.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-Format-Type.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-ReportStyle-List.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-ReportStyle-List.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-Style-Name.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-Style-Name.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-Style-Type.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RIC-Style-Type.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RT-Period-IE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/RT-Period-IE.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/SNSSAI.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/SNSSAI.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ServedPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ServedPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/SlicePerPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/SlicePerPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/SliceToReportListItem.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/SliceToReportListItem.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/Timestamp.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/Timestamp.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/Trigger-ConditionIE-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/Trigger-ConditionIE-Item.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/UE-Report-Type.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/UE-Report-Type.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_SEQUENCE_OF.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_SEQUENCE_OF.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_SET_OF.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_SET_OF.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_application.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_application.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_bit_data.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_bit_data.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_codecs.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_codecs_prim.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_codecs_prim.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_internal.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_internal.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_ioc.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_random_fill.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_random_fill.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/asn_system.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ber_decoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ber_decoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ber_tlv_length.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ber_tlv_length.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ber_tlv_tag.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/ber_tlv_tag.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_CHOICE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_CHOICE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_CHOICE_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SEQUENCE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SEQUENCE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SEQUENCE_OF.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SEQUENCE_OF.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SEQUENCE_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SET_OF.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SET_OF.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_SET_OF_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_TYPE.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constr_TYPE.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constraints.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/constraints.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/der_encoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/der_encoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/oer_decoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/oer_decoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/oer_encoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/oer_encoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/oer_support.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/oer_support.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_decoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_decoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_encoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_encoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_opentype.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_opentype.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_support.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/per_support.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/xer_decoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/xer_decoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/xer_encoder.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/xer_encoder.h (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/xer_support.c (100%) rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm/src}/ASN1c/xer_support.h (100%) create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp create mode 100644 e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp rename e2sim/{e2apv1sim/e2sim => e2sm_examples/kpm_e2sm}/ueMeasReport.txt (100%) rename e2sim/{ => previous}/ASN1c/ABS-Status.c (100%) rename e2sim/{ => previous}/ASN1c/ABS-Status.h (100%) rename e2sim/{ => previous}/ASN1c/ABSInformation.c (100%) rename e2sim/{ => previous}/ASN1c/ABSInformation.h (100%) rename e2sim/{ => previous}/ASN1c/ABSInformationFDD.c (100%) rename e2sim/{ => previous}/ASN1c/ABSInformationFDD.h (100%) rename e2sim/{ => previous}/ASN1c/ABSInformationTDD.c (100%) rename e2sim/{ => previous}/ASN1c/ABSInformationTDD.h (100%) rename e2sim/{ => previous}/ASN1c/ANY.c (100%) rename e2sim/{ => previous}/ASN1c/ANY.h (100%) rename e2sim/{ => previous}/ASN1c/AS-SecurityInformation.c (100%) rename e2sim/{ => previous}/ASN1c/AS-SecurityInformation.h (100%) rename e2sim/{ => previous}/ASN1c/ActionParameter-ID.c (100%) rename e2sim/{ => previous}/ASN1c/ActionParameter-ID.h (100%) rename e2sim/{ => previous}/ASN1c/ActionParameter-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ActionParameter-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ActionParameter-Value.c (100%) rename e2sim/{ => previous}/ASN1c/ActionParameter-Value.h (100%) rename e2sim/{ => previous}/ASN1c/ActivatedCellList-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ActivatedCellList-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ActivatedCellList.c (100%) rename e2sim/{ => previous}/ASN1c/ActivatedCellList.h (100%) rename e2sim/{ => previous}/ASN1c/ActivatedNRCellList-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ActivatedNRCellList-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ActivatedNRCellList.c (100%) rename e2sim/{ => previous}/ASN1c/ActivatedNRCellList.h (100%) rename e2sim/{ => previous}/ASN1c/ActivationID.c (100%) rename e2sim/{ => previous}/ASN1c/ActivationID.h (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframe-Info.c (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframe-Info.h (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframeExtension-Info.c (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframeExtension-Info.h (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframePatterns.c (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframePatterns.h (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframePatternsExtension.c (100%) rename e2sim/{ => previous}/ASN1c/AdditionalSpecialSubframePatternsExtension.h (100%) rename e2sim/{ => previous}/ASN1c/AerialUEsubscriptionInformation.c (100%) rename e2sim/{ => previous}/ASN1c/AerialUEsubscriptionInformation.h (100%) rename e2sim/{ => previous}/ASN1c/AllocationAndRetentionPriority.c (100%) rename e2sim/{ => previous}/ASN1c/AllocationAndRetentionPriority.h (100%) rename e2sim/{ => previous}/ASN1c/AreaScopeOfMDT.c (100%) rename e2sim/{ => previous}/ASN1c/AreaScopeOfMDT.h (100%) rename e2sim/{ => previous}/ASN1c/AreaScopeOfQMC.c (100%) rename e2sim/{ => previous}/ASN1c/AreaScopeOfQMC.h (100%) rename e2sim/{ => previous}/ASN1c/BIT_STRING.c (100%) rename e2sim/{ => previous}/ASN1c/BIT_STRING.h (100%) rename e2sim/{ => previous}/ASN1c/BOOLEAN.c (100%) rename e2sim/{ => previous}/ASN1c/BOOLEAN.h (100%) rename e2sim/{ => previous}/ASN1c/BandInfo.c (100%) rename e2sim/{ => previous}/ASN1c/BandInfo.h (100%) rename e2sim/{ => previous}/ASN1c/BandwidthReducedSI.c (100%) rename e2sim/{ => previous}/ASN1c/BandwidthReducedSI.h (100%) rename e2sim/{ => previous}/ASN1c/BearerType.c (100%) rename e2sim/{ => previous}/ASN1c/BearerType.h (100%) rename e2sim/{ => previous}/ASN1c/BenefitMetric.c (100%) rename e2sim/{ => previous}/ASN1c/BenefitMetric.h (100%) rename e2sim/{ => previous}/ASN1c/BitRate.c (100%) rename e2sim/{ => previous}/ASN1c/BitRate.h (100%) rename e2sim/{ => previous}/ASN1c/BluetoothMeasConfig.c (100%) rename e2sim/{ => previous}/ASN1c/BluetoothMeasConfig.h (100%) rename e2sim/{ => previous}/ASN1c/BluetoothMeasConfigNameList.c (100%) rename e2sim/{ => previous}/ASN1c/BluetoothMeasConfigNameList.h (100%) rename e2sim/{ => previous}/ASN1c/BluetoothMeasurementConfiguration.c (100%) rename e2sim/{ => previous}/ASN1c/BluetoothMeasurementConfiguration.h (100%) rename e2sim/{ => previous}/ASN1c/BluetoothName.c (100%) rename e2sim/{ => previous}/ASN1c/BluetoothName.h (100%) rename e2sim/{ => previous}/ASN1c/BroadcastPLMNs-Item.c (100%) rename e2sim/{ => previous}/ASN1c/BroadcastPLMNs-Item.h (100%) rename e2sim/{ => previous}/ASN1c/CNTypeRestrictions.c (100%) rename e2sim/{ => previous}/ASN1c/CNTypeRestrictions.h (100%) rename e2sim/{ => previous}/ASN1c/CNTypeRestrictionsItem.c (100%) rename e2sim/{ => previous}/ASN1c/CNTypeRestrictionsItem.h (100%) rename e2sim/{ => previous}/ASN1c/COUNTValueExtended.c (100%) rename e2sim/{ => previous}/ASN1c/COUNTValueExtended.h (100%) rename e2sim/{ => previous}/ASN1c/COUNTvalue.c (100%) rename e2sim/{ => previous}/ASN1c/COUNTvalue.h (100%) rename e2sim/{ => previous}/ASN1c/COUNTvaluePDCP-SNlength18.c (100%) rename e2sim/{ => previous}/ASN1c/COUNTvaluePDCP-SNlength18.h (100%) rename e2sim/{ => previous}/ASN1c/CRNTI.c (100%) rename e2sim/{ => previous}/ASN1c/CRNTI.h (100%) rename e2sim/{ => previous}/ASN1c/CSG-Id.c (100%) rename e2sim/{ => previous}/ASN1c/CSG-Id.h (100%) rename e2sim/{ => previous}/ASN1c/CSGMembershipStatus.c (100%) rename e2sim/{ => previous}/ASN1c/CSGMembershipStatus.h (100%) rename e2sim/{ => previous}/ASN1c/CSIReportList.c (100%) rename e2sim/{ => previous}/ASN1c/CSIReportList.h (100%) rename e2sim/{ => previous}/ASN1c/CSIReportPerCSIProcess.c (100%) rename e2sim/{ => previous}/ASN1c/CSIReportPerCSIProcess.h (100%) rename e2sim/{ => previous}/ASN1c/CSIReportPerCSIProcessItem.c (100%) rename e2sim/{ => previous}/ASN1c/CSIReportPerCSIProcessItem.h (100%) rename e2sim/{ => previous}/ASN1c/CallProcess-ID.c (100%) rename e2sim/{ => previous}/ASN1c/CallProcess-ID.h (100%) rename e2sim/{ => previous}/ASN1c/CapacityValue.c (100%) rename e2sim/{ => previous}/ASN1c/CapacityValue.h (100%) rename e2sim/{ => previous}/ASN1c/Cause.c (100%) rename e2sim/{ => previous}/ASN1c/Cause.h (100%) rename e2sim/{ => previous}/ASN1c/CauseMisc.c (100%) rename e2sim/{ => previous}/ASN1c/CauseMisc.h (100%) rename e2sim/{ => previous}/ASN1c/CauseProtocol.c (100%) rename e2sim/{ => previous}/ASN1c/CauseProtocol.h (100%) rename e2sim/{ => previous}/ASN1c/CauseRIC.c (100%) rename e2sim/{ => previous}/ASN1c/CauseRIC.h (100%) rename e2sim/{ => previous}/ASN1c/CauseRadioNetwork.c (100%) rename e2sim/{ => previous}/ASN1c/CauseRadioNetwork.h (100%) rename e2sim/{ => previous}/ASN1c/CauseTransport.c (100%) rename e2sim/{ => previous}/ASN1c/CauseTransport.h (100%) rename e2sim/{ => previous}/ASN1c/Cell-Size.c (100%) rename e2sim/{ => previous}/ASN1c/Cell-Size.h (100%) rename e2sim/{ => previous}/ASN1c/CellActivationFailure.c (100%) rename e2sim/{ => previous}/ASN1c/CellActivationFailure.h (100%) rename e2sim/{ => previous}/ASN1c/CellActivationRequest.c (100%) rename e2sim/{ => previous}/ASN1c/CellActivationRequest.h (100%) rename e2sim/{ => previous}/ASN1c/CellActivationResponse.c (100%) rename e2sim/{ => previous}/ASN1c/CellActivationResponse.h (100%) rename e2sim/{ => previous}/ASN1c/CellAssistanceInformation.c (100%) rename e2sim/{ => previous}/ASN1c/CellAssistanceInformation.h (100%) rename e2sim/{ => previous}/ASN1c/CellBasedMDT.c (100%) rename e2sim/{ => previous}/ASN1c/CellBasedMDT.h (100%) rename e2sim/{ => previous}/ASN1c/CellBasedQMC.c (100%) rename e2sim/{ => previous}/ASN1c/CellBasedQMC.h (100%) rename e2sim/{ => previous}/ASN1c/CellCapacityClassValue.c (100%) rename e2sim/{ => previous}/ASN1c/CellCapacityClassValue.h (100%) rename e2sim/{ => previous}/ASN1c/CellDeploymentStatusIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/CellDeploymentStatusIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/CellIdListforMDT.c (100%) rename e2sim/{ => previous}/ASN1c/CellIdListforMDT.h (100%) rename e2sim/{ => previous}/ASN1c/CellIdListforQMC.c (100%) rename e2sim/{ => previous}/ASN1c/CellIdListforQMC.h (100%) rename e2sim/{ => previous}/ASN1c/CellInformation-Item.c (100%) rename e2sim/{ => previous}/ASN1c/CellInformation-Item.h (100%) rename e2sim/{ => previous}/ASN1c/CellInformation-List.c (100%) rename e2sim/{ => previous}/ASN1c/CellInformation-List.h (100%) rename e2sim/{ => previous}/ASN1c/CellMeasurementResult-Item.c (100%) rename e2sim/{ => previous}/ASN1c/CellMeasurementResult-Item.h (100%) rename e2sim/{ => previous}/ASN1c/CellMeasurementResult-List.c (100%) rename e2sim/{ => previous}/ASN1c/CellMeasurementResult-List.h (100%) rename e2sim/{ => previous}/ASN1c/CellReplacingInfo.c (100%) rename e2sim/{ => previous}/ASN1c/CellReplacingInfo.h (100%) rename e2sim/{ => previous}/ASN1c/CellReportingIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/CellReportingIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/CellToReport-Item.c (100%) rename e2sim/{ => previous}/ASN1c/CellToReport-Item.h (100%) rename e2sim/{ => previous}/ASN1c/CellToReport-List.c (100%) rename e2sim/{ => previous}/ASN1c/CellToReport-List.h (100%) rename e2sim/{ => previous}/ASN1c/CellType.c (100%) rename e2sim/{ => previous}/ASN1c/CellType.h (100%) rename e2sim/{ => previous}/ASN1c/CoMPHypothesisSet.c (100%) rename e2sim/{ => previous}/ASN1c/CoMPHypothesisSet.h (100%) rename e2sim/{ => previous}/ASN1c/CoMPHypothesisSetItem.c (100%) rename e2sim/{ => previous}/ASN1c/CoMPHypothesisSetItem.h (100%) rename e2sim/{ => previous}/ASN1c/CoMPInformation.c (100%) rename e2sim/{ => previous}/ASN1c/CoMPInformation.h (100%) rename e2sim/{ => previous}/ASN1c/CoMPInformationItem.c (100%) rename e2sim/{ => previous}/ASN1c/CoMPInformationItem.h (100%) rename e2sim/{ => previous}/ASN1c/CoMPInformationStartTime.c (100%) rename e2sim/{ => previous}/ASN1c/CoMPInformationStartTime.h (100%) rename e2sim/{ => previous}/ASN1c/CompleteFailureCauseInformation-Item.c (100%) rename e2sim/{ => previous}/ASN1c/CompleteFailureCauseInformation-Item.h (100%) rename e2sim/{ => previous}/ASN1c/CompleteFailureCauseInformation-List.c (100%) rename e2sim/{ => previous}/ASN1c/CompleteFailureCauseInformation-List.h (100%) rename e2sim/{ => previous}/ASN1c/CompositeAvailableCapacity.c (100%) rename e2sim/{ => previous}/ASN1c/CompositeAvailableCapacity.h (100%) rename e2sim/{ => previous}/ASN1c/CompositeAvailableCapacityGroup.c (100%) rename e2sim/{ => previous}/ASN1c/CompositeAvailableCapacityGroup.h (100%) rename e2sim/{ => previous}/ASN1c/Correlation-ID.c (100%) rename e2sim/{ => previous}/ASN1c/Correlation-ID.h (100%) rename e2sim/{ => previous}/ASN1c/CoverageModification-Item.c (100%) rename e2sim/{ => previous}/ASN1c/CoverageModification-Item.h (100%) rename e2sim/{ => previous}/ASN1c/CoverageModificationList.c (100%) rename e2sim/{ => previous}/ASN1c/CoverageModificationList.h (100%) rename e2sim/{ => previous}/ASN1c/Criticality.c (100%) rename e2sim/{ => previous}/ASN1c/Criticality.h (100%) rename e2sim/{ => previous}/ASN1c/CriticalityDiagnostics-IE-List.c (100%) rename e2sim/{ => previous}/ASN1c/CriticalityDiagnostics-IE-List.h (100%) rename e2sim/{ => previous}/ASN1c/CriticalityDiagnostics.c (100%) rename e2sim/{ => previous}/ASN1c/CriticalityDiagnostics.h (100%) rename e2sim/{ => previous}/ASN1c/CyclicPrefixDL.c (100%) rename e2sim/{ => previous}/ASN1c/CyclicPrefixDL.h (100%) rename e2sim/{ => previous}/ASN1c/CyclicPrefixUL.c (100%) rename e2sim/{ => previous}/ASN1c/CyclicPrefixUL.h (100%) rename e2sim/{ => previous}/ASN1c/DL-ABS-status.c (100%) rename e2sim/{ => previous}/ASN1c/DL-ABS-status.h (100%) rename e2sim/{ => previous}/ASN1c/DL-Forwarding.c (100%) rename e2sim/{ => previous}/ASN1c/DL-Forwarding.h (100%) rename e2sim/{ => previous}/ASN1c/DL-GBR-PRB-usage.c (100%) rename e2sim/{ => previous}/ASN1c/DL-GBR-PRB-usage.h (100%) rename e2sim/{ => previous}/ASN1c/DL-Total-PRB-usage.c (100%) rename e2sim/{ => previous}/ASN1c/DL-Total-PRB-usage.h (100%) rename e2sim/{ => previous}/ASN1c/DL-non-GBR-PRB-usage.c (100%) rename e2sim/{ => previous}/ASN1c/DL-non-GBR-PRB-usage.h (100%) rename e2sim/{ => previous}/ASN1c/DL-scheduling-PDCCH-CCE-usage.c (100%) rename e2sim/{ => previous}/ASN1c/DL-scheduling-PDCCH-CCE-usage.h (100%) rename e2sim/{ => previous}/ASN1c/DLResourceBitmapULandDLSharing.c (100%) rename e2sim/{ => previous}/ASN1c/DLResourceBitmapULandDLSharing.h (100%) rename e2sim/{ => previous}/ASN1c/DLResourcesULandDLSharing.c (100%) rename e2sim/{ => previous}/ASN1c/DLResourcesULandDLSharing.h (100%) rename e2sim/{ => previous}/ASN1c/DRB-ID.c (100%) rename e2sim/{ => previous}/ASN1c/DRB-ID.h (100%) rename e2sim/{ => previous}/ASN1c/DataForwardingAddressIndication.c (100%) rename e2sim/{ => previous}/ASN1c/DataForwardingAddressIndication.h (100%) rename e2sim/{ => previous}/ASN1c/DataTrafficResourceIndication.c (100%) rename e2sim/{ => previous}/ASN1c/DataTrafficResourceIndication.h (100%) rename e2sim/{ => previous}/ASN1c/DataTrafficResources.c (100%) rename e2sim/{ => previous}/ASN1c/DataTrafficResources.h (100%) rename e2sim/{ => previous}/ASN1c/DeactivationIndication.c (100%) rename e2sim/{ => previous}/ASN1c/DeactivationIndication.h (100%) rename e2sim/{ => previous}/ASN1c/DeliveryStatus.c (100%) rename e2sim/{ => previous}/ASN1c/DeliveryStatus.h (100%) rename e2sim/{ => previous}/ASN1c/DuplicationActivation.c (100%) rename e2sim/{ => previous}/ASN1c/DuplicationActivation.h (100%) rename e2sim/{ => previous}/ASN1c/DynamicDLTransmissionInformation.c (100%) rename e2sim/{ => previous}/ASN1c/DynamicDLTransmissionInformation.h (100%) rename e2sim/{ => previous}/ASN1c/DynamicNAICSInformation.c (100%) rename e2sim/{ => previous}/ASN1c/DynamicNAICSInformation.h (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-ID.c (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-ID.h (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-Level-QoS-Parameters.c (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-Level-QoS-Parameters.h (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RAB-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABUsageReport-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABUsageReport-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABUsageReportList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABUsageReportList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-DataForwardingAddress-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-DataForwardingAddress-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-DataForwardingAddress-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-DataForwardingAddress-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToCounterCheck-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToCounterCheck-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToCounterCheckItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToCounterCheckItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToStatusTransfer-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-SubjectToStatusTransfer-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-List-ModReq.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-List-ModReq.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-ModReqItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-ModReqItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-List-ModReq.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-List-ModReq.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-ModReqItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-ModReqItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-List-ModReq.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-List-ModReq.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-List-RelConf.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-List-RelConf.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-List-RelReq.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-List-RelReq.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqd.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqd.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelConfItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelConfItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelReqItem.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-RelReqItem.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-List.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-List.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c (100%) rename e2sim/{ => previous}/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h (100%) rename e2sim/{ => previous}/ASN1c/E2AP-PDU.c (100%) rename e2sim/{ => previous}/ASN1c/E2AP-PDU.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-actionDefinition.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-actionDefinition.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-callProcessID.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-callProcessID.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-controlHeader.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-controlHeader.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-controlMessage.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-controlMessage.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-indicationHeader.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-indicationHeader.h (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-indicationMessage.c (100%) rename e2sim/{ => previous}/ASN1c/E2SM-gNB-X2-indicationMessage.h (100%) rename e2sim/{ => previous}/ASN1c/EARFCN.c (100%) rename e2sim/{ => previous}/ASN1c/EARFCN.h (100%) rename e2sim/{ => previous}/ASN1c/EARFCNExtension.c (100%) rename e2sim/{ => previous}/ASN1c/EARFCNExtension.h (100%) rename e2sim/{ => previous}/ASN1c/ECGI.c (100%) rename e2sim/{ => previous}/ASN1c/ECGI.h (100%) rename e2sim/{ => previous}/ASN1c/EN-DC-ResourceConfiguration.c (100%) rename e2sim/{ => previous}/ASN1c/EN-DC-ResourceConfiguration.h (100%) rename e2sim/{ => previous}/ASN1c/ENB-ID.c (100%) rename e2sim/{ => previous}/ASN1c/ENB-ID.h (100%) rename e2sim/{ => previous}/ASN1c/ENBConfigurationUpdate.c (100%) rename e2sim/{ => previous}/ASN1c/ENBConfigurationUpdate.h (100%) rename e2sim/{ => previous}/ASN1c/ENBConfigurationUpdateAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/ENBConfigurationUpdateAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/ENBConfigurationUpdateFailure.c (100%) rename e2sim/{ => previous}/ASN1c/ENBConfigurationUpdateFailure.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCCellActivationFailure.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCCellActivationFailure.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCCellActivationRequest.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCCellActivationRequest.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCCellActivationResponse.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCCellActivationResponse.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCConfigurationUpdate.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCConfigurationUpdate.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCConfigurationUpdateAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCConfigurationUpdateAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCConfigurationUpdateFailure.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCConfigurationUpdateFailure.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCPartialResetConfirm.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCPartialResetConfirm.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCPartialResetRequired.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCPartialResetRequired.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2RemovalFailure.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2RemovalFailure.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2RemovalRequest.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2RemovalRequest.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2RemovalResponse.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2RemovalResponse.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2SetupFailure.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2SetupFailure.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2SetupRequest.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2SetupRequest.h (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2SetupResponse.c (100%) rename e2sim/{ => previous}/ASN1c/ENDCX2SetupResponse.h (100%) rename e2sim/{ => previous}/ASN1c/EPLMNs.c (100%) rename e2sim/{ => previous}/ASN1c/EPLMNs.h (100%) rename e2sim/{ => previous}/ASN1c/ERABActivityNotifyItem.c (100%) rename e2sim/{ => previous}/ASN1c/ERABActivityNotifyItem.h (100%) rename e2sim/{ => previous}/ASN1c/ERABActivityNotifyItemList.c (100%) rename e2sim/{ => previous}/ASN1c/ERABActivityNotifyItemList.h (100%) rename e2sim/{ => previous}/ASN1c/EUTRA-Mode-Info.c (100%) rename e2sim/{ => previous}/ASN1c/EUTRA-Mode-Info.h (100%) rename e2sim/{ => previous}/ASN1c/EUTRANCellIdentifier.c (100%) rename e2sim/{ => previous}/ASN1c/EUTRANCellIdentifier.h (100%) rename e2sim/{ => previous}/ASN1c/EUTRANRCellResourceCoordinationRequest.c (100%) rename e2sim/{ => previous}/ASN1c/EUTRANRCellResourceCoordinationRequest.h (100%) rename e2sim/{ => previous}/ASN1c/EUTRANRCellResourceCoordinationResponse.c (100%) rename e2sim/{ => previous}/ASN1c/EUTRANRCellResourceCoordinationResponse.h (100%) rename e2sim/{ => previous}/ASN1c/EUTRANTraceID.c (100%) rename e2sim/{ => previous}/ASN1c/EUTRANTraceID.h (100%) rename e2sim/{ => previous}/ASN1c/EncryptionAlgorithms.c (100%) rename e2sim/{ => previous}/ASN1c/EncryptionAlgorithms.h (100%) rename e2sim/{ => previous}/ASN1c/EnhancedRNTP.c (100%) rename e2sim/{ => previous}/ASN1c/EnhancedRNTP.h (100%) rename e2sim/{ => previous}/ASN1c/EnhancedRNTPStartTime.c (100%) rename e2sim/{ => previous}/ASN1c/EnhancedRNTPStartTime.h (100%) rename e2sim/{ => previous}/ASN1c/ErrorIndication.c (100%) rename e2sim/{ => previous}/ASN1c/ErrorIndication.h (100%) rename e2sim/{ => previous}/ASN1c/EventType.c (100%) rename e2sim/{ => previous}/ASN1c/EventType.h (100%) rename e2sim/{ => previous}/ASN1c/ExpectedActivityPeriod.c (100%) rename e2sim/{ => previous}/ASN1c/ExpectedActivityPeriod.h (100%) rename e2sim/{ => previous}/ASN1c/ExpectedHOInterval.c (100%) rename e2sim/{ => previous}/ASN1c/ExpectedHOInterval.h (100%) rename e2sim/{ => previous}/ASN1c/ExpectedIdlePeriod.c (100%) rename e2sim/{ => previous}/ASN1c/ExpectedIdlePeriod.h (100%) rename e2sim/{ => previous}/ASN1c/ExpectedUEActivityBehaviour.c (100%) rename e2sim/{ => previous}/ASN1c/ExpectedUEActivityBehaviour.h (100%) rename e2sim/{ => previous}/ASN1c/ExpectedUEBehaviour.c (100%) rename e2sim/{ => previous}/ASN1c/ExpectedUEBehaviour.h (100%) rename e2sim/{ => previous}/ASN1c/ExtendedBitRate.c (100%) rename e2sim/{ => previous}/ASN1c/ExtendedBitRate.h (100%) rename e2sim/{ => previous}/ASN1c/ExtendedULInterferenceOverloadInfo.c (100%) rename e2sim/{ => previous}/ASN1c/ExtendedULInterferenceOverloadInfo.h (100%) rename e2sim/{ => previous}/ASN1c/FDD-Info.c (100%) rename e2sim/{ => previous}/ASN1c/FDD-Info.h (100%) rename e2sim/{ => previous}/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c (100%) rename e2sim/{ => previous}/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h (100%) rename e2sim/{ => previous}/ASN1c/FDD-InfoServedNRCell-Information.c (100%) rename e2sim/{ => previous}/ASN1c/FDD-InfoServedNRCell-Information.h (100%) rename e2sim/{ => previous}/ASN1c/FiveGS-TAC.c (100%) rename e2sim/{ => previous}/ASN1c/FiveGS-TAC.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenInterRATs.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenInterRATs.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenLACs.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenLACs.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenLAs-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenLAs-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenLAs.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenLAs.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenTACs.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenTACs.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenTAs-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenTAs-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenTAs.c (100%) rename e2sim/{ => previous}/ASN1c/ForbiddenTAs.h (100%) rename e2sim/{ => previous}/ASN1c/Fourframes.c (100%) rename e2sim/{ => previous}/ASN1c/Fourframes.h (100%) rename e2sim/{ => previous}/ASN1c/FreqBandIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/FreqBandIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/FreqBandIndicatorPriority.c (100%) rename e2sim/{ => previous}/ASN1c/FreqBandIndicatorPriority.h (100%) rename e2sim/{ => previous}/ASN1c/FreqBandNrItem.c (100%) rename e2sim/{ => previous}/ASN1c/FreqBandNrItem.h (100%) rename e2sim/{ => previous}/ASN1c/GBR-QosInformation.c (100%) rename e2sim/{ => previous}/ASN1c/GBR-QosInformation.h (100%) rename e2sim/{ => previous}/ASN1c/GNB-ID.c (100%) rename e2sim/{ => previous}/ASN1c/GNB-ID.h (100%) rename e2sim/{ => previous}/ASN1c/GNBOverloadInformation.c (100%) rename e2sim/{ => previous}/ASN1c/GNBOverloadInformation.h (100%) rename e2sim/{ => previous}/ASN1c/GNBStatusIndication.c (100%) rename e2sim/{ => previous}/ASN1c/GNBStatusIndication.h (100%) rename e2sim/{ => previous}/ASN1c/GTP-TEI.c (100%) rename e2sim/{ => previous}/ASN1c/GTP-TEI.h (100%) rename e2sim/{ => previous}/ASN1c/GTPtunnelEndpoint.c (100%) rename e2sim/{ => previous}/ASN1c/GTPtunnelEndpoint.h (100%) rename e2sim/{ => previous}/ASN1c/GU-Group-ID.c (100%) rename e2sim/{ => previous}/ASN1c/GU-Group-ID.h (100%) rename e2sim/{ => previous}/ASN1c/GUGroupIDList.c (100%) rename e2sim/{ => previous}/ASN1c/GUGroupIDList.h (100%) rename e2sim/{ => previous}/ASN1c/GUMMEI.c (100%) rename e2sim/{ => previous}/ASN1c/GUMMEI.h (100%) rename e2sim/{ => previous}/ASN1c/GlobalENB-ID.c (100%) rename e2sim/{ => previous}/ASN1c/GlobalENB-ID.h (100%) rename e2sim/{ => previous}/ASN1c/GlobalGNB-ID.c (100%) rename e2sim/{ => previous}/ASN1c/GlobalGNB-ID.h (100%) rename e2sim/{ => previous}/ASN1c/HFN.c (100%) rename e2sim/{ => previous}/ASN1c/HFN.h (100%) rename e2sim/{ => previous}/ASN1c/HFNModified.c (100%) rename e2sim/{ => previous}/ASN1c/HFNModified.h (100%) rename e2sim/{ => previous}/ASN1c/HFNforPDCP-SNlength18.c (100%) rename e2sim/{ => previous}/ASN1c/HFNforPDCP-SNlength18.h (100%) rename e2sim/{ => previous}/ASN1c/HWLoadIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/HWLoadIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverCancel.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverCancel.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverPreparationFailure.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverPreparationFailure.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverReport.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverReport.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverReportType.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverReportType.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverRequest.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverRequest.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverRequestAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverRequestAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/HandoverRestrictionList.c (100%) rename e2sim/{ => previous}/ASN1c/HandoverRestrictionList.h (100%) rename e2sim/{ => previous}/ASN1c/INTEGER.c (100%) rename e2sim/{ => previous}/ASN1c/INTEGER.h (100%) rename e2sim/{ => previous}/ASN1c/InitiatingMessage.c (100%) rename e2sim/{ => previous}/ASN1c/InitiatingMessage.h (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EndcConfigUpdate.c (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EndcConfigUpdate.h (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EndcX2Removal.c (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EndcX2Removal.h (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EndcX2Setup.c (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EndcX2Setup.h (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c (100%) rename e2sim/{ => previous}/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h (100%) rename e2sim/{ => previous}/ASN1c/IntegrityProtectionAlgorithms.c (100%) rename e2sim/{ => previous}/ASN1c/IntegrityProtectionAlgorithms.h (100%) rename e2sim/{ => previous}/ASN1c/Interface-ID.c (100%) rename e2sim/{ => previous}/ASN1c/Interface-ID.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceDirection.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceDirection.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceMessage.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceMessage.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceMessageType.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceMessageType.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-ID.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-ID.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-Item.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-Item.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-Test.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-Test.h (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-Value.c (100%) rename e2sim/{ => previous}/ASN1c/InterfaceProtocolIE-Value.h (100%) rename e2sim/{ => previous}/ASN1c/InterfacesToTrace.c (100%) rename e2sim/{ => previous}/ASN1c/InterfacesToTrace.h (100%) rename e2sim/{ => previous}/ASN1c/InvokeIndication.c (100%) rename e2sim/{ => previous}/ASN1c/InvokeIndication.h (100%) rename e2sim/{ => previous}/ASN1c/Key-eNodeB-Star.c (100%) rename e2sim/{ => previous}/ASN1c/Key-eNodeB-Star.h (100%) rename e2sim/{ => previous}/ASN1c/LAC.c (100%) rename e2sim/{ => previous}/ASN1c/LAC.h (100%) rename e2sim/{ => previous}/ASN1c/LCID.c (100%) rename e2sim/{ => previous}/ASN1c/LCID.h (100%) rename e2sim/{ => previous}/ASN1c/LHN-ID.c (100%) rename e2sim/{ => previous}/ASN1c/LHN-ID.h (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedCell-Item.c (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedCell-Item.h (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedEUTRANCellInformation.c (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedEUTRANCellInformation.h (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedGERANCellInformation.c (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedGERANCellInformation.h (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedNGRANCellInformation.c (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedNGRANCellInformation.h (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedUTRANCellInformation.c (100%) rename e2sim/{ => previous}/ASN1c/LastVisitedUTRANCellInformation.h (100%) rename e2sim/{ => previous}/ASN1c/Limited-list.c (100%) rename e2sim/{ => previous}/ASN1c/Limited-list.h (100%) rename e2sim/{ => previous}/ASN1c/Links-to-log.c (100%) rename e2sim/{ => previous}/ASN1c/Links-to-log.h (100%) rename e2sim/{ => previous}/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c (100%) rename e2sim/{ => previous}/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h (100%) rename e2sim/{ => previous}/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c (100%) rename e2sim/{ => previous}/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h (100%) rename e2sim/{ => previous}/ASN1c/ListofEUTRACellsinNRCoordinationReq.c (100%) rename e2sim/{ => previous}/ASN1c/ListofEUTRACellsinNRCoordinationReq.h (100%) rename e2sim/{ => previous}/ASN1c/ListofNRCellsinNRCoordinationReq.c (100%) rename e2sim/{ => previous}/ASN1c/ListofNRCellsinNRCoordinationReq.h (100%) rename e2sim/{ => previous}/ASN1c/ListofNRCellsinNRCoordinationResp.c (100%) rename e2sim/{ => previous}/ASN1c/ListofNRCellsinNRCoordinationResp.h (100%) rename e2sim/{ => previous}/ASN1c/LoadIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/LoadIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/LoadInformation.c (100%) rename e2sim/{ => previous}/ASN1c/LoadInformation.h (100%) rename e2sim/{ => previous}/ASN1c/LocationReportingInformation.c (100%) rename e2sim/{ => previous}/ASN1c/LocationReportingInformation.h (100%) rename e2sim/{ => previous}/ASN1c/M1PeriodicReporting.c (100%) rename e2sim/{ => previous}/ASN1c/M1PeriodicReporting.h (100%) rename e2sim/{ => previous}/ASN1c/M1ReportingTrigger.c (100%) rename e2sim/{ => previous}/ASN1c/M1ReportingTrigger.h (100%) rename e2sim/{ => previous}/ASN1c/M1ThresholdEventA2.c (100%) rename e2sim/{ => previous}/ASN1c/M1ThresholdEventA2.h (100%) rename e2sim/{ => previous}/ASN1c/M3Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/M3Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/M3period.c (100%) rename e2sim/{ => previous}/ASN1c/M3period.h (100%) rename e2sim/{ => previous}/ASN1c/M4Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/M4Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/M4period.c (100%) rename e2sim/{ => previous}/ASN1c/M4period.h (100%) rename e2sim/{ => previous}/ASN1c/M5Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/M5Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/M5period.c (100%) rename e2sim/{ => previous}/ASN1c/M5period.h (100%) rename e2sim/{ => previous}/ASN1c/M6Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/M6Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/M6delay-threshold.c (100%) rename e2sim/{ => previous}/ASN1c/M6delay-threshold.h (100%) rename e2sim/{ => previous}/ASN1c/M6report-interval.c (100%) rename e2sim/{ => previous}/ASN1c/M6report-interval.h (100%) rename e2sim/{ => previous}/ASN1c/M7Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/M7Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/M7period.c (100%) rename e2sim/{ => previous}/ASN1c/M7period.h (100%) rename e2sim/{ => previous}/ASN1c/MBMS-Service-Area-Identity-List.c (100%) rename e2sim/{ => previous}/ASN1c/MBMS-Service-Area-Identity-List.h (100%) rename e2sim/{ => previous}/ASN1c/MBMS-Service-Area-Identity.c (100%) rename e2sim/{ => previous}/ASN1c/MBMS-Service-Area-Identity.h (100%) rename e2sim/{ => previous}/ASN1c/MBSFN-Subframe-Info.c (100%) rename e2sim/{ => previous}/ASN1c/MBSFN-Subframe-Info.h (100%) rename e2sim/{ => previous}/ASN1c/MBSFN-Subframe-Infolist.c (100%) rename e2sim/{ => previous}/ASN1c/MBSFN-Subframe-Infolist.h (100%) rename e2sim/{ => previous}/ASN1c/MDT-Activation.c (100%) rename e2sim/{ => previous}/ASN1c/MDT-Activation.h (100%) rename e2sim/{ => previous}/ASN1c/MDT-Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/MDT-Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/MDT-Location-Info.c (100%) rename e2sim/{ => previous}/ASN1c/MDT-Location-Info.h (100%) rename e2sim/{ => previous}/ASN1c/MDTPLMNList.c (100%) rename e2sim/{ => previous}/ASN1c/MDTPLMNList.h (100%) rename e2sim/{ => previous}/ASN1c/MME-Code.c (100%) rename e2sim/{ => previous}/ASN1c/MME-Code.h (100%) rename e2sim/{ => previous}/ASN1c/MME-Group-ID.c (100%) rename e2sim/{ => previous}/ASN1c/MME-Group-ID.h (100%) rename e2sim/{ => previous}/ASN1c/MakeBeforeBreakIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/MakeBeforeBreakIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/Makefile.am.asn1convert (100%) rename e2sim/{ => previous}/ASN1c/Makefile.am.libasncodec (100%) rename e2sim/{ => previous}/ASN1c/ManagementBasedMDTallowed.c (100%) rename e2sim/{ => previous}/ASN1c/ManagementBasedMDTallowed.h (100%) rename e2sim/{ => previous}/ASN1c/Masked-IMEISV.c (100%) rename e2sim/{ => previous}/ASN1c/Masked-IMEISV.h (100%) rename e2sim/{ => previous}/ASN1c/MeNBCoordinationAssistanceInformation.c (100%) rename e2sim/{ => previous}/ASN1c/MeNBCoordinationAssistanceInformation.h (100%) rename e2sim/{ => previous}/ASN1c/MeNBResourceCoordinationInformation.c (100%) rename e2sim/{ => previous}/ASN1c/MeNBResourceCoordinationInformation.h (100%) rename e2sim/{ => previous}/ASN1c/MeNBtoSeNBContainer.c (100%) rename e2sim/{ => previous}/ASN1c/MeNBtoSeNBContainer.h (100%) rename e2sim/{ => previous}/ASN1c/MeNBtoSgNBContainer.c (100%) rename e2sim/{ => previous}/ASN1c/MeNBtoSgNBContainer.h (100%) rename e2sim/{ => previous}/ASN1c/Measurement-ID.c (100%) rename e2sim/{ => previous}/ASN1c/Measurement-ID.h (100%) rename e2sim/{ => previous}/ASN1c/MeasurementFailureCause-Item.c (100%) rename e2sim/{ => previous}/ASN1c/MeasurementFailureCause-Item.h (100%) rename e2sim/{ => previous}/ASN1c/MeasurementFailureCause-List.c (100%) rename e2sim/{ => previous}/ASN1c/MeasurementFailureCause-List.h (100%) rename e2sim/{ => previous}/ASN1c/MeasurementInitiationResult-Item.c (100%) rename e2sim/{ => previous}/ASN1c/MeasurementInitiationResult-Item.h (100%) rename e2sim/{ => previous}/ASN1c/MeasurementInitiationResult-List.c (100%) rename e2sim/{ => previous}/ASN1c/MeasurementInitiationResult-List.h (100%) rename e2sim/{ => previous}/ASN1c/MeasurementThresholdA2.c (100%) rename e2sim/{ => previous}/ASN1c/MeasurementThresholdA2.h (100%) rename e2sim/{ => previous}/ASN1c/MeasurementsToActivate.c (100%) rename e2sim/{ => previous}/ASN1c/MeasurementsToActivate.h (100%) rename e2sim/{ => previous}/ASN1c/MobilityChangeAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/MobilityChangeAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/MobilityChangeFailure.c (100%) rename e2sim/{ => previous}/ASN1c/MobilityChangeFailure.h (100%) rename e2sim/{ => previous}/ASN1c/MobilityChangeRequest.c (100%) rename e2sim/{ => previous}/ASN1c/MobilityChangeRequest.h (100%) rename e2sim/{ => previous}/ASN1c/MobilityInformation.c (100%) rename e2sim/{ => previous}/ASN1c/MobilityInformation.h (100%) rename e2sim/{ => previous}/ASN1c/MobilityParametersInformation.c (100%) rename e2sim/{ => previous}/ASN1c/MobilityParametersInformation.h (100%) rename e2sim/{ => previous}/ASN1c/MobilityParametersModificationRange.c (100%) rename e2sim/{ => previous}/ASN1c/MobilityParametersModificationRange.h (100%) rename e2sim/{ => previous}/ASN1c/MultibandInfoList.c (100%) rename e2sim/{ => previous}/ASN1c/MultibandInfoList.h (100%) rename e2sim/{ => previous}/ASN1c/NR-TxBW.c (100%) rename e2sim/{ => previous}/ASN1c/NR-TxBW.h (100%) rename e2sim/{ => previous}/ASN1c/NRCGI.c (100%) rename e2sim/{ => previous}/ASN1c/NRCGI.h (100%) rename e2sim/{ => previous}/ASN1c/NRCellIdentifier.c (100%) rename e2sim/{ => previous}/ASN1c/NRCellIdentifier.h (100%) rename e2sim/{ => previous}/ASN1c/NRFreqInfo.c (100%) rename e2sim/{ => previous}/ASN1c/NRFreqInfo.h (100%) rename e2sim/{ => previous}/ASN1c/NRNRB.c (100%) rename e2sim/{ => previous}/ASN1c/NRNRB.h (100%) rename e2sim/{ => previous}/ASN1c/NRNeighbour-Information.c (100%) rename e2sim/{ => previous}/ASN1c/NRNeighbour-Information.h (100%) rename e2sim/{ => previous}/ASN1c/NRPCI.c (100%) rename e2sim/{ => previous}/ASN1c/NRPCI.h (100%) rename e2sim/{ => previous}/ASN1c/NRS-NSSS-PowerOffset.c (100%) rename e2sim/{ => previous}/ASN1c/NRS-NSSS-PowerOffset.h (100%) rename e2sim/{ => previous}/ASN1c/NRSCS.c (100%) rename e2sim/{ => previous}/ASN1c/NRSCS.h (100%) rename e2sim/{ => previous}/ASN1c/NRUESecurityCapabilities.c (100%) rename e2sim/{ => previous}/ASN1c/NRUESecurityCapabilities.h (100%) rename e2sim/{ => previous}/ASN1c/NRencryptionAlgorithms.c (100%) rename e2sim/{ => previous}/ASN1c/NRencryptionAlgorithms.h (100%) rename e2sim/{ => previous}/ASN1c/NRintegrityProtectionAlgorithms.c (100%) rename e2sim/{ => previous}/ASN1c/NRintegrityProtectionAlgorithms.h (100%) rename e2sim/{ => previous}/ASN1c/NRrestrictionin5GS.c (100%) rename e2sim/{ => previous}/ASN1c/NRrestrictionin5GS.h (100%) rename e2sim/{ => previous}/ASN1c/NRrestrictioninEPSasSecondaryRAT.c (100%) rename e2sim/{ => previous}/ASN1c/NRrestrictioninEPSasSecondaryRAT.h (100%) rename e2sim/{ => previous}/ASN1c/NSSS-NumOccasionDifferentPrecoder.c (100%) rename e2sim/{ => previous}/ASN1c/NSSS-NumOccasionDifferentPrecoder.h (100%) rename e2sim/{ => previous}/ASN1c/NULL.c (100%) rename e2sim/{ => previous}/ASN1c/NULL.h (100%) rename e2sim/{ => previous}/ASN1c/NativeEnumerated.c (100%) rename e2sim/{ => previous}/ASN1c/NativeEnumerated.h (100%) rename e2sim/{ => previous}/ASN1c/NativeInteger.c (100%) rename e2sim/{ => previous}/ASN1c/NativeInteger.h (100%) rename e2sim/{ => previous}/ASN1c/Neighbour-Information.c (100%) rename e2sim/{ => previous}/ASN1c/Neighbour-Information.h (100%) rename e2sim/{ => previous}/ASN1c/NewDRBIDrequest.c (100%) rename e2sim/{ => previous}/ASN1c/NewDRBIDrequest.h (100%) rename e2sim/{ => previous}/ASN1c/NextHopChainingCount.c (100%) rename e2sim/{ => previous}/ASN1c/NextHopChainingCount.h (100%) rename e2sim/{ => previous}/ASN1c/Number-of-Antennaports.c (100%) rename e2sim/{ => previous}/ASN1c/Number-of-Antennaports.h (100%) rename e2sim/{ => previous}/ASN1c/OBJECT_IDENTIFIER.c (100%) rename e2sim/{ => previous}/ASN1c/OBJECT_IDENTIFIER.h (100%) rename e2sim/{ => previous}/ASN1c/OCTET_STRING.c (100%) rename e2sim/{ => previous}/ASN1c/OCTET_STRING.h (100%) rename e2sim/{ => previous}/ASN1c/OPEN_TYPE.c (100%) rename e2sim/{ => previous}/ASN1c/OPEN_TYPE.h (100%) rename e2sim/{ => previous}/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c (100%) rename e2sim/{ => previous}/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h (100%) rename e2sim/{ => previous}/ASN1c/Old-ECGIs.c (100%) rename e2sim/{ => previous}/ASN1c/Old-ECGIs.h (100%) rename e2sim/{ => previous}/ASN1c/Oneframe.c (100%) rename e2sim/{ => previous}/ASN1c/Oneframe.h (100%) rename e2sim/{ => previous}/ASN1c/PA-Values.c (100%) rename e2sim/{ => previous}/ASN1c/PA-Values.h (100%) rename e2sim/{ => previous}/ASN1c/PCI.c (100%) rename e2sim/{ => previous}/ASN1c/PCI.h (100%) rename e2sim/{ => previous}/ASN1c/PDCP-SN.c (100%) rename e2sim/{ => previous}/ASN1c/PDCP-SN.h (100%) rename e2sim/{ => previous}/ASN1c/PDCP-SNExtended.c (100%) rename e2sim/{ => previous}/ASN1c/PDCP-SNExtended.h (100%) rename e2sim/{ => previous}/ASN1c/PDCP-SNlength18.c (100%) rename e2sim/{ => previous}/ASN1c/PDCP-SNlength18.h (100%) rename e2sim/{ => previous}/ASN1c/PDCPChangeIndication.c (100%) rename e2sim/{ => previous}/ASN1c/PDCPChangeIndication.h (100%) rename e2sim/{ => previous}/ASN1c/PDCPSnLength.c (100%) rename e2sim/{ => previous}/ASN1c/PDCPSnLength.h (100%) rename e2sim/{ => previous}/ASN1c/PLMN-Identity.c (100%) rename e2sim/{ => previous}/ASN1c/PLMN-Identity.h (100%) rename e2sim/{ => previous}/ASN1c/PLMNAreaBasedQMC.c (100%) rename e2sim/{ => previous}/ASN1c/PLMNAreaBasedQMC.h (100%) rename e2sim/{ => previous}/ASN1c/PLMNListforQMC.c (100%) rename e2sim/{ => previous}/ASN1c/PLMNListforQMC.h (100%) rename e2sim/{ => previous}/ASN1c/PRACH-Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/PRACH-Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/Packet-LossRate.c (100%) rename e2sim/{ => previous}/ASN1c/Packet-LossRate.h (100%) rename e2sim/{ => previous}/ASN1c/PartialSuccessIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/PartialSuccessIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/PedestrianUE.c (100%) rename e2sim/{ => previous}/ASN1c/PedestrianUE.h (100%) rename e2sim/{ => previous}/ASN1c/Port-Number.c (100%) rename e2sim/{ => previous}/ASN1c/Port-Number.h (100%) rename e2sim/{ => previous}/ASN1c/Pre-emptionCapability.c (100%) rename e2sim/{ => previous}/ASN1c/Pre-emptionCapability.h (100%) rename e2sim/{ => previous}/ASN1c/Pre-emptionVulnerability.c (100%) rename e2sim/{ => previous}/ASN1c/Pre-emptionVulnerability.h (100%) rename e2sim/{ => previous}/ASN1c/Presence.c (100%) rename e2sim/{ => previous}/ASN1c/Presence.h (100%) rename e2sim/{ => previous}/ASN1c/PrintableString.c (100%) rename e2sim/{ => previous}/ASN1c/PrintableString.h (100%) rename e2sim/{ => previous}/ASN1c/PriorityLevel.c (100%) rename e2sim/{ => previous}/ASN1c/PriorityLevel.h (100%) rename e2sim/{ => previous}/ASN1c/PrivateIE-Container.c (100%) rename e2sim/{ => previous}/ASN1c/PrivateIE-Container.h (100%) rename e2sim/{ => previous}/ASN1c/PrivateIE-Field.c (100%) rename e2sim/{ => previous}/ASN1c/PrivateIE-Field.h (100%) rename e2sim/{ => previous}/ASN1c/PrivateIE-ID.c (100%) rename e2sim/{ => previous}/ASN1c/PrivateIE-ID.h (100%) rename e2sim/{ => previous}/ASN1c/PrivateMessage.c (100%) rename e2sim/{ => previous}/ASN1c/PrivateMessage.h (100%) rename e2sim/{ => previous}/ASN1c/ProSeAuthorized.c (100%) rename e2sim/{ => previous}/ASN1c/ProSeAuthorized.h (100%) rename e2sim/{ => previous}/ASN1c/ProSeDirectCommunication.c (100%) rename e2sim/{ => previous}/ASN1c/ProSeDirectCommunication.h (100%) rename e2sim/{ => previous}/ASN1c/ProSeDirectDiscovery.c (100%) rename e2sim/{ => previous}/ASN1c/ProSeDirectDiscovery.h (100%) rename e2sim/{ => previous}/ASN1c/ProSeUEtoNetworkRelaying.c (100%) rename e2sim/{ => previous}/ASN1c/ProSeUEtoNetworkRelaying.h (100%) rename e2sim/{ => previous}/ASN1c/ProcedureCode.c (100%) rename e2sim/{ => previous}/ASN1c/ProcedureCode.h (100%) rename e2sim/{ => previous}/ASN1c/ProtectedEUTRAResourceIndication.c (100%) rename e2sim/{ => previous}/ASN1c/ProtectedEUTRAResourceIndication.h (100%) rename e2sim/{ => previous}/ASN1c/ProtectedFootprintTimePattern.c (100%) rename e2sim/{ => previous}/ASN1c/ProtectedFootprintTimePattern.h (100%) rename e2sim/{ => previous}/ASN1c/ProtectedResourceList-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ProtectedResourceList-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ProtectedResourceList.c (100%) rename e2sim/{ => previous}/ASN1c/ProtectedResourceList.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolExtensionContainer.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolExtensionContainer.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolExtensionField.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolExtensionField.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-Container.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-Container.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ContainerList.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ContainerList.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ContainerPair.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ContainerPair.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ContainerPairList.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ContainerPairList.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-Field.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-Field.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-FieldPair.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-FieldPair.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ID.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-ID.h (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-Single-Container.c (100%) rename e2sim/{ => previous}/ASN1c/ProtocolIE-Single-Container.h (100%) rename e2sim/{ => previous}/ASN1c/QCI.c (100%) rename e2sim/{ => previous}/ASN1c/QCI.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunction-Item.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunction-Item.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionDefinition.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionDefinition.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionID-Item.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionID-Item.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionID.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionID.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionIDcause-Item.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionIDcause-Item.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctions-List.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctions-List.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionsID-List.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionsID-List.h (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionsIDcause-List.c (100%) rename e2sim/{ => previous}/ASN1c/RANfunctionsIDcause-List.h (100%) rename e2sim/{ => previous}/ASN1c/RICaction-Admitted-Item.c (100%) rename e2sim/{ => previous}/ASN1c/RICaction-Admitted-Item.h (100%) rename e2sim/{ => previous}/ASN1c/RICaction-Admitted-List.c (100%) rename e2sim/{ => previous}/ASN1c/RICaction-Admitted-List.h (100%) rename e2sim/{ => previous}/ASN1c/RICaction-NotAdmitted-Item.c (100%) rename e2sim/{ => previous}/ASN1c/RICaction-NotAdmitted-Item.h (100%) rename e2sim/{ => previous}/ASN1c/RICaction-NotAdmitted-List.c (100%) rename e2sim/{ => previous}/ASN1c/RICaction-NotAdmitted-List.h (100%) rename e2sim/{ => previous}/ASN1c/RICaction-ToBeSetup-Item.c (100%) rename e2sim/{ => previous}/ASN1c/RICaction-ToBeSetup-Item.h (100%) rename e2sim/{ => previous}/ASN1c/RICactionDefinition.c (100%) rename e2sim/{ => previous}/ASN1c/RICactionDefinition.h (100%) rename e2sim/{ => previous}/ASN1c/RICactionID.c (100%) rename e2sim/{ => previous}/ASN1c/RICactionID.h (100%) rename e2sim/{ => previous}/ASN1c/RICactionType.c (100%) rename e2sim/{ => previous}/ASN1c/RICactionType.h (100%) rename e2sim/{ => previous}/ASN1c/RICactions-ToBeSetup-List.c (100%) rename e2sim/{ => previous}/ASN1c/RICactions-ToBeSetup-List.h (100%) rename e2sim/{ => previous}/ASN1c/RICcallProcessID.c (100%) rename e2sim/{ => previous}/ASN1c/RICcallProcessID.h (100%) rename e2sim/{ => previous}/ASN1c/RICcause.c (100%) rename e2sim/{ => previous}/ASN1c/RICcause.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolAckRequest.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolAckRequest.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolFailure.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolFailure.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolHeader.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolHeader.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolMessage.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolMessage.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolRequest.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolRequest.h (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolStatus.c (100%) rename e2sim/{ => previous}/ASN1c/RICcontrolStatus.h (100%) rename e2sim/{ => previous}/ASN1c/RICeventTriggerDefinition.c (100%) rename e2sim/{ => previous}/ASN1c/RICeventTriggerDefinition.h (100%) rename e2sim/{ => previous}/ASN1c/RICindication.c (100%) rename e2sim/{ => previous}/ASN1c/RICindication.h (100%) rename e2sim/{ => previous}/ASN1c/RICindicationHeader.c (100%) rename e2sim/{ => previous}/ASN1c/RICindicationHeader.h (100%) rename e2sim/{ => previous}/ASN1c/RICindicationMessage.c (100%) rename e2sim/{ => previous}/ASN1c/RICindicationMessage.h (100%) rename e2sim/{ => previous}/ASN1c/RICindicationSN.c (100%) rename e2sim/{ => previous}/ASN1c/RICindicationSN.h (100%) rename e2sim/{ => previous}/ASN1c/RICindicationType.c (100%) rename e2sim/{ => previous}/ASN1c/RICindicationType.h (100%) rename e2sim/{ => previous}/ASN1c/RICrequestID.c (100%) rename e2sim/{ => previous}/ASN1c/RICrequestID.h (100%) rename e2sim/{ => previous}/ASN1c/RICserviceQuery.c (100%) rename e2sim/{ => previous}/ASN1c/RICserviceQuery.h (100%) rename e2sim/{ => previous}/ASN1c/RICserviceUpdate.c (100%) rename e2sim/{ => previous}/ASN1c/RICserviceUpdate.h (100%) rename e2sim/{ => previous}/ASN1c/RICserviceUpdateAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/RICserviceUpdateAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/RICserviceUpdateFailure.c (100%) rename e2sim/{ => previous}/ASN1c/RICserviceUpdateFailure.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscription.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscription.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionDeleteFailure.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionDeleteFailure.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionDeleteRequest.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionDeleteRequest.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionDeleteResponse.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionDeleteResponse.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionFailure.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionFailure.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionRequest.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionRequest.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionResponse.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubscriptionResponse.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubsequentAction.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubsequentAction.h (100%) rename e2sim/{ => previous}/ASN1c/RICsubsequentActionType.c (100%) rename e2sim/{ => previous}/ASN1c/RICsubsequentActionType.h (100%) rename e2sim/{ => previous}/ASN1c/RICtimeToWait.c (100%) rename e2sim/{ => previous}/ASN1c/RICtimeToWait.h (100%) rename e2sim/{ => previous}/ASN1c/RLC-Status.c (100%) rename e2sim/{ => previous}/ASN1c/RLC-Status.h (100%) rename e2sim/{ => previous}/ASN1c/RLCMode.c (100%) rename e2sim/{ => previous}/ASN1c/RLCMode.h (100%) rename e2sim/{ => previous}/ASN1c/RLFIndication.c (100%) rename e2sim/{ => previous}/ASN1c/RLFIndication.h (100%) rename e2sim/{ => previous}/ASN1c/RNL-Header.c (100%) rename e2sim/{ => previous}/ASN1c/RNL-Header.h (100%) rename e2sim/{ => previous}/ASN1c/RNTP-Threshold.c (100%) rename e2sim/{ => previous}/ASN1c/RNTP-Threshold.h (100%) rename e2sim/{ => previous}/ASN1c/RRC-Config-Ind.c (100%) rename e2sim/{ => previous}/ASN1c/RRC-Config-Ind.h (100%) rename e2sim/{ => previous}/ASN1c/RRC-Context.c (100%) rename e2sim/{ => previous}/ASN1c/RRC-Context.h (100%) rename e2sim/{ => previous}/ASN1c/RRCConnReestabIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/RRCConnReestabIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/RRCConnSetupIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/RRCConnSetupIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/RRCContainer.c (100%) rename e2sim/{ => previous}/ASN1c/RRCContainer.h (100%) rename e2sim/{ => previous}/ASN1c/RRCTransfer.c (100%) rename e2sim/{ => previous}/ASN1c/RRCTransfer.h (100%) rename e2sim/{ => previous}/ASN1c/RSRPMRList.c (100%) rename e2sim/{ => previous}/ASN1c/RSRPMRList.h (100%) rename e2sim/{ => previous}/ASN1c/RSRPMeasurementResult.c (100%) rename e2sim/{ => previous}/ASN1c/RSRPMeasurementResult.h (100%) rename e2sim/{ => previous}/ASN1c/RadioResourceStatus.c (100%) rename e2sim/{ => previous}/ASN1c/RadioResourceStatus.h (100%) rename e2sim/{ => previous}/ASN1c/RadioframeAllocationOffset.c (100%) rename e2sim/{ => previous}/ASN1c/RadioframeAllocationOffset.h (100%) rename e2sim/{ => previous}/ASN1c/RadioframeAllocationPeriod.c (100%) rename e2sim/{ => previous}/ASN1c/RadioframeAllocationPeriod.h (100%) rename e2sim/{ => previous}/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c (100%) rename e2sim/{ => previous}/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h (100%) rename e2sim/{ => previous}/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c (100%) rename e2sim/{ => previous}/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h (100%) rename e2sim/{ => previous}/ASN1c/ReceiveStatusofULPDCPSDUs.c (100%) rename e2sim/{ => previous}/ASN1c/ReceiveStatusofULPDCPSDUs.h (100%) rename e2sim/{ => previous}/ASN1c/Reestablishment-Indication.c (100%) rename e2sim/{ => previous}/ASN1c/Reestablishment-Indication.h (100%) rename e2sim/{ => previous}/ASN1c/Registration-Request.c (100%) rename e2sim/{ => previous}/ASN1c/Registration-Request.h (100%) rename e2sim/{ => previous}/ASN1c/RelativeNarrowbandTxPower.c (100%) rename e2sim/{ => previous}/ASN1c/RelativeNarrowbandTxPower.h (100%) rename e2sim/{ => previous}/ASN1c/ReplacingCellsList-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ReplacingCellsList-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ReplacingCellsList.c (100%) rename e2sim/{ => previous}/ASN1c/ReplacingCellsList.h (100%) rename e2sim/{ => previous}/ASN1c/ReportAmountMDT.c (100%) rename e2sim/{ => previous}/ASN1c/ReportAmountMDT.h (100%) rename e2sim/{ => previous}/ASN1c/ReportArea.c (100%) rename e2sim/{ => previous}/ASN1c/ReportArea.h (100%) rename e2sim/{ => previous}/ASN1c/ReportCharacteristics.c (100%) rename e2sim/{ => previous}/ASN1c/ReportCharacteristics.h (100%) rename e2sim/{ => previous}/ASN1c/ReportIntervalMDT.c (100%) rename e2sim/{ => previous}/ASN1c/ReportIntervalMDT.h (100%) rename e2sim/{ => previous}/ASN1c/ReportingPeriodicity.c (100%) rename e2sim/{ => previous}/ASN1c/ReportingPeriodicity.h (100%) rename e2sim/{ => previous}/ASN1c/ReportingPeriodicityCSIR.c (100%) rename e2sim/{ => previous}/ASN1c/ReportingPeriodicityCSIR.h (100%) rename e2sim/{ => previous}/ASN1c/ReportingPeriodicityRSRPMR.c (100%) rename e2sim/{ => previous}/ASN1c/ReportingPeriodicityRSRPMR.h (100%) rename e2sim/{ => previous}/ASN1c/ReservedSubframePattern.c (100%) rename e2sim/{ => previous}/ASN1c/ReservedSubframePattern.h (100%) rename e2sim/{ => previous}/ASN1c/ResetRequest.c (100%) rename e2sim/{ => previous}/ASN1c/ResetRequest.h (100%) rename e2sim/{ => previous}/ASN1c/ResetResponse.c (100%) rename e2sim/{ => previous}/ASN1c/ResetResponse.h (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusFailure.c (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusFailure.h (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusRequest.c (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusRequest.h (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusResponse.c (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusResponse.h (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusUpdate.c (100%) rename e2sim/{ => previous}/ASN1c/ResourceStatusUpdate.h (100%) rename e2sim/{ => previous}/ASN1c/ResourceType.c (100%) rename e2sim/{ => previous}/ASN1c/ResourceType.h (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EndcConfigUpdate.c (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EndcConfigUpdate.h (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EndcX2Removal.c (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EndcX2Removal.h (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EndcX2Setup.c (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EndcX2Setup.h (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c (100%) rename e2sim/{ => previous}/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSeNBReconfComp.c (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSeNBReconfComp.h (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSgNBReconfComp.c (100%) rename e2sim/{ => previous}/ASN1c/ResponseInformationSgNBReconfComp.h (100%) rename e2sim/{ => previous}/ASN1c/ResumeID.c (100%) rename e2sim/{ => previous}/ASN1c/ResumeID.h (100%) rename e2sim/{ => previous}/ASN1c/RetrieveUEContextFailure.c (100%) rename e2sim/{ => previous}/ASN1c/RetrieveUEContextFailure.h (100%) rename e2sim/{ => previous}/ASN1c/RetrieveUEContextRequest.c (100%) rename e2sim/{ => previous}/ASN1c/RetrieveUEContextRequest.h (100%) rename e2sim/{ => previous}/ASN1c/RetrieveUEContextResponse.c (100%) rename e2sim/{ => previous}/ASN1c/RetrieveUEContextResponse.h (100%) rename e2sim/{ => previous}/ASN1c/S1TNLLoadIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/S1TNLLoadIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/SCGChangeIndication.c (100%) rename e2sim/{ => previous}/ASN1c/SCGChangeIndication.h (100%) rename e2sim/{ => previous}/ASN1c/SCGConfigurationQuery.c (100%) rename e2sim/{ => previous}/ASN1c/SCGConfigurationQuery.h (100%) rename e2sim/{ => previous}/ASN1c/SGNB-Addition-Trigger-Ind.c (100%) rename e2sim/{ => previous}/ASN1c/SGNB-Addition-Trigger-Ind.h (100%) rename e2sim/{ => previous}/ASN1c/SIPTOBearerDeactivationIndication.c (100%) rename e2sim/{ => previous}/ASN1c/SIPTOBearerDeactivationIndication.h (100%) rename e2sim/{ => previous}/ASN1c/SNStatusTransfer.c (100%) rename e2sim/{ => previous}/ASN1c/SNStatusTransfer.h (100%) rename e2sim/{ => previous}/ASN1c/SRBType.c (100%) rename e2sim/{ => previous}/ASN1c/SRBType.h (100%) rename e2sim/{ => previous}/ASN1c/SRVCCOperationPossible.c (100%) rename e2sim/{ => previous}/ASN1c/SRVCCOperationPossible.h (100%) rename e2sim/{ => previous}/ASN1c/SULInformation.c (100%) rename e2sim/{ => previous}/ASN1c/SULInformation.h (100%) rename e2sim/{ => previous}/ASN1c/ScheduledCommunicationTime.c (100%) rename e2sim/{ => previous}/ASN1c/ScheduledCommunicationTime.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBAdditionRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBAdditionRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBAdditionRequestAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBAdditionRequestAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBAdditionRequestReject.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBAdditionRequestReject.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBCounterCheckRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBCounterCheckRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationConfirm.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationConfirm.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRefuse.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRefuse.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequestAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequestAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequestReject.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequestReject.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequired.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBModificationRequired.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBReconfigurationComplete.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBReconfigurationComplete.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBReleaseConfirm.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBReleaseConfirm.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBReleaseRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBReleaseRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBReleaseRequired.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBReleaseRequired.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBSecurityKey.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBSecurityKey.h (100%) rename e2sim/{ => previous}/ASN1c/SeNBtoMeNBContainer.c (100%) rename e2sim/{ => previous}/ASN1c/SeNBtoMeNBContainer.h (100%) rename e2sim/{ => previous}/ASN1c/SecondaryRATDataUsageReport.c (100%) rename e2sim/{ => previous}/ASN1c/SecondaryRATDataUsageReport.h (100%) rename e2sim/{ => previous}/ASN1c/SecondaryRATUsageReport-Item.c (100%) rename e2sim/{ => previous}/ASN1c/SecondaryRATUsageReport-Item.h (100%) rename e2sim/{ => previous}/ASN1c/SecondaryRATUsageReportList.c (100%) rename e2sim/{ => previous}/ASN1c/SecondaryRATUsageReportList.h (100%) rename e2sim/{ => previous}/ASN1c/ServedCell-Information.c (100%) rename e2sim/{ => previous}/ASN1c/ServedCell-Information.h (100%) rename e2sim/{ => previous}/ASN1c/ServedCells.c (100%) rename e2sim/{ => previous}/ASN1c/ServedCells.h (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToActivate-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToActivate-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToActivate.c (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToActivate.h (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToModify-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToModify-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToModify.c (100%) rename e2sim/{ => previous}/ASN1c/ServedCellsToModify.h (100%) rename e2sim/{ => previous}/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c (100%) rename e2sim/{ => previous}/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h (100%) rename e2sim/{ => previous}/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c (100%) rename e2sim/{ => previous}/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h (100%) rename e2sim/{ => previous}/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c (100%) rename e2sim/{ => previous}/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCell-Information.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCell-Information.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCellsToActivate-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCellsToActivate-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCellsToActivate.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCellsToActivate.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCellsToModify-Item.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRCellsToModify-Item.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRcellsENDCX2ManagementList.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRcellsENDCX2ManagementList.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h (100%) rename e2sim/{ => previous}/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c (100%) rename e2sim/{ => previous}/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h (100%) rename e2sim/{ => previous}/ASN1c/ServiceType.c (100%) rename e2sim/{ => previous}/ASN1c/ServiceType.h (100%) rename e2sim/{ => previous}/ASN1c/SgNB-UE-X2AP-ID.c (100%) rename e2sim/{ => previous}/ASN1c/SgNB-UE-X2AP-ID.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBActivityNotification.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBActivityNotification.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBAdditionRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBAdditionRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBAdditionRequestAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBAdditionRequestAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBAdditionRequestReject.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBAdditionRequestReject.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBChangeConfirm.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBChangeConfirm.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBChangeRefuse.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBChangeRefuse.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBChangeRequired.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBChangeRequired.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBCoordinationAssistanceInformation.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBCoordinationAssistanceInformation.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBCounterCheckRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBCounterCheckRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationConfirm.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationConfirm.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRefuse.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRefuse.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequestAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequestAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequestReject.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequestReject.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequired.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBModificationRequired.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBReconfigurationComplete.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBReconfigurationComplete.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseConfirm.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseConfirm.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequest.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequest.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequestAcknowledge.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequestAcknowledge.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequestReject.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequestReject.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequired.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBReleaseRequired.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBResourceCoordinationInformation.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBResourceCoordinationInformation.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBSecurityKey.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBSecurityKey.h (100%) rename e2sim/{ => previous}/ASN1c/SgNBtoMeNBContainer.c (100%) rename e2sim/{ => previous}/ASN1c/SgNBtoMeNBContainer.h (100%) rename e2sim/{ => previous}/ASN1c/SharedResourceType.c (100%) rename e2sim/{ => previous}/ASN1c/SharedResourceType.h (100%) rename e2sim/{ => previous}/ASN1c/ShortMAC-I.c (100%) rename e2sim/{ => previous}/ASN1c/ShortMAC-I.h (100%) rename e2sim/{ => previous}/ASN1c/SourceOfUEActivityBehaviourInformation.c (100%) rename e2sim/{ => previous}/ASN1c/SourceOfUEActivityBehaviourInformation.h (100%) rename e2sim/{ => previous}/ASN1c/SpecialSubframe-Info.c (100%) rename e2sim/{ => previous}/ASN1c/SpecialSubframe-Info.h (100%) rename e2sim/{ => previous}/ASN1c/SpecialSubframePatterns.c (100%) rename e2sim/{ => previous}/ASN1c/SpecialSubframePatterns.h (100%) rename e2sim/{ => previous}/ASN1c/SpectrumSharingGroupID.c (100%) rename e2sim/{ => previous}/ASN1c/SpectrumSharingGroupID.h (100%) rename e2sim/{ => previous}/ASN1c/SplitSRB.c (100%) rename e2sim/{ => previous}/ASN1c/SplitSRB.h (100%) rename e2sim/{ => previous}/ASN1c/SplitSRBs.c (100%) rename e2sim/{ => previous}/ASN1c/SplitSRBs.h (100%) rename e2sim/{ => previous}/ASN1c/Style-ID.c (100%) rename e2sim/{ => previous}/ASN1c/Style-ID.h (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQI.c (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQI.h (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQICodeword0.c (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQICodeword0.h (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQICodeword1.c (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQICodeword1.h (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQIItem.c (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQIItem.h (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQIList.c (100%) rename e2sim/{ => previous}/ASN1c/SubbandCQIList.h (100%) rename e2sim/{ => previous}/ASN1c/SubbandSize.c (100%) rename e2sim/{ => previous}/ASN1c/SubbandSize.h (100%) rename e2sim/{ => previous}/ASN1c/SubframeAllocation.c (100%) rename e2sim/{ => previous}/ASN1c/SubframeAllocation.h (100%) rename e2sim/{ => previous}/ASN1c/SubframeAssignment.c (100%) rename e2sim/{ => previous}/ASN1c/SubframeAssignment.h (100%) rename e2sim/{ => previous}/ASN1c/SubframeType.c (100%) rename e2sim/{ => previous}/ASN1c/SubframeType.h (100%) rename e2sim/{ => previous}/ASN1c/SubscriberProfileIDforRFP.c (100%) rename e2sim/{ => previous}/ASN1c/SubscriberProfileIDforRFP.h (100%) rename e2sim/{ => previous}/ASN1c/Subscription-Based-UE-DifferentiationInfo.c (100%) rename e2sim/{ => previous}/ASN1c/Subscription-Based-UE-DifferentiationInfo.h (100%) rename e2sim/{ => previous}/ASN1c/SuccessfulOutcome.c (100%) rename e2sim/{ => previous}/ASN1c/SuccessfulOutcome.h (100%) rename e2sim/{ => previous}/ASN1c/SupportedSULFreqBandItem.c (100%) rename e2sim/{ => previous}/ASN1c/SupportedSULFreqBandItem.h (100%) rename e2sim/{ => previous}/ASN1c/TABasedMDT.c (100%) rename e2sim/{ => previous}/ASN1c/TABasedMDT.h (100%) rename e2sim/{ => previous}/ASN1c/TABasedQMC.c (100%) rename e2sim/{ => previous}/ASN1c/TABasedQMC.h (100%) rename e2sim/{ => previous}/ASN1c/TAC.c (100%) rename e2sim/{ => previous}/ASN1c/TAC.h (100%) rename e2sim/{ => previous}/ASN1c/TAI-Item.c (100%) rename e2sim/{ => previous}/ASN1c/TAI-Item.h (100%) rename e2sim/{ => previous}/ASN1c/TAIBasedMDT.c (100%) rename e2sim/{ => previous}/ASN1c/TAIBasedMDT.h (100%) rename e2sim/{ => previous}/ASN1c/TAIBasedQMC.c (100%) rename e2sim/{ => previous}/ASN1c/TAIBasedQMC.h (100%) rename e2sim/{ => previous}/ASN1c/TAIListforMDT.c (100%) rename e2sim/{ => previous}/ASN1c/TAIListforMDT.h (100%) rename e2sim/{ => previous}/ASN1c/TAIListforQMC.c (100%) rename e2sim/{ => previous}/ASN1c/TAIListforQMC.h (100%) rename e2sim/{ => previous}/ASN1c/TAListforMDT.c (100%) rename e2sim/{ => previous}/ASN1c/TAListforMDT.h (100%) rename e2sim/{ => previous}/ASN1c/TAListforQMC.c (100%) rename e2sim/{ => previous}/ASN1c/TAListforQMC.h (100%) rename e2sim/{ => previous}/ASN1c/TDD-Info.c (100%) rename e2sim/{ => previous}/ASN1c/TDD-Info.h (100%) rename e2sim/{ => previous}/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c (100%) rename e2sim/{ => previous}/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h (100%) rename e2sim/{ => previous}/ASN1c/TDD-InfoServedNRCell-Information.c (100%) rename e2sim/{ => previous}/ASN1c/TDD-InfoServedNRCell-Information.h (100%) rename e2sim/{ => previous}/ASN1c/TargetCellInUTRAN.c (100%) rename e2sim/{ => previous}/ASN1c/TargetCellInUTRAN.h (100%) rename e2sim/{ => previous}/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c (100%) rename e2sim/{ => previous}/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h (100%) rename e2sim/{ => previous}/ASN1c/Threshold-RSRP.c (100%) rename e2sim/{ => previous}/ASN1c/Threshold-RSRP.h (100%) rename e2sim/{ => previous}/ASN1c/Threshold-RSRQ.c (100%) rename e2sim/{ => previous}/ASN1c/Threshold-RSRQ.h (100%) rename e2sim/{ => previous}/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c (100%) rename e2sim/{ => previous}/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h (100%) rename e2sim/{ => previous}/ASN1c/Time-UE-StayedInCell.c (100%) rename e2sim/{ => previous}/ASN1c/Time-UE-StayedInCell.h (100%) rename e2sim/{ => previous}/ASN1c/TimeStamp.c (100%) rename e2sim/{ => previous}/ASN1c/TimeStamp.h (100%) rename e2sim/{ => previous}/ASN1c/TimeToWait.c (100%) rename e2sim/{ => previous}/ASN1c/TimeToWait.h (100%) rename e2sim/{ => previous}/ASN1c/TraceActivation.c (100%) rename e2sim/{ => previous}/ASN1c/TraceActivation.h (100%) rename e2sim/{ => previous}/ASN1c/TraceCollectionEntityIPAddress.c (100%) rename e2sim/{ => previous}/ASN1c/TraceCollectionEntityIPAddress.h (100%) rename e2sim/{ => previous}/ASN1c/TraceDepth.c (100%) rename e2sim/{ => previous}/ASN1c/TraceDepth.h (100%) rename e2sim/{ => previous}/ASN1c/Transmission-Bandwidth.c (100%) rename e2sim/{ => previous}/ASN1c/Transmission-Bandwidth.h (100%) rename e2sim/{ => previous}/ASN1c/TransportLayerAddress.c (100%) rename e2sim/{ => previous}/ASN1c/TransportLayerAddress.h (100%) rename e2sim/{ => previous}/ASN1c/TriggeringMessage.c (100%) rename e2sim/{ => previous}/ASN1c/TriggeringMessage.h (100%) rename e2sim/{ => previous}/ASN1c/TunnelInformation.c (100%) rename e2sim/{ => previous}/ASN1c/TunnelInformation.h (100%) rename e2sim/{ => previous}/ASN1c/TypeOfError.c (100%) rename e2sim/{ => previous}/ASN1c/TypeOfError.h (100%) rename e2sim/{ => previous}/ASN1c/TypeOfMessage.c (100%) rename e2sim/{ => previous}/ASN1c/TypeOfMessage.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformation-SgNBModReq.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformation-SgNBModReq.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformation.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformation.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformationRetrieve.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformationRetrieve.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformationSeNBModReq.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextInformationSeNBModReq.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextKeptIndicator.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextKeptIndicator.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextReferenceAtSeNB.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextReferenceAtSeNB.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextReferenceAtSgNB.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextReferenceAtSgNB.h (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextReferenceAtWT.c (100%) rename e2sim/{ => previous}/ASN1c/UE-ContextReferenceAtWT.h (100%) rename e2sim/{ => previous}/ASN1c/UE-HistoryInformation.c (100%) rename e2sim/{ => previous}/ASN1c/UE-HistoryInformation.h (100%) rename e2sim/{ => previous}/ASN1c/UE-HistoryInformationFromTheUE.c (100%) rename e2sim/{ => previous}/ASN1c/UE-HistoryInformationFromTheUE.h (100%) rename e2sim/{ => previous}/ASN1c/UE-RLF-Report-Container-for-extended-bands.c (100%) rename e2sim/{ => previous}/ASN1c/UE-RLF-Report-Container-for-extended-bands.h (100%) rename e2sim/{ => previous}/ASN1c/UE-RLF-Report-Container.c (100%) rename e2sim/{ => previous}/ASN1c/UE-RLF-Report-Container.h (100%) rename e2sim/{ => previous}/ASN1c/UE-S1AP-ID.c (100%) rename e2sim/{ => previous}/ASN1c/UE-S1AP-ID.h (100%) rename e2sim/{ => previous}/ASN1c/UE-X2AP-ID-Extension.c (100%) rename e2sim/{ => previous}/ASN1c/UE-X2AP-ID-Extension.h (100%) rename e2sim/{ => previous}/ASN1c/UE-X2AP-ID.c (100%) rename e2sim/{ => previous}/ASN1c/UE-X2AP-ID.h (100%) rename e2sim/{ => previous}/ASN1c/UEAggregateMaximumBitRate.c (100%) rename e2sim/{ => previous}/ASN1c/UEAggregateMaximumBitRate.h (100%) rename e2sim/{ => previous}/ASN1c/UEAppLayerMeasConfig.c (100%) rename e2sim/{ => previous}/ASN1c/UEAppLayerMeasConfig.h (100%) rename e2sim/{ => previous}/ASN1c/UEContextRelease.c (100%) rename e2sim/{ => previous}/ASN1c/UEContextRelease.h (100%) rename e2sim/{ => previous}/ASN1c/UEID.c (100%) rename e2sim/{ => previous}/ASN1c/UEID.h (100%) rename e2sim/{ => previous}/ASN1c/UENRMeasurement.c (100%) rename e2sim/{ => previous}/ASN1c/UENRMeasurement.h (100%) rename e2sim/{ => previous}/ASN1c/UESecurityCapabilities.c (100%) rename e2sim/{ => previous}/ASN1c/UESecurityCapabilities.h (100%) rename e2sim/{ => previous}/ASN1c/UESidelinkAggregateMaximumBitRate.c (100%) rename e2sim/{ => previous}/ASN1c/UESidelinkAggregateMaximumBitRate.h (100%) rename e2sim/{ => previous}/ASN1c/UEsToBeResetList-Item.c (100%) rename e2sim/{ => previous}/ASN1c/UEsToBeResetList-Item.h (100%) rename e2sim/{ => previous}/ASN1c/UEsToBeResetList.c (100%) rename e2sim/{ => previous}/ASN1c/UEsToBeResetList.h (100%) rename e2sim/{ => previous}/ASN1c/UL-GBR-PRB-usage.c (100%) rename e2sim/{ => previous}/ASN1c/UL-GBR-PRB-usage.h (100%) rename e2sim/{ => previous}/ASN1c/UL-HighInterferenceIndication.c (100%) rename e2sim/{ => previous}/ASN1c/UL-HighInterferenceIndication.h (100%) rename e2sim/{ => previous}/ASN1c/UL-HighInterferenceIndicationInfo-Item.c (100%) rename e2sim/{ => previous}/ASN1c/UL-HighInterferenceIndicationInfo-Item.h (100%) rename e2sim/{ => previous}/ASN1c/UL-HighInterferenceIndicationInfo.c (100%) rename e2sim/{ => previous}/ASN1c/UL-HighInterferenceIndicationInfo.h (100%) rename e2sim/{ => previous}/ASN1c/UL-InterferenceOverloadIndication-Item.c (100%) rename e2sim/{ => previous}/ASN1c/UL-InterferenceOverloadIndication-Item.h (100%) rename e2sim/{ => previous}/ASN1c/UL-InterferenceOverloadIndication.c (100%) rename e2sim/{ => previous}/ASN1c/UL-InterferenceOverloadIndication.h (100%) rename e2sim/{ => previous}/ASN1c/UL-Total-PRB-usage.c (100%) rename e2sim/{ => previous}/ASN1c/UL-Total-PRB-usage.h (100%) rename e2sim/{ => previous}/ASN1c/UL-UE-Configuration.c (100%) rename e2sim/{ => previous}/ASN1c/UL-UE-Configuration.h (100%) rename e2sim/{ => previous}/ASN1c/UL-non-GBR-PRB-usage.c (100%) rename e2sim/{ => previous}/ASN1c/UL-non-GBR-PRB-usage.h (100%) rename e2sim/{ => previous}/ASN1c/UL-scheduling-PDCCH-CCE-usage.c (100%) rename e2sim/{ => previous}/ASN1c/UL-scheduling-PDCCH-CCE-usage.h (100%) rename e2sim/{ => previous}/ASN1c/ULConfiguration.c (100%) rename e2sim/{ => previous}/ASN1c/ULConfiguration.h (100%) rename e2sim/{ => previous}/ASN1c/ULOnlySharing.c (100%) rename e2sim/{ => previous}/ASN1c/ULOnlySharing.h (100%) rename e2sim/{ => previous}/ASN1c/ULResourceBitmapULandDLSharing.c (100%) rename e2sim/{ => previous}/ASN1c/ULResourceBitmapULandDLSharing.h (100%) rename e2sim/{ => previous}/ASN1c/ULResourcesULandDLSharing.c (100%) rename e2sim/{ => previous}/ASN1c/ULResourcesULandDLSharing.h (100%) rename e2sim/{ => previous}/ASN1c/ULandDLSharing.c (100%) rename e2sim/{ => previous}/ASN1c/ULandDLSharing.h (100%) rename e2sim/{ => previous}/ASN1c/UnsuccessfulOutcome.c (100%) rename e2sim/{ => previous}/ASN1c/UnsuccessfulOutcome.h (100%) rename e2sim/{ => previous}/ASN1c/UsableABSInformation.c (100%) rename e2sim/{ => previous}/ASN1c/UsableABSInformation.h (100%) rename e2sim/{ => previous}/ASN1c/UsableABSInformationFDD.c (100%) rename e2sim/{ => previous}/ASN1c/UsableABSInformationFDD.h (100%) rename e2sim/{ => previous}/ASN1c/UsableABSInformationTDD.c (100%) rename e2sim/{ => previous}/ASN1c/UsableABSInformationTDD.h (100%) rename e2sim/{ => previous}/ASN1c/UserPlaneTrafficActivityReport.c (100%) rename e2sim/{ => previous}/ASN1c/UserPlaneTrafficActivityReport.h (100%) rename e2sim/{ => previous}/ASN1c/V2XServicesAuthorized.c (100%) rename e2sim/{ => previous}/ASN1c/V2XServicesAuthorized.h (100%) rename e2sim/{ => previous}/ASN1c/VehicleUE.c (100%) rename e2sim/{ => previous}/ASN1c/VehicleUE.h (100%) rename e2sim/{ => previous}/ASN1c/WLANMeasConfig.c (100%) rename e2sim/{ => previous}/ASN1c/WLANMeasConfig.h (100%) rename e2sim/{ => previous}/ASN1c/WLANMeasConfigNameList.c (100%) rename e2sim/{ => previous}/ASN1c/WLANMeasConfigNameList.h (100%) rename e2sim/{ => previous}/ASN1c/WLANMeasurementConfiguration.c (100%) rename e2sim/{ => previous}/ASN1c/WLANMeasurementConfiguration.h (100%) rename e2sim/{ => previous}/ASN1c/WLANName.c (100%) rename e2sim/{ => previous}/ASN1c/WLANName.h (100%) rename e2sim/{ => previous}/ASN1c/WT-UE-XwAP-ID.c (100%) rename e2sim/{ => previous}/ASN1c/WT-UE-XwAP-ID.h (100%) rename e2sim/{ => previous}/ASN1c/WTID-Long-Type2.c (100%) rename e2sim/{ => previous}/ASN1c/WTID-Long-Type2.h (100%) rename e2sim/{ => previous}/ASN1c/WTID-Type1.c (100%) rename e2sim/{ => previous}/ASN1c/WTID-Type1.h (100%) rename e2sim/{ => previous}/ASN1c/WTID.c (100%) rename e2sim/{ => previous}/ASN1c/WTID.h (100%) rename e2sim/{ => previous}/ASN1c/WidebandCQI.c (100%) rename e2sim/{ => previous}/ASN1c/WidebandCQI.h (100%) rename e2sim/{ => previous}/ASN1c/WidebandCQICodeword1.c (100%) rename e2sim/{ => previous}/ASN1c/WidebandCQICodeword1.h (100%) rename e2sim/{ => previous}/ASN1c/X2AP-Message.c (100%) rename e2sim/{ => previous}/ASN1c/X2AP-Message.h (100%) rename e2sim/{ => previous}/ASN1c/X2APMessageTransfer.c (100%) rename e2sim/{ => previous}/ASN1c/X2APMessageTransfer.h (100%) rename e2sim/{ => previous}/ASN1c/X2BenefitValue.c (100%) rename e2sim/{ => previous}/ASN1c/X2BenefitValue.h (100%) rename e2sim/{ => previous}/ASN1c/X2Release.c (100%) rename e2sim/{ => previous}/ASN1c/X2Release.h (100%) rename e2sim/{ => previous}/ASN1c/X2RemovalFailure.c (100%) rename e2sim/{ => previous}/ASN1c/X2RemovalFailure.h (100%) rename e2sim/{ => previous}/ASN1c/X2RemovalRequest.c (100%) rename e2sim/{ => previous}/ASN1c/X2RemovalRequest.h (100%) rename e2sim/{ => previous}/ASN1c/X2RemovalResponse.c (100%) rename e2sim/{ => previous}/ASN1c/X2RemovalResponse.h (100%) rename e2sim/{ => previous}/ASN1c/X2SetupFailure.c (100%) rename e2sim/{ => previous}/ASN1c/X2SetupFailure.h (100%) rename e2sim/{ => previous}/ASN1c/X2SetupRequest.c (100%) rename e2sim/{ => previous}/ASN1c/X2SetupRequest.h (100%) rename e2sim/{ => previous}/ASN1c/X2SetupResponse.c (100%) rename e2sim/{ => previous}/ASN1c/X2SetupResponse.h (100%) rename e2sim/{ => previous}/ASN1c/asn_SEQUENCE_OF.c (100%) rename e2sim/{ => previous}/ASN1c/asn_SEQUENCE_OF.h (100%) rename e2sim/{ => previous}/ASN1c/asn_SET_OF.c (100%) rename e2sim/{ => previous}/ASN1c/asn_SET_OF.h (100%) rename e2sim/{ => previous}/ASN1c/asn_application.c (100%) rename e2sim/{ => previous}/ASN1c/asn_application.h (100%) rename e2sim/{ => previous}/ASN1c/asn_bit_data.c (100%) rename e2sim/{ => previous}/ASN1c/asn_bit_data.h (100%) rename e2sim/{ => previous}/ASN1c/asn_codecs.h (100%) rename e2sim/{ => previous}/ASN1c/asn_codecs_prim.c (100%) rename e2sim/{ => previous}/ASN1c/asn_codecs_prim.h (100%) rename e2sim/{ => previous}/ASN1c/asn_constant.h (100%) rename e2sim/{ => previous}/ASN1c/asn_internal.c (100%) rename e2sim/{ => previous}/ASN1c/asn_internal.h (100%) rename e2sim/{ => previous}/ASN1c/asn_ioc.h (100%) rename e2sim/{ => previous}/ASN1c/asn_random_fill.c (100%) rename e2sim/{ => previous}/ASN1c/asn_random_fill.h (100%) rename e2sim/{ => previous}/ASN1c/asn_system.h (100%) rename e2sim/{ => previous}/ASN1c/ber_decoder.c (100%) rename e2sim/{ => previous}/ASN1c/ber_decoder.h (100%) rename e2sim/{ => previous}/ASN1c/ber_tlv_length.c (100%) rename e2sim/{ => previous}/ASN1c/ber_tlv_length.h (100%) rename e2sim/{ => previous}/ASN1c/ber_tlv_tag.c (100%) rename e2sim/{ => previous}/ASN1c/ber_tlv_tag.h (100%) rename e2sim/{ => previous}/ASN1c/constr_CHOICE.c (100%) rename e2sim/{ => previous}/ASN1c/constr_CHOICE.h (100%) rename e2sim/{ => previous}/ASN1c/constr_SEQUENCE.c (100%) rename e2sim/{ => previous}/ASN1c/constr_SEQUENCE.h (100%) rename e2sim/{ => previous}/ASN1c/constr_SEQUENCE_OF.c (100%) rename e2sim/{ => previous}/ASN1c/constr_SEQUENCE_OF.h (100%) rename e2sim/{ => previous}/ASN1c/constr_SET_OF.c (100%) rename e2sim/{ => previous}/ASN1c/constr_SET_OF.h (100%) rename e2sim/{ => previous}/ASN1c/constr_TYPE.c (100%) rename e2sim/{ => previous}/ASN1c/constr_TYPE.h (100%) rename e2sim/{ => previous}/ASN1c/constraints.c (100%) rename e2sim/{ => previous}/ASN1c/constraints.h (100%) rename e2sim/{ => previous}/ASN1c/converter-example.mk (100%) rename e2sim/{ => previous}/ASN1c/der_encoder.c (100%) rename e2sim/{ => previous}/ASN1c/der_encoder.h (100%) rename e2sim/{ => previous}/ASN1c/pdu_collection.c (100%) rename e2sim/{ => previous}/ASN1c/per_decoder.c (100%) rename e2sim/{ => previous}/ASN1c/per_decoder.h (100%) rename e2sim/{ => previous}/ASN1c/per_encoder.c (100%) rename e2sim/{ => previous}/ASN1c/per_encoder.h (100%) rename e2sim/{ => previous}/ASN1c/per_opentype.c (100%) rename e2sim/{ => previous}/ASN1c/per_opentype.h (100%) rename e2sim/{ => previous}/ASN1c/per_support.c (100%) rename e2sim/{ => previous}/ASN1c/per_support.h (100%) rename e2sim/{ => previous}/ASN1c/xer_decoder.c (100%) rename e2sim/{ => previous}/ASN1c/xer_decoder.h (100%) rename e2sim/{ => previous}/ASN1c/xer_encoder.c (100%) rename e2sim/{ => previous}/ASN1c/xer_encoder.h (100%) rename e2sim/{ => previous}/ASN1c/xer_support.c (100%) rename e2sim/{ => previous}/ASN1c/xer_support.h (100%) create mode 100644 e2sim/previous/CMakeLists.txt create mode 100644 e2sim/previous/README.md rename e2sim/{ => previous}/build_e2sim (100%) rename e2sim/{e2apv1sim => previous}/docker/Dockerfile (100%) rename e2sim/{e2apv1sim => previous}/docker/container-tag.yaml (100%) rename e2sim/{ => previous}/docker/old/DockerFile_old (100%) rename e2sim/{ => previous}/docker/old/Dockerfile (100%) rename e2sim/{ => previous}/docker/old/Dockerfile_base (100%) rename e2sim/{ => previous}/docker/old/configure_rmr (100%) rename e2sim/{ => previous}/docker/old/empty.rt (100%) rename e2sim/{ => previous}/docker/old/install_asn1c (100%) rename e2sim/{ => previous}/docker/old/install_rmr (100%) rename e2sim/{ => previous}/docker/old/local.rt (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ANY.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ANY.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/BIT_STRING.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/BIT_STRING.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/BIT_STRING_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/C-RNTI.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/C-RNTI.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-CP-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-CP-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-UP-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-UP-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CUUPMeasurement-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CUUPMeasurement-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Cause.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Cause.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseMisc.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseMisc.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseProtocol.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseProtocol.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseRIC.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseRIC.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseRICservice.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseRICservice.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseTransport.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CauseTransport.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CellResourceReportListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/CellResourceReportListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Criticality.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Criticality.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CriticalityDiagnostics-IE-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CriticalityDiagnostics-IE-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CriticalityDiagnostics-IE-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CriticalityDiagnostics-IE-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CriticalityDiagnostics.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/CriticalityDiagnostics.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/DU-Usage-Report-CellResourceReportItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/DU-Usage-Report-CellResourceReportItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/DU-Usage-Report-Per-UE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/DU-Usage-Report-Per-UE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/DU-Usage-Report-UeResourceReportItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/DU-Usage-Report-UeResourceReportItem.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2AP-PDU.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2AP-PDU.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-ActionDefinition.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-ActionDefinition.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-EventTriggerDefinition.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-EventTriggerDefinition.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationHeader-Format1.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationHeader-Format1.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationHeader.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationHeader.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationMessage-Format1.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationMessage-Format1.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationMessage.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-IndicationMessage.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-RANfunction-Description.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/E2SM-KPM-RANfunction-Description.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2setupFailure.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2setupFailure.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2setupRequest.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2setupRequest.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2setupResponse.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/E2setupResponse.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ENB-ID-Choice.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ENB-ID-Choice.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ENB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ENB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ENGNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ENGNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/EPC-CUUP-PM-Format.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/EPC-CUUP-PM-Format.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/EPC-DU-PM-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/EPC-DU-PM-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ErrorIndication.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ErrorIndication.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FGC-CUUP-PM-Format.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FGC-CUUP-PM-Format.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FGC-DU-PM-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FGC-DU-PM-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FQIPERSlicesPerPlmnListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FQIPERSlicesPerPlmnListItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-CU-CP-Name.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-CU-CP-Name.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GNB-CU-UP-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GNB-CU-UP-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-CU-UP-Name.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-CU-UP-Name.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GNB-DU-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GNB-DU-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-DU-Name.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-DU-Name.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GNB-ID-Choice.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GNB-ID-Choice.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-Name.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GNB-Name.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-eNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-eNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-en-gNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-en-gNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-gNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-gNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-ng-eNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalE2node-ng-eNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalENB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalENB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-eNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-eNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-en-gNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-en-gNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-gNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-gNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-ng-eNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/GlobalKPMnode-ng-eNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalRIC-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalRIC-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalenGNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalenGNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalgNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalgNB-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalngeNB-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/GlobalngeNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/INTEGER.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/INTEGER.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/INTEGER_oer.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/InitiatingMessage.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/InitiatingMessage.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Makefile.am.asn1convert (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Makefile.am.libasncodec (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NI-Type.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NI-Type.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NRCGI.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NRCGI.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NRCellIdentity.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NRCellIdentity.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NativeEnumerated.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NativeEnumerated.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NativeEnumerated_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NativeInteger.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NativeInteger.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/NativeInteger_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCTET_STRING.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCTET_STRING.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCTET_STRING_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCUCP-PF-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCUCP-PF-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCUUP-PF-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OCUUP-PF-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ODU-PF-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ODU-PF-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OPEN_TYPE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OPEN_TYPE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/OPEN_TYPE_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PF-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PF-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PF-ContainerListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PF-ContainerListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/PLMN-Identity.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/PLMN-Identity.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PM-Containers-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PM-Containers-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PerQCIReportListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PerQCIReportListItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PerQCIReportListItemFormat.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PerQCIReportListItemFormat.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PlmnID-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PlmnID-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Presence.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/Presence.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PrintableString.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/PrintableString.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProcedureCode.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProcedureCode.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-Container.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-Container.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ContainerList.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ContainerList.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ContainerPair.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ContainerPair.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ContainerPairList.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ContainerPairList.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-Field.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-Field.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-FieldPair.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-FieldPair.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-ID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-SingleContainer.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ProtocolIE-SingleContainer.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RAN-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RAN-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RANcallProcess-ID-string.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RANcallProcess-ID-string.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunction-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunction-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RANfunction-Name.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RANfunction-Name.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionDefinition.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionDefinition.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionID-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionID-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionIDcause-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionIDcause-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionRevision.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionRevision.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctions-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctions-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionsID-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionsID-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionsIDcause-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RANfunctionsIDcause-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-EventTriggerStyle-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-EventTriggerStyle-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-Format-Type.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-Format-Type.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-ReportStyle-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-ReportStyle-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-Style-Name.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-Style-Name.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-Style-Type.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RIC-Style-Type.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-Admitted-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-Admitted-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-Admitted-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-Admitted-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-NotAdmitted-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-NotAdmitted-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-NotAdmitted-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-NotAdmitted-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-ToBeSetup-Item.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICaction-ToBeSetup-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactionDefinition.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactionDefinition.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactionID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactionID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactionType.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactionType.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactions-ToBeSetup-List.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICactions-ToBeSetup-List.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcallProcessID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcallProcessID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolAckRequest.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolAckRequest.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolAcknowledge.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolAcknowledge.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolFailure.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolFailure.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolHeader.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolHeader.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolMessage.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolMessage.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolOutcome.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolOutcome.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolRequest.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolRequest.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolStatus.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICcontrolStatus.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICeventTriggerDefinition.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICeventTriggerDefinition.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindication.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindication.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationHeader.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationHeader.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationMessage.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationMessage.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationSN.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationSN.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationType.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICindicationType.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICrequestID.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICrequestID.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceQuery.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceQuery.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceUpdate.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceUpdate.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceUpdateAcknowledge.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceUpdateAcknowledge.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceUpdateFailure.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICserviceUpdateFailure.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDeleteFailure.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDeleteFailure.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDeleteRequest.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDeleteRequest.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDeleteResponse.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDeleteResponse.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDetails.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionDetails.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionFailure.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionFailure.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionRequest.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionRequest.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionResponse.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubscriptionResponse.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubsequentAction.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubsequentAction.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubsequentActionType.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICsubsequentActionType.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICtimeToWait.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/RICtimeToWait.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RT-Period-IE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/RT-Period-IE.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ResetRequest.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ResetRequest.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ResetResponse.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/ResetResponse.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/SNSSAI.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/SNSSAI.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ServedPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ServedPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/SlicePerPlmnPerCellListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/SlicePerPlmnPerCellListItem.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/SliceToReportListItem.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/SliceToReportListItem.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/SuccessfulOutcome.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/SuccessfulOutcome.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/TimeToWait.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/TimeToWait.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/Timestamp.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/Timestamp.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/Trigger-ConditionIE-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/Trigger-ConditionIE-Item.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/TriggeringMessage.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/TriggeringMessage.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/TypeOfError.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/TypeOfError.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/UE-Report-Type.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/UE-Report-Type.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/UnsuccessfulOutcome.c (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/UnsuccessfulOutcome.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_SEQUENCE_OF.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_SEQUENCE_OF.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_SET_OF.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_SET_OF.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_application.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_application.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_bit_data.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_bit_data.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_codecs.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_codecs_prim.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_codecs_prim.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/asn_constant.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_internal.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_internal.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_ioc.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_random_fill.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_random_fill.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/asn_system.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ber_decoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ber_decoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ber_tlv_length.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ber_tlv_length.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ber_tlv_tag.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/ber_tlv_tag.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_CHOICE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_CHOICE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_CHOICE_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SEQUENCE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SEQUENCE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SEQUENCE_OF.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SEQUENCE_OF.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SEQUENCE_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SET_OF.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SET_OF.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_SET_OF_oer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_TYPE.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constr_TYPE.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constraints.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/constraints.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/converter-example.mk (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/der_encoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/der_encoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/oer_decoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/oer_decoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/oer_encoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/oer_encoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/oer_support.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/oer_support.h (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/ASN1c/pdu_collection.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_decoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_decoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_encoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_encoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_opentype.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_opentype.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_support.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/per_support.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/xer_decoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/xer_decoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/xer_encoder.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/xer_encoder.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/xer_support.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim}/ASN1c/xer_support.h (100%) rename e2sim/{ => previous}/e2apv1sim/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/Dockerfile (100%) rename e2sim/{ => previous}/e2apv1sim/README.md (100%) rename e2sim/{ => previous}/e2apv1sim/build_e2sim (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/cellMeasReport.txt (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/docker/Dockerfile (100%) rename e2sim/{e2apv1sim/e2sim => previous/e2apv1sim}/docker/container-tag.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/DockerFile_old (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/Dockerfile (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/Dockerfile_base (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/configure_rmr (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/empty.rt (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/install_asn1c (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/install_rmr (100%) rename e2sim/{ => previous}/e2apv1sim/docker/old/local.rt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim.hpp (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Cause.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Cause.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseMisc.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseMisc.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseProtocol.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseProtocol.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseRIC.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseRIC.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseRICservice.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseRICservice.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseTransport.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CauseTransport.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Criticality.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Criticality.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CriticalityDiagnostics-IE-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CriticalityDiagnostics-IE-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CriticalityDiagnostics-IE-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CriticalityDiagnostics-IE-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CriticalityDiagnostics.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/CriticalityDiagnostics.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2AP-PDU.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2AP-PDU.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2setupFailure.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2setupFailure.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2setupRequest.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2setupRequest.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2setupResponse.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/E2setupResponse.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ENB-ID-Choice.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ENB-ID-Choice.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ENB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ENB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ENGNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ENGNB-ID.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ErrorIndication.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ErrorIndication.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GNB-CU-UP-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GNB-CU-UP-ID.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GNB-DU-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GNB-DU-ID.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GNB-ID-Choice.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GNB-ID-Choice.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-eNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-eNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-en-gNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-en-gNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-gNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-gNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-ng-eNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalE2node-ng-eNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalENB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalENB-ID.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalRIC-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalRIC-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalenGNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalenGNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalgNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalgNB-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalngeNB-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/GlobalngeNB-ID.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/InitiatingMessage.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/InitiatingMessage.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Makefile.am.asn1convert (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Makefile.am.libasncodec (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/PLMN-Identity.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/PLMN-Identity.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Presence.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/Presence.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProcedureCode.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProcedureCode.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-Container.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-Container.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ContainerList.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ContainerList.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ContainerPair.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ContainerPair.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ContainerPairList.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ContainerPairList.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-Field.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-Field.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-FieldPair.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-FieldPair.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-ID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-SingleContainer.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ProtocolIE-SingleContainer.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunction-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunction-Item.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionDefinition.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionDefinition.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionID-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionID-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionIDcause-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionIDcause-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionRevision.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionRevision.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctions-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctions-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionsID-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionsID-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionsIDcause-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RANfunctionsIDcause-List.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-Admitted-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-Admitted-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-Admitted-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-Admitted-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-NotAdmitted-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-NotAdmitted-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-NotAdmitted-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-NotAdmitted-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-ToBeSetup-Item.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICaction-ToBeSetup-Item.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactionDefinition.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactionDefinition.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactionID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactionID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactionType.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactionType.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactions-ToBeSetup-List.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICactions-ToBeSetup-List.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcallProcessID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcallProcessID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolAckRequest.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolAckRequest.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolAcknowledge.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolAcknowledge.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolFailure.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolFailure.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolHeader.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolHeader.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolMessage.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolMessage.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolOutcome.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolOutcome.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolRequest.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolRequest.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolStatus.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICcontrolStatus.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICeventTriggerDefinition.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICeventTriggerDefinition.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindication.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindication.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationHeader.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationHeader.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationMessage.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationMessage.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationSN.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationSN.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationType.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICindicationType.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICrequestID.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICrequestID.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceQuery.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceQuery.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceUpdate.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceUpdate.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceUpdateAcknowledge.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceUpdateAcknowledge.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceUpdateFailure.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICserviceUpdateFailure.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDeleteFailure.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDeleteFailure.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDeleteRequest.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDeleteRequest.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDeleteResponse.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDeleteResponse.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDetails.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionDetails.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionFailure.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionFailure.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionRequest.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionRequest.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionResponse.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubscriptionResponse.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubsequentAction.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubsequentAction.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubsequentActionType.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICsubsequentActionType.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICtimeToWait.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/RICtimeToWait.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ResetRequest.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ResetRequest.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ResetResponse.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/ResetResponse.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/SuccessfulOutcome.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/SuccessfulOutcome.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/TimeToWait.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/TimeToWait.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/TriggeringMessage.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/TriggeringMessage.h (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/TypeOfError.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/TypeOfError.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/UnsuccessfulOutcome.c (100%) rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/UnsuccessfulOutcome.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/asn_constant.h (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/converter-example.mk (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h rename e2sim/{e2apv1sim/ricsim => previous/e2apv1sim/e2sim}/ASN1c/pdu_collection.c (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c create mode 100644 e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h rename e2sim/{ => previous}/e2apv1sim/e2sim/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/Dockerfile (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/README.md (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/build_e2sim (100%) create mode 100644 e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt create mode 100644 e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile create mode 100644 e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/DockerFile_old (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/Dockerfile (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/Dockerfile_base (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/configure_rmr (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/empty.rt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/install_asn1c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/install_rmr (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/docker/old/local.rt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/e2sim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/e2sim.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/encode_e2apv1.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/encode_e2apv1.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/encode_kpm.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/encode_kpm.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/extras/ricsim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/README.md (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim/Chart.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim/values.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/helm/e2sim_install.sh (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/kpm_callbacks.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/kpm_callbacks.hpp (100%) rename e2sim/{e2apv1sim => previous/e2apv1sim/e2sim}/simulation.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/asn/version.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/DEF/e2sim_defs.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp~ (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp~ (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Misc/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/WLG/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/WLG/build_wlg.sh (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/WLG/ric_perf.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/X2/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/X2/x2agent.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/X2/x2term.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/X2/x2termination_test.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/README (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/tools/build_helper.bash (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/tools/install_asn1c (100%) rename e2sim/{ => previous}/e2apv1sim/e2sim/tools/install_dependencies (100%) rename e2sim/{e2apv1sim => previous/e2apv1sim/e2sim}/ueMeasReport.txt (100%) rename e2sim/{ => previous}/e2apv1sim/encode_e2apv1.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/encode_e2apv1.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/encode_kpm.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/encode_kpm.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/extras/ricsim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/helm/README.md (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim/Chart.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim/templates/_helpers.tpl (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim/templates/deployment.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim/values.yaml (100%) rename e2sim/{ => previous}/e2apv1sim/helm/e2sim_install.sh (100%) rename e2sim/{ => previous}/e2apv1sim/kpm_callbacks.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/kpm_callbacks.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim.hpp (100%) create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c create mode 100644 e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h rename e2sim/{ => previous}/e2apv1sim/ricsim/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/CMakeLists.txt~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/build_e2sim (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/encode_e2apv1.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/encode_e2apv1.cpp~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/encode_e2apv1.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/encode_kpm.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/encode_kpm.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/extras/ricsim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/ricsim.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/ricsim.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/asn/version.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/DEF/e2sim_defs.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp~ (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Misc/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/WLG/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/WLG/build_wlg.sh (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/WLG/ric_perf.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/X2/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/X2/x2agent.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/X2/x2term.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/X2/x2termination_test.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/README (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/tools/build_helper.bash (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/tools/install_asn1c (100%) rename e2sim/{ => previous}/e2apv1sim/ricsim/tools/install_dependencies (100%) create mode 100644 e2sim/previous/e2apv1sim/simulation.txt rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/asn.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/common.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/length.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/opentype.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/tag.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/tools.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/ber/visitor.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/buffer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/constraints.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/elements.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/error_context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/identifier.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/bstring.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/choice.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/common.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/context.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/enumerated.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/integer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/length.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/oid.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/ostring.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/sequence.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/visitor.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/per/whole_number.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/printer.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/type_defs.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/utility.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/value_traits.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/variant.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/asn/version.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/ASN1/lib/e2ap_config.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/DEF/e2sim_defs.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/DEF/e2sim_defs.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/E2SM/e2sm.c (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/E2SM/e2sm.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/XML/reference_constants.txt (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/e2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/E2AP/e2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/SCTP/e2sim_sctp.c (100%) rename e2sim/{ => previous}/e2apv1sim/src/SCTP/e2sim_sctp.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/SCTP/e2sim_sctp.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/SCTP/e2sim_sctp.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_asn_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_asn_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_generate_messages.c (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_generate_messages.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_message_handler.c (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_message_handler.h (100%) rename e2sim/{ => previous}/e2apv1sim/src/X2AP/x2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/Misc/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/test/Misc/test_asn1c.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/Serial/adruino_serial.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/Serial/adruino_serial.h (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/demo_setup.txt (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/e2sim_closedloop.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/e2sim_serial.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/e2sim_test_client.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/e2termination_test.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/Pendulum/pendulum.asn1 (100%) rename e2sim/{ => previous}/e2apv1sim/test/WLG/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/test/WLG/build_wlg.sh (100%) rename e2sim/{ => previous}/e2apv1sim/test/WLG/ric_perf.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/WLG/ric_wlg.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/X2/CMakeLists.txt (100%) rename e2sim/{ => previous}/e2apv1sim/test/X2/x2agent.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/X2/x2term.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/X2/x2termination_test.cpp (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/README (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/rmr_install.sh (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c (100%) rename e2sim/{ => previous}/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h (100%) rename e2sim/{ => previous}/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes (100%) rename e2sim/{ => previous}/e2apv1sim/tools/build_helper.bash (100%) rename e2sim/{ => previous}/e2apv1sim/tools/install_asn1c (100%) rename e2sim/{ => previous}/e2apv1sim/tools/install_dependencies (100%) create mode 100644 e2sim/previous/e2apv1sim/ueMeasReport.txt rename e2sim/{ => previous}/e2sim.cpp (100%) rename e2sim/{ => previous}/helm/README.md (100%) rename e2sim/{ => previous}/helm/e2sim/Chart.yaml (100%) rename e2sim/{ => previous}/helm/e2sim/templates/_helpers.tpl (100%) rename e2sim/{ => previous}/helm/e2sim/templates/bin/_e2sim-run.sh.tpl (100%) rename e2sim/{ => previous}/helm/e2sim/templates/configmap-e2sim-bin.yaml (100%) rename e2sim/{ => previous}/helm/e2sim/templates/deployment.yaml (100%) rename e2sim/{ => previous}/helm/e2sim/values.yaml (100%) rename e2sim/{ => previous}/helm/e2sim_install.sh (100%) rename e2sim/{ => previous}/ricsim.cpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/asn.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/codec.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/common.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/context.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/length.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/opentype.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/tag.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/tools.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/ber/visitor.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/buffer.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/chunked_allocator.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/constraints.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/elements.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/error_context.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/identifier.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/binary_integer.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/bstring.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/choice.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/codec.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/common.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/context.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/enumerated.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/integer.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/length.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/oid.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/ostring.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/sequence.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/sequence_of.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/visitor.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/per/whole_number.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/printer.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/type_defs.h (100%) rename e2sim/{ => previous}/src/ASN1/asn/utility.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/value_traits.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/variant.hpp (100%) rename e2sim/{ => previous}/src/ASN1/asn/version.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/E2AP-Constants.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/E2AP-IEs.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/E2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/E2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/X2AP-CommonDataTypes.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/X2AP-Constants.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/X2AP-Containers.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/X2AP-IEs.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/X2AP-PDU-Contents.hpp (100%) rename e2sim/{ => previous}/src/ASN1/generated/X2AP-PDU-Descriptions.hpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/asn_e2ap.cpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/asn_e2ap.hpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/asn_e2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/asn_x2ap.cpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/asn_x2ap.hpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/asn_x2ap_wrapper.hpp (100%) rename e2sim/{ => previous}/src/ASN1/lib/e2ap_config.hpp (100%) create mode 100644 e2sim/previous/src/DEF/e2sim_defs.cpp create mode 100644 e2sim/previous/src/DEF/e2sim_defs.h rename e2sim/{ => previous}/src/E2AP/E2SM/e2sm.c (100%) rename e2sim/{ => previous}/src/E2AP/E2SM/e2sm.h (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ErrorIndication.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_RICindication_type1.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_RICindication_type2.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ResourceStatusFailure.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ResourceStatusRequest.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ResourceStatusResponse.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_X2SetupFailure.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_X2SetupRequest.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/E2AP_X2SetupResponse.xml (100%) rename e2sim/{ => previous}/src/E2AP/XML/reference_constants.txt (100%) rename e2sim/{ => previous}/src/E2AP/e2ap_asn1c_codec.c (100%) rename e2sim/{ => previous}/src/E2AP/e2ap_asn1c_codec.h (100%) rename e2sim/{ => previous}/src/E2AP/e2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/src/E2AP/e2ap_message_handler.hpp (100%) create mode 100644 e2sim/previous/src/SCTP/e2sim_sctp.c create mode 100644 e2sim/previous/src/SCTP/e2sim_sctp.cpp create mode 100644 e2sim/previous/src/SCTP/e2sim_sctp.h create mode 100644 e2sim/previous/src/SCTP/e2sim_sctp.hpp rename e2sim/{ => previous}/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml (100%) rename e2sim/{ => previous}/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml (100%) rename e2sim/{ => previous}/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml (100%) rename e2sim/{ => previous}/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml (100%) rename e2sim/{ => previous}/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.c (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.cpp (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.h (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_asn_codec.hpp (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_generate_messages.c (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_generate_messages.h (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_message_handler.c (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_message_handler.cpp (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_message_handler.h (100%) rename e2sim/{ => previous}/src/X2AP/x2ap_message_handler.hpp (100%) rename e2sim/{ => previous}/test/Misc/CMakeLists.txt (100%) rename e2sim/{ => previous}/test/Misc/test_asn1c.cpp (100%) rename e2sim/{ => previous}/test/Pendulum/Pendulum_asn_codec.c (100%) rename e2sim/{ => previous}/test/Pendulum/Pendulum_asn_codec.h (100%) rename e2sim/{ => previous}/test/Pendulum/Serial/adruino_serial.c (100%) rename e2sim/{ => previous}/test/Pendulum/Serial/adruino_serial.h (100%) rename e2sim/{ => previous}/test/Pendulum/Serial/arduino-serial-lib.c (100%) rename e2sim/{ => previous}/test/Pendulum/Serial/arduino-serial-lib.h (100%) rename e2sim/{ => previous}/test/Pendulum/demo_setup.txt (100%) rename e2sim/{ => previous}/test/Pendulum/e2sim_closedloop.c (100%) rename e2sim/{ => previous}/test/Pendulum/e2sim_serial.c (100%) rename e2sim/{ => previous}/test/Pendulum/e2sim_test_client.c (100%) rename e2sim/{ => previous}/test/Pendulum/e2termination_test.cpp (100%) rename e2sim/{ => previous}/test/Pendulum/pendulum.asn1 (100%) rename e2sim/{ => previous}/test/WLG/CMakeLists.txt (100%) rename e2sim/{ => previous}/test/WLG/build_wlg.sh (100%) rename e2sim/{ => previous}/test/WLG/ric_perf.cpp (100%) rename e2sim/{ => previous}/test/WLG/ric_wlg.cpp (100%) rename e2sim/{ => previous}/test/X2/CMakeLists.txt (100%) rename e2sim/{ => previous}/test/X2/x2agent.cpp (100%) rename e2sim/{ => previous}/test/X2/x2term.cpp (100%) rename e2sim/{ => previous}/test/X2/x2termination_test.cpp (100%) rename e2sim/{ => previous}/test/rmr_interface/README (100%) rename e2sim/{ => previous}/test/rmr_interface/rmr_install.sh (100%) rename e2sim/{ => previous}/test/rmr_interface/tests/receiver/build_and_run_recvr.sh (100%) rename e2sim/{ => previous}/test/rmr_interface/tests/receiver/rmr_rcvr.c (100%) rename e2sim/{ => previous}/test/rmr_interface/tests/sender/build_and_run_sender.sh (100%) rename e2sim/{ => previous}/test/rmr_interface/tests/sender/rmr_sender.c (100%) rename e2sim/{ => previous}/test/rmr_interface/tests/sender/rmr_wrapper.h (100%) rename e2sim/{ => previous}/tools/asn_defs/generate_e2ap_e2sm_codes (100%) rename e2sim/{ => previous}/tools/build_helper.bash (100%) rename e2sim/{ => previous}/tools/install_asn1c (100%) rename e2sim/{ => previous}/tools/install_dependencies (100%) create mode 100644 e2sim/src/ASN1c/ANY.c create mode 100644 e2sim/src/ASN1c/ANY.h create mode 100644 e2sim/src/ASN1c/BIT_STRING.c create mode 100644 e2sim/src/ASN1c/BIT_STRING.h create mode 100644 e2sim/src/ASN1c/BIT_STRING_oer.c create mode 100644 e2sim/src/ASN1c/CMakeLists.txt create mode 100644 e2sim/src/ASN1c/Cause.c create mode 100644 e2sim/src/ASN1c/Cause.h create mode 100644 e2sim/src/ASN1c/CauseMisc.c create mode 100644 e2sim/src/ASN1c/CauseMisc.h create mode 100644 e2sim/src/ASN1c/CauseProtocol.c create mode 100644 e2sim/src/ASN1c/CauseProtocol.h create mode 100644 e2sim/src/ASN1c/CauseRIC.c create mode 100644 e2sim/src/ASN1c/CauseRIC.h create mode 100644 e2sim/src/ASN1c/CauseRICservice.c create mode 100644 e2sim/src/ASN1c/CauseRICservice.h create mode 100644 e2sim/src/ASN1c/CauseTransport.c create mode 100644 e2sim/src/ASN1c/CauseTransport.h create mode 100644 e2sim/src/ASN1c/Criticality.c create mode 100644 e2sim/src/ASN1c/Criticality.h create mode 100644 e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 e2sim/src/ASN1c/CriticalityDiagnostics.c create mode 100644 e2sim/src/ASN1c/CriticalityDiagnostics.h create mode 100644 e2sim/src/ASN1c/E2AP-PDU.c create mode 100644 e2sim/src/ASN1c/E2AP-PDU.h create mode 100644 e2sim/src/ASN1c/E2setupFailure.c create mode 100644 e2sim/src/ASN1c/E2setupFailure.h create mode 100644 e2sim/src/ASN1c/E2setupRequest.c create mode 100644 e2sim/src/ASN1c/E2setupRequest.h create mode 100644 e2sim/src/ASN1c/E2setupResponse.c create mode 100644 e2sim/src/ASN1c/E2setupResponse.h create mode 100644 e2sim/src/ASN1c/ENB-ID-Choice.c create mode 100644 e2sim/src/ASN1c/ENB-ID-Choice.h create mode 100644 e2sim/src/ASN1c/ENB-ID.c create mode 100644 e2sim/src/ASN1c/ENB-ID.h create mode 100644 e2sim/src/ASN1c/ENGNB-ID.c create mode 100644 e2sim/src/ASN1c/ENGNB-ID.h create mode 100644 e2sim/src/ASN1c/ErrorIndication.c create mode 100644 e2sim/src/ASN1c/ErrorIndication.h create mode 100644 e2sim/src/ASN1c/GNB-CU-UP-ID.c create mode 100644 e2sim/src/ASN1c/GNB-CU-UP-ID.h create mode 100644 e2sim/src/ASN1c/GNB-DU-ID.c create mode 100644 e2sim/src/ASN1c/GNB-DU-ID.h create mode 100644 e2sim/src/ASN1c/GNB-ID-Choice.c create mode 100644 e2sim/src/ASN1c/GNB-ID-Choice.h create mode 100644 e2sim/src/ASN1c/GlobalE2node-ID.c create mode 100644 e2sim/src/ASN1c/GlobalE2node-ID.h create mode 100644 e2sim/src/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalENB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalENB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalRIC-ID.c create mode 100644 e2sim/src/ASN1c/GlobalRIC-ID.h create mode 100644 e2sim/src/ASN1c/GlobalenGNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalenGNB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalgNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalgNB-ID.h create mode 100644 e2sim/src/ASN1c/GlobalngeNB-ID.c create mode 100644 e2sim/src/ASN1c/GlobalngeNB-ID.h create mode 100644 e2sim/src/ASN1c/INTEGER.c create mode 100644 e2sim/src/ASN1c/INTEGER.h create mode 100644 e2sim/src/ASN1c/INTEGER_oer.c create mode 100644 e2sim/src/ASN1c/InitiatingMessage.c create mode 100644 e2sim/src/ASN1c/InitiatingMessage.h create mode 100644 e2sim/src/ASN1c/Makefile.am.asn1convert create mode 100644 e2sim/src/ASN1c/Makefile.am.libasncodec create mode 100644 e2sim/src/ASN1c/NativeEnumerated.c create mode 100644 e2sim/src/ASN1c/NativeEnumerated.h create mode 100644 e2sim/src/ASN1c/NativeEnumerated_oer.c create mode 100644 e2sim/src/ASN1c/NativeInteger.c create mode 100644 e2sim/src/ASN1c/NativeInteger.h create mode 100644 e2sim/src/ASN1c/NativeInteger_oer.c create mode 100644 e2sim/src/ASN1c/OCTET_STRING.c create mode 100644 e2sim/src/ASN1c/OCTET_STRING.h create mode 100644 e2sim/src/ASN1c/OCTET_STRING_oer.c create mode 100644 e2sim/src/ASN1c/OPEN_TYPE.c create mode 100644 e2sim/src/ASN1c/OPEN_TYPE.h create mode 100644 e2sim/src/ASN1c/OPEN_TYPE_oer.c create mode 100644 e2sim/src/ASN1c/PLMN-Identity.c create mode 100644 e2sim/src/ASN1c/PLMN-Identity.h create mode 100644 e2sim/src/ASN1c/Presence.c create mode 100644 e2sim/src/ASN1c/Presence.h create mode 100644 e2sim/src/ASN1c/ProcedureCode.c create mode 100644 e2sim/src/ASN1c/ProcedureCode.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-Container.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-Container.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-ContainerList.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-ContainerList.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-Field.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-Field.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-FieldPair.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-FieldPair.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-ID.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-ID.h create mode 100644 e2sim/src/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 e2sim/src/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 e2sim/src/ASN1c/RANfunction-Item.c create mode 100644 e2sim/src/ASN1c/RANfunction-Item.h create mode 100644 e2sim/src/ASN1c/RANfunctionDefinition.c create mode 100644 e2sim/src/ASN1c/RANfunctionDefinition.h create mode 100644 e2sim/src/ASN1c/RANfunctionID-Item.c create mode 100644 e2sim/src/ASN1c/RANfunctionID-Item.h create mode 100644 e2sim/src/ASN1c/RANfunctionID.c create mode 100644 e2sim/src/ASN1c/RANfunctionID.h create mode 100644 e2sim/src/ASN1c/RANfunctionIDcause-Item.c create mode 100644 e2sim/src/ASN1c/RANfunctionIDcause-Item.h create mode 100644 e2sim/src/ASN1c/RANfunctionRevision.c create mode 100644 e2sim/src/ASN1c/RANfunctionRevision.h create mode 100644 e2sim/src/ASN1c/RANfunctions-List.c create mode 100644 e2sim/src/ASN1c/RANfunctions-List.h create mode 100644 e2sim/src/ASN1c/RANfunctionsID-List.c create mode 100644 e2sim/src/ASN1c/RANfunctionsID-List.h create mode 100644 e2sim/src/ASN1c/RANfunctionsIDcause-List.c create mode 100644 e2sim/src/ASN1c/RANfunctionsIDcause-List.h create mode 100644 e2sim/src/ASN1c/RICaction-Admitted-Item.c create mode 100644 e2sim/src/ASN1c/RICaction-Admitted-Item.h create mode 100644 e2sim/src/ASN1c/RICaction-Admitted-List.c create mode 100644 e2sim/src/ASN1c/RICaction-Admitted-List.h create mode 100644 e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 e2sim/src/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 e2sim/src/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 e2sim/src/ASN1c/RICactionDefinition.c create mode 100644 e2sim/src/ASN1c/RICactionDefinition.h create mode 100644 e2sim/src/ASN1c/RICactionID.c create mode 100644 e2sim/src/ASN1c/RICactionID.h create mode 100644 e2sim/src/ASN1c/RICactionType.c create mode 100644 e2sim/src/ASN1c/RICactionType.h create mode 100644 e2sim/src/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 e2sim/src/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 e2sim/src/ASN1c/RICcallProcessID.c create mode 100644 e2sim/src/ASN1c/RICcallProcessID.h create mode 100644 e2sim/src/ASN1c/RICcontrolAckRequest.c create mode 100644 e2sim/src/ASN1c/RICcontrolAckRequest.h create mode 100644 e2sim/src/ASN1c/RICcontrolAcknowledge.c create mode 100644 e2sim/src/ASN1c/RICcontrolAcknowledge.h create mode 100644 e2sim/src/ASN1c/RICcontrolFailure.c create mode 100644 e2sim/src/ASN1c/RICcontrolFailure.h create mode 100644 e2sim/src/ASN1c/RICcontrolHeader.c create mode 100644 e2sim/src/ASN1c/RICcontrolHeader.h create mode 100644 e2sim/src/ASN1c/RICcontrolMessage.c create mode 100644 e2sim/src/ASN1c/RICcontrolMessage.h create mode 100644 e2sim/src/ASN1c/RICcontrolOutcome.c create mode 100644 e2sim/src/ASN1c/RICcontrolOutcome.h create mode 100644 e2sim/src/ASN1c/RICcontrolRequest.c create mode 100644 e2sim/src/ASN1c/RICcontrolRequest.h create mode 100644 e2sim/src/ASN1c/RICcontrolStatus.c create mode 100644 e2sim/src/ASN1c/RICcontrolStatus.h create mode 100644 e2sim/src/ASN1c/RICeventTriggerDefinition.c create mode 100644 e2sim/src/ASN1c/RICeventTriggerDefinition.h create mode 100644 e2sim/src/ASN1c/RICindication.c create mode 100644 e2sim/src/ASN1c/RICindication.h create mode 100644 e2sim/src/ASN1c/RICindicationHeader.c create mode 100644 e2sim/src/ASN1c/RICindicationHeader.h create mode 100644 e2sim/src/ASN1c/RICindicationMessage.c create mode 100644 e2sim/src/ASN1c/RICindicationMessage.h create mode 100644 e2sim/src/ASN1c/RICindicationSN.c create mode 100644 e2sim/src/ASN1c/RICindicationSN.h create mode 100644 e2sim/src/ASN1c/RICindicationType.c create mode 100644 e2sim/src/ASN1c/RICindicationType.h create mode 100644 e2sim/src/ASN1c/RICrequestID.c create mode 100644 e2sim/src/ASN1c/RICrequestID.h create mode 100644 e2sim/src/ASN1c/RICserviceQuery.c create mode 100644 e2sim/src/ASN1c/RICserviceQuery.h create mode 100644 e2sim/src/ASN1c/RICserviceUpdate.c create mode 100644 e2sim/src/ASN1c/RICserviceUpdate.h create mode 100644 e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 e2sim/src/ASN1c/RICserviceUpdateFailure.c create mode 100644 e2sim/src/ASN1c/RICserviceUpdateFailure.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionDetails.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionDetails.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionFailure.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionFailure.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionRequest.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionRequest.h create mode 100644 e2sim/src/ASN1c/RICsubscriptionResponse.c create mode 100644 e2sim/src/ASN1c/RICsubscriptionResponse.h create mode 100644 e2sim/src/ASN1c/RICsubsequentAction.c create mode 100644 e2sim/src/ASN1c/RICsubsequentAction.h create mode 100644 e2sim/src/ASN1c/RICsubsequentActionType.c create mode 100644 e2sim/src/ASN1c/RICsubsequentActionType.h create mode 100644 e2sim/src/ASN1c/RICtimeToWait.c create mode 100644 e2sim/src/ASN1c/RICtimeToWait.h create mode 100644 e2sim/src/ASN1c/ResetRequest.c create mode 100644 e2sim/src/ASN1c/ResetRequest.h create mode 100644 e2sim/src/ASN1c/ResetResponse.c create mode 100644 e2sim/src/ASN1c/ResetResponse.h create mode 100644 e2sim/src/ASN1c/SuccessfulOutcome.c create mode 100644 e2sim/src/ASN1c/SuccessfulOutcome.h create mode 100644 e2sim/src/ASN1c/TimeToWait.c create mode 100644 e2sim/src/ASN1c/TimeToWait.h create mode 100644 e2sim/src/ASN1c/TriggeringMessage.c create mode 100644 e2sim/src/ASN1c/TriggeringMessage.h create mode 100644 e2sim/src/ASN1c/TypeOfError.c create mode 100644 e2sim/src/ASN1c/TypeOfError.h create mode 100644 e2sim/src/ASN1c/UnsuccessfulOutcome.c create mode 100644 e2sim/src/ASN1c/UnsuccessfulOutcome.h create mode 100644 e2sim/src/ASN1c/asn_SEQUENCE_OF.c create mode 100644 e2sim/src/ASN1c/asn_SEQUENCE_OF.h create mode 100644 e2sim/src/ASN1c/asn_SET_OF.c create mode 100644 e2sim/src/ASN1c/asn_SET_OF.h create mode 100644 e2sim/src/ASN1c/asn_application.c create mode 100644 e2sim/src/ASN1c/asn_application.h create mode 100644 e2sim/src/ASN1c/asn_bit_data.c create mode 100644 e2sim/src/ASN1c/asn_bit_data.h create mode 100644 e2sim/src/ASN1c/asn_codecs.h create mode 100644 e2sim/src/ASN1c/asn_codecs_prim.c create mode 100644 e2sim/src/ASN1c/asn_codecs_prim.h create mode 100644 e2sim/src/ASN1c/asn_constant.h create mode 100644 e2sim/src/ASN1c/asn_internal.c create mode 100644 e2sim/src/ASN1c/asn_internal.h create mode 100644 e2sim/src/ASN1c/asn_ioc.h create mode 100644 e2sim/src/ASN1c/asn_random_fill.c create mode 100644 e2sim/src/ASN1c/asn_random_fill.h create mode 100644 e2sim/src/ASN1c/asn_system.h create mode 100644 e2sim/src/ASN1c/ber_decoder.c create mode 100644 e2sim/src/ASN1c/ber_decoder.h create mode 100644 e2sim/src/ASN1c/ber_tlv_length.c create mode 100644 e2sim/src/ASN1c/ber_tlv_length.h create mode 100644 e2sim/src/ASN1c/ber_tlv_tag.c create mode 100644 e2sim/src/ASN1c/ber_tlv_tag.h create mode 100644 e2sim/src/ASN1c/constr_CHOICE.c create mode 100644 e2sim/src/ASN1c/constr_CHOICE.h create mode 100644 e2sim/src/ASN1c/constr_CHOICE_oer.c create mode 100644 e2sim/src/ASN1c/constr_SEQUENCE.c create mode 100644 e2sim/src/ASN1c/constr_SEQUENCE.h create mode 100644 e2sim/src/ASN1c/constr_SEQUENCE_OF.c create mode 100644 e2sim/src/ASN1c/constr_SEQUENCE_OF.h create mode 100644 e2sim/src/ASN1c/constr_SEQUENCE_oer.c create mode 100644 e2sim/src/ASN1c/constr_SET_OF.c create mode 100644 e2sim/src/ASN1c/constr_SET_OF.h create mode 100644 e2sim/src/ASN1c/constr_SET_OF_oer.c create mode 100644 e2sim/src/ASN1c/constr_TYPE.c create mode 100644 e2sim/src/ASN1c/constr_TYPE.h create mode 100644 e2sim/src/ASN1c/constraints.c create mode 100644 e2sim/src/ASN1c/constraints.h create mode 100644 e2sim/src/ASN1c/converter-example.mk create mode 100644 e2sim/src/ASN1c/der_encoder.c create mode 100644 e2sim/src/ASN1c/der_encoder.h create mode 100644 e2sim/src/ASN1c/oer_decoder.c create mode 100644 e2sim/src/ASN1c/oer_decoder.h create mode 100644 e2sim/src/ASN1c/oer_encoder.c create mode 100644 e2sim/src/ASN1c/oer_encoder.h create mode 100644 e2sim/src/ASN1c/oer_support.c create mode 100644 e2sim/src/ASN1c/oer_support.h create mode 100644 e2sim/src/ASN1c/pdu_collection.c create mode 100644 e2sim/src/ASN1c/per_decoder.c create mode 100644 e2sim/src/ASN1c/per_decoder.h create mode 100644 e2sim/src/ASN1c/per_encoder.c create mode 100644 e2sim/src/ASN1c/per_encoder.h create mode 100644 e2sim/src/ASN1c/per_opentype.c create mode 100644 e2sim/src/ASN1c/per_opentype.h create mode 100644 e2sim/src/ASN1c/per_support.c create mode 100644 e2sim/src/ASN1c/per_support.h create mode 100644 e2sim/src/ASN1c/xer_decoder.c create mode 100644 e2sim/src/ASN1c/xer_decoder.h create mode 100644 e2sim/src/ASN1c/xer_encoder.c create mode 100644 e2sim/src/ASN1c/xer_encoder.h create mode 100644 e2sim/src/ASN1c/xer_support.c create mode 100644 e2sim/src/ASN1c/xer_support.h create mode 100644 e2sim/src/DEF/CMakeLists.txt create mode 100644 e2sim/src/SCTP/CMakeLists.txt create mode 100644 e2sim/src/base/CMakeLists.txt create mode 100644 e2sim/src/base/e2sim.cpp create mode 100644 e2sim/src/base/e2sim.hpp create mode 100644 e2sim/src/encoding/CMakeLists.txt create mode 100644 e2sim/src/encoding/encode_e2apv1.cpp create mode 100644 e2sim/src/encoding/encode_e2apv1.hpp create mode 100644 e2sim/src/messagerouting/CMakeLists.txt create mode 100644 e2sim/src/messagerouting/e2ap_asn1c_codec.c create mode 100644 e2sim/src/messagerouting/e2ap_asn1c_codec.h create mode 100644 e2sim/src/messagerouting/e2ap_message_handler.cpp create mode 100644 e2sim/src/messagerouting/e2ap_message_handler.hpp diff --git a/e2sim/CMakeLists.txt b/e2sim/CMakeLists.txt index c4e867a..bf57fda 100644 --- a/e2sim/CMakeLists.txt +++ b/e2sim/CMakeLists.txt @@ -1,61 +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. * -# * -#******************************************************************************/ - -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} ) + +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/e2sim/README.md b/e2sim/README.md index ed260c3..2790b0d 100644 --- a/e2sim/README.md +++ b/e2sim/README.md @@ -17,8 +17,60 @@ # * #******************************************************************************/ - -# INSTALLATION (tested on Ubuntu 16.04) +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 @@ -35,61 +87,12 @@ 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. Build the official e2sim + $ mkdir build + $ cd build + $ cmake .. + $ make package + $ cmake .. -DDEV_PKG=1 + $ make package - 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/e2sim/docker/Dockerfile b/e2sim/docker/Dockerfile index 1233a12..5b3ebab 100644 --- a/e2sim/docker/Dockerfile +++ b/e2sim/docker/Dockerfile @@ -1,54 +1,28 @@ -#/***************************************************************************** -# * -# Copyright 2019 AT&T Intellectual Property * -# Copyright 2019 Nokia * -# * -# Licensed under the Apache License, Version 2.0 (the "License"); * -# you may not use this file except in compliance with the License. * -# You may obtain a copy of the License at * -# * -# http://www.apache.org/licenses/LICENSE-2.0 * -# * -# Unless required by applicable law or agreed to in writing, software * -# distributed under the License is distributed on an "AS IS" BASIS, * -# WITHOUT 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) 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 ubuntu:16.04 +FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-ubuntu18-c-go:9-u18.04 as buildenv +RUN mkdir /playpen -# location in the container -ENV E2SIM_DIR /home/e2sim +RUN apt-get update && apt-get install -y build-essential git cmake libsctp-dev autoconf automake libtool bison flex libboost-all-dev -# 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} +WORKDIR /playpen -#------------- Build E2SIM ----------------------- -RUN ./build_e2sim --clean -RUN ./build_e2sim +COPY . /playpen +RUN mkdir build && cd build && cmake .. && make package && cmake .. -DDEV_PKG=1 + +CMD [ "make package" ] diff --git a/e2sim/docker/container-tag.yaml b/e2sim/docker/container-tag.yaml index 5df0816..4983202 100644 --- a/e2sim/docker/container-tag.yaml +++ b/e2sim/docker/container-tag.yaml @@ -1,2 +1,2 @@ --- -tag: 0.1.1 +tag: '1.0.0' diff --git a/e2sim/e2apv1sim/ASN1c/ANY.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ANY.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c diff --git a/e2sim/e2apv1sim/ASN1c/ANY.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ANY.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h diff --git a/e2sim/e2apv1sim/ASN1c/BIT_STRING.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/BIT_STRING.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c diff --git a/e2sim/e2apv1sim/ASN1c/BIT_STRING.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/BIT_STRING.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h diff --git a/e2sim/e2apv1sim/ASN1c/BIT_STRING_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/BIT_STRING_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/C-RNTI.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/C-RNTI.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c diff --git a/e2sim/e2apv1sim/ASN1c/C-RNTI.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/C-RNTI.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h diff --git a/e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/ASN1c/CUUPMeasurement-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CUUPMeasurement-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/CUUPMeasurement-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CUUPMeasurement-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/Cause.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Cause.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c diff --git a/e2sim/e2apv1sim/ASN1c/Cause.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Cause.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h diff --git a/e2sim/e2apv1sim/ASN1c/CauseMisc.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseMisc.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c diff --git a/e2sim/e2apv1sim/ASN1c/CauseMisc.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseMisc.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h diff --git a/e2sim/e2apv1sim/ASN1c/CauseProtocol.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseProtocol.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c diff --git a/e2sim/e2apv1sim/ASN1c/CauseProtocol.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseProtocol.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h diff --git a/e2sim/e2apv1sim/ASN1c/CauseRIC.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseRIC.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c diff --git a/e2sim/e2apv1sim/ASN1c/CauseRIC.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseRIC.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h diff --git a/e2sim/e2apv1sim/ASN1c/CauseRICservice.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseRICservice.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c diff --git a/e2sim/e2apv1sim/ASN1c/CauseRICservice.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseRICservice.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h diff --git a/e2sim/e2apv1sim/ASN1c/CauseTransport.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseTransport.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c diff --git a/e2sim/e2apv1sim/ASN1c/CauseTransport.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CauseTransport.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h diff --git a/e2sim/e2apv1sim/ASN1c/CellResourceReportListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CellResourceReportListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/CellResourceReportListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CellResourceReportListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/Criticality.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Criticality.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.c diff --git a/e2sim/e2apv1sim/ASN1c/Criticality.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Criticality.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.h diff --git a/e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.c diff --git a/e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.h diff --git a/e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.c diff --git a/e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/CriticalityDiagnostics.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.h diff --git a/e2sim/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/ASN1c/E2AP-PDU.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2AP-PDU.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c diff --git a/e2sim/e2apv1sim/ASN1c/E2AP-PDU.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2AP-PDU.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.c diff --git a/e2sim/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.h diff --git a/e2sim/e2apv1sim/ASN1c/E2setupFailure.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2setupFailure.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c diff --git a/e2sim/e2apv1sim/ASN1c/E2setupFailure.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2setupFailure.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h diff --git a/e2sim/e2apv1sim/ASN1c/E2setupRequest.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2setupRequest.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c diff --git a/e2sim/e2apv1sim/ASN1c/E2setupRequest.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2setupRequest.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h diff --git a/e2sim/e2apv1sim/ASN1c/E2setupResponse.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2setupResponse.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c diff --git a/e2sim/e2apv1sim/ASN1c/E2setupResponse.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/E2setupResponse.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h diff --git a/e2sim/e2apv1sim/ASN1c/ENB-ID-Choice.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ENB-ID-Choice.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c diff --git a/e2sim/e2apv1sim/ASN1c/ENB-ID-Choice.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ENB-ID-Choice.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h diff --git a/e2sim/e2apv1sim/ASN1c/ENB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ENB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/ENB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ENB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/ENGNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ENGNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/ENGNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ENGNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c diff --git a/e2sim/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h diff --git a/e2sim/e2apv1sim/ASN1c/EPC-DU-PM-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/EPC-DU-PM-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/EPC-DU-PM-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/EPC-DU-PM-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/ErrorIndication.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ErrorIndication.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c diff --git a/e2sim/e2apv1sim/ASN1c/ErrorIndication.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ErrorIndication.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h diff --git a/e2sim/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c diff --git a/e2sim/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h diff --git a/e2sim/e2apv1sim/ASN1c/FGC-DU-PM-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FGC-DU-PM-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/FGC-DU-PM-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FGC-DU-PM-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-CU-CP-Name.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-CU-CP-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-CU-CP-Name.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-CU-CP-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-CU-UP-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-CU-UP-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-CU-UP-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-CU-UP-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-CU-UP-Name.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-CU-UP-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-CU-UP-Name.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-CU-UP-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-DU-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-DU-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-DU-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-DU-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-DU-Name.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-DU-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-DU-Name.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-DU-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-ID-Choice.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-ID-Choice.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-ID-Choice.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-ID-Choice.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h diff --git a/e2sim/e2apv1sim/ASN1c/GNB-Name.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c diff --git a/e2sim/e2apv1sim/ASN1c/GNB-Name.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GNB-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalENB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalENB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalENB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalENB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalRIC-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalRIC-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalRIC-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalRIC-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalenGNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalenGNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalenGNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalenGNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalgNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalgNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalgNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalgNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/GlobalngeNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalngeNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/GlobalngeNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/GlobalngeNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/INTEGER.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/INTEGER.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c diff --git a/e2sim/e2apv1sim/ASN1c/INTEGER.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/INTEGER.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h diff --git a/e2sim/e2apv1sim/ASN1c/INTEGER_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/INTEGER_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/InitiatingMessage.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/InitiatingMessage.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.c diff --git a/e2sim/e2apv1sim/ASN1c/InitiatingMessage.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/InitiatingMessage.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.h diff --git a/e2sim/e2apv1sim/ASN1c/Makefile.am.asn1convert b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.asn1convert similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Makefile.am.asn1convert rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.asn1convert diff --git a/e2sim/e2apv1sim/ASN1c/Makefile.am.libasncodec b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.libasncodec similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Makefile.am.libasncodec rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.libasncodec diff --git a/e2sim/e2apv1sim/ASN1c/NI-Type.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NI-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c diff --git a/e2sim/e2apv1sim/ASN1c/NI-Type.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NI-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h diff --git a/e2sim/e2apv1sim/ASN1c/NRCGI.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NRCGI.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c diff --git a/e2sim/e2apv1sim/ASN1c/NRCGI.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NRCGI.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h diff --git a/e2sim/e2apv1sim/ASN1c/NRCellIdentity.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NRCellIdentity.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c diff --git a/e2sim/e2apv1sim/ASN1c/NRCellIdentity.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NRCellIdentity.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h diff --git a/e2sim/e2apv1sim/ASN1c/NativeEnumerated.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NativeEnumerated.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.c diff --git a/e2sim/e2apv1sim/ASN1c/NativeEnumerated.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NativeEnumerated.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.h diff --git a/e2sim/e2apv1sim/ASN1c/NativeEnumerated_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NativeEnumerated_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/NativeInteger.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NativeInteger.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c diff --git a/e2sim/e2apv1sim/ASN1c/NativeInteger.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NativeInteger.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h diff --git a/e2sim/e2apv1sim/ASN1c/NativeInteger_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/NativeInteger_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/OCTET_STRING.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCTET_STRING.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c diff --git a/e2sim/e2apv1sim/ASN1c/OCTET_STRING.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCTET_STRING.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h diff --git a/e2sim/e2apv1sim/ASN1c/OCTET_STRING_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCTET_STRING_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/OCUCP-PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCUCP-PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/OCUCP-PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCUCP-PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/OCUUP-PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCUUP-PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/OCUUP-PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OCUUP-PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/ODU-PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ODU-PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/ODU-PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ODU-PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/OPEN_TYPE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OPEN_TYPE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c diff --git a/e2sim/e2apv1sim/ASN1c/OPEN_TYPE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OPEN_TYPE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h diff --git a/e2sim/e2apv1sim/ASN1c/OPEN_TYPE_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/OPEN_TYPE_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/PF-ContainerListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PF-ContainerListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/PF-ContainerListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PF-ContainerListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/PLMN-Identity.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PLMN-Identity.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c diff --git a/e2sim/e2apv1sim/ASN1c/PLMN-Identity.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PLMN-Identity.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h diff --git a/e2sim/e2apv1sim/ASN1c/PM-Containers-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PM-Containers-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.c diff --git a/e2sim/e2apv1sim/ASN1c/PM-Containers-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PM-Containers-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.h diff --git a/e2sim/e2apv1sim/ASN1c/PerQCIReportListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PerQCIReportListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/PerQCIReportListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PerQCIReportListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c diff --git a/e2sim/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h diff --git a/e2sim/e2apv1sim/ASN1c/PlmnID-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PlmnID-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c diff --git a/e2sim/e2apv1sim/ASN1c/PlmnID-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PlmnID-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h diff --git a/e2sim/e2apv1sim/ASN1c/Presence.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Presence.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c diff --git a/e2sim/e2apv1sim/ASN1c/Presence.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Presence.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h diff --git a/e2sim/e2apv1sim/ASN1c/PrintableString.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PrintableString.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c diff --git a/e2sim/e2apv1sim/ASN1c/PrintableString.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/PrintableString.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h diff --git a/e2sim/e2apv1sim/ASN1c/ProcedureCode.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProcedureCode.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c diff --git a/e2sim/e2apv1sim/ASN1c/ProcedureCode.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProcedureCode.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-Field.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-Field.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-Field.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-Field.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-ID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c diff --git a/e2sim/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h diff --git a/e2sim/e2apv1sim/ASN1c/RAN-Container.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RAN-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c diff --git a/e2sim/e2apv1sim/ASN1c/RAN-Container.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RAN-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h diff --git a/e2sim/e2apv1sim/ASN1c/RANcallProcess-ID-string.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANcallProcess-ID-string.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.c diff --git a/e2sim/e2apv1sim/ASN1c/RANcallProcess-ID-string.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANcallProcess-ID-string.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunction-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunction-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunction-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunction-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunction-Name.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunction-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunction-Name.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunction-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionID-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionID-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionID-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionID-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionRevision.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionRevision.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionRevision.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionRevision.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctions-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctions-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctions-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctions-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionsID-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionsID-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionsID-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionsID-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RIC-Format-Type.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-Format-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c diff --git a/e2sim/e2apv1sim/ASN1c/RIC-Format-Type.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-Format-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h diff --git a/e2sim/e2apv1sim/ASN1c/RIC-ReportStyle-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-ReportStyle-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RIC-ReportStyle-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-ReportStyle-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RIC-Style-Name.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-Style-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c diff --git a/e2sim/e2apv1sim/ASN1c/RIC-Style-Name.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-Style-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h diff --git a/e2sim/e2apv1sim/ASN1c/RIC-Style-Type.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-Style-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c diff --git a/e2sim/e2apv1sim/ASN1c/RIC-Style-Type.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RIC-Style-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-Admitted-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-Admitted-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-Admitted-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-Admitted-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-Admitted-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-Admitted-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-Admitted-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-Admitted-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/RICactionDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactionDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.c diff --git a/e2sim/e2apv1sim/ASN1c/RICactionDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactionDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.h diff --git a/e2sim/e2apv1sim/ASN1c/RICactionID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactionID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c diff --git a/e2sim/e2apv1sim/ASN1c/RICactionID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactionID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h diff --git a/e2sim/e2apv1sim/ASN1c/RICactionType.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactionType.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c diff --git a/e2sim/e2apv1sim/ASN1c/RICactionType.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactionType.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h diff --git a/e2sim/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c diff --git a/e2sim/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcallProcessID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcallProcessID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcallProcessID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcallProcessID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolAckRequest.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolAckRequest.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolAckRequest.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolAckRequest.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolAcknowledge.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolAcknowledge.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolAcknowledge.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolAcknowledge.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolFailure.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolFailure.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolFailure.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolFailure.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolHeader.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolHeader.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolHeader.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolHeader.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolMessage.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolMessage.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolMessage.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolMessage.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolOutcome.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolOutcome.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolOutcome.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolOutcome.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolRequest.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolRequest.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolRequest.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolRequest.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.h diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolStatus.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolStatus.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.c diff --git a/e2sim/e2apv1sim/ASN1c/RICcontrolStatus.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICcontrolStatus.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.h diff --git a/e2sim/e2apv1sim/ASN1c/RICeventTriggerDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICeventTriggerDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.c diff --git a/e2sim/e2apv1sim/ASN1c/RICeventTriggerDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICeventTriggerDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.h diff --git a/e2sim/e2apv1sim/ASN1c/RICindication.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindication.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.c diff --git a/e2sim/e2apv1sim/ASN1c/RICindication.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindication.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.h diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationHeader.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationHeader.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.c diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationHeader.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationHeader.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.h diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationMessage.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationMessage.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.c diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationMessage.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationMessage.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.h diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationSN.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationSN.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationSN.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationSN.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationType.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationType.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.c diff --git a/e2sim/e2apv1sim/ASN1c/RICindicationType.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICindicationType.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.h diff --git a/e2sim/e2apv1sim/ASN1c/RICrequestID.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICrequestID.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c diff --git a/e2sim/e2apv1sim/ASN1c/RICrequestID.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICrequestID.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceQuery.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceQuery.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceQuery.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceQuery.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceUpdate.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceUpdate.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.c diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceUpdate.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceUpdate.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.h diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceUpdateFailure.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceUpdateFailure.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.c diff --git a/e2sim/e2apv1sim/ASN1c/RICserviceUpdateFailure.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICserviceUpdateFailure.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDetails.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDetails.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionDetails.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionDetails.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionFailure.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionFailure.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionFailure.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionFailure.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionRequest.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionRequest.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionRequest.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionRequest.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionResponse.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionResponse.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubscriptionResponse.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubscriptionResponse.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubsequentAction.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubsequentAction.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubsequentAction.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubsequentAction.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.h diff --git a/e2sim/e2apv1sim/ASN1c/RICsubsequentActionType.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubsequentActionType.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.c diff --git a/e2sim/e2apv1sim/ASN1c/RICsubsequentActionType.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICsubsequentActionType.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.h diff --git a/e2sim/e2apv1sim/ASN1c/RICtimeToWait.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICtimeToWait.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c diff --git a/e2sim/e2apv1sim/ASN1c/RICtimeToWait.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RICtimeToWait.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h diff --git a/e2sim/e2apv1sim/ASN1c/RT-Period-IE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RT-Period-IE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c diff --git a/e2sim/e2apv1sim/ASN1c/RT-Period-IE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/RT-Period-IE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h diff --git a/e2sim/e2apv1sim/ASN1c/ResetRequest.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ResetRequest.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c diff --git a/e2sim/e2apv1sim/ASN1c/ResetRequest.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ResetRequest.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h diff --git a/e2sim/e2apv1sim/ASN1c/ResetResponse.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ResetResponse.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c diff --git a/e2sim/e2apv1sim/ASN1c/ResetResponse.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ResetResponse.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h diff --git a/e2sim/e2apv1sim/ASN1c/SNSSAI.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SNSSAI.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c diff --git a/e2sim/e2apv1sim/ASN1c/SNSSAI.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SNSSAI.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h diff --git a/e2sim/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/SliceToReportListItem.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SliceToReportListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.c diff --git a/e2sim/e2apv1sim/ASN1c/SliceToReportListItem.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SliceToReportListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.h diff --git a/e2sim/e2apv1sim/ASN1c/SuccessfulOutcome.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SuccessfulOutcome.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.c diff --git a/e2sim/e2apv1sim/ASN1c/SuccessfulOutcome.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/SuccessfulOutcome.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.h diff --git a/e2sim/e2apv1sim/ASN1c/TimeToWait.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/TimeToWait.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c diff --git a/e2sim/e2apv1sim/ASN1c/TimeToWait.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/TimeToWait.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h diff --git a/e2sim/e2apv1sim/ASN1c/Timestamp.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Timestamp.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c diff --git a/e2sim/e2apv1sim/ASN1c/Timestamp.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Timestamp.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h diff --git a/e2sim/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c diff --git a/e2sim/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h diff --git a/e2sim/e2apv1sim/ASN1c/TriggeringMessage.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/TriggeringMessage.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.c diff --git a/e2sim/e2apv1sim/ASN1c/TriggeringMessage.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/TriggeringMessage.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.h diff --git a/e2sim/e2apv1sim/ASN1c/TypeOfError.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/TypeOfError.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c diff --git a/e2sim/e2apv1sim/ASN1c/TypeOfError.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/TypeOfError.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h diff --git a/e2sim/e2apv1sim/ASN1c/UE-Report-Type.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/UE-Report-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c diff --git a/e2sim/e2apv1sim/ASN1c/UE-Report-Type.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/UE-Report-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h diff --git a/e2sim/e2apv1sim/ASN1c/UnsuccessfulOutcome.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/UnsuccessfulOutcome.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.c diff --git a/e2sim/e2apv1sim/ASN1c/UnsuccessfulOutcome.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/UnsuccessfulOutcome.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_SET_OF.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_SET_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_SET_OF.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_SET_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_application.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_application.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_application.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_application.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_bit_data.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_bit_data.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_bit_data.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_bit_data.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_codecs.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_codecs.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_codecs_prim.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_codecs_prim.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_codecs_prim.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_codecs_prim.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_constant.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_constant.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_internal.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_internal.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_internal.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_internal.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_ioc.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_ioc.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_random_fill.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_random_fill.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c diff --git a/e2sim/e2apv1sim/ASN1c/asn_random_fill.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_random_fill.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h diff --git a/e2sim/e2apv1sim/ASN1c/asn_system.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_system.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/asn_system.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_system.h diff --git a/e2sim/e2apv1sim/ASN1c/ber_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ber_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c diff --git a/e2sim/e2apv1sim/ASN1c/ber_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ber_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h diff --git a/e2sim/e2apv1sim/ASN1c/ber_tlv_length.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ber_tlv_length.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c diff --git a/e2sim/e2apv1sim/ASN1c/ber_tlv_length.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ber_tlv_length.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h diff --git a/e2sim/e2apv1sim/ASN1c/ber_tlv_tag.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ber_tlv_tag.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c diff --git a/e2sim/e2apv1sim/ASN1c/ber_tlv_tag.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/ber_tlv_tag.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h diff --git a/e2sim/e2apv1sim/ASN1c/constr_CHOICE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_CHOICE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_CHOICE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_CHOICE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h diff --git a/e2sim/e2apv1sim/ASN1c/constr_CHOICE_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_CHOICE_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_SEQUENCE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SEQUENCE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_SEQUENCE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SEQUENCE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h diff --git a/e2sim/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h diff --git a/e2sim/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_SET_OF.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SET_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_SET_OF.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SET_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h diff --git a/e2sim/e2apv1sim/ASN1c/constr_SET_OF_oer.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF_oer.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_SET_OF_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF_oer.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_TYPE.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_TYPE.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c diff --git a/e2sim/e2apv1sim/ASN1c/constr_TYPE.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constr_TYPE.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h diff --git a/e2sim/e2apv1sim/ASN1c/constraints.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constraints.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.c diff --git a/e2sim/e2apv1sim/ASN1c/constraints.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/constraints.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.h diff --git a/e2sim/e2apv1sim/ASN1c/converter-example.mk b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/converter-example.mk similarity index 100% rename from e2sim/e2apv1sim/ASN1c/converter-example.mk rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/converter-example.mk diff --git a/e2sim/e2apv1sim/ASN1c/der_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/der_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c diff --git a/e2sim/e2apv1sim/ASN1c/der_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/der_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h diff --git a/e2sim/e2apv1sim/ASN1c/oer_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/oer_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c diff --git a/e2sim/e2apv1sim/ASN1c/oer_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/oer_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h diff --git a/e2sim/e2apv1sim/ASN1c/oer_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/oer_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c diff --git a/e2sim/e2apv1sim/ASN1c/oer_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/oer_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h diff --git a/e2sim/e2apv1sim/ASN1c/oer_support.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/oer_support.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.c diff --git a/e2sim/e2apv1sim/ASN1c/oer_support.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/oer_support.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.h diff --git a/e2sim/e2apv1sim/ASN1c/pdu_collection.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/pdu_collection.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c diff --git a/e2sim/e2apv1sim/ASN1c/per_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c diff --git a/e2sim/e2apv1sim/ASN1c/per_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h diff --git a/e2sim/e2apv1sim/ASN1c/per_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c diff --git a/e2sim/e2apv1sim/ASN1c/per_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h diff --git a/e2sim/e2apv1sim/ASN1c/per_opentype.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_opentype.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c diff --git a/e2sim/e2apv1sim/ASN1c/per_opentype.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_opentype.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h diff --git a/e2sim/e2apv1sim/ASN1c/per_support.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_support.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.c diff --git a/e2sim/e2apv1sim/ASN1c/per_support.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/per_support.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.h diff --git a/e2sim/e2apv1sim/ASN1c/xer_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/xer_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c diff --git a/e2sim/e2apv1sim/ASN1c/xer_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/xer_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h diff --git a/e2sim/e2apv1sim/ASN1c/xer_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/xer_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c diff --git a/e2sim/e2apv1sim/ASN1c/xer_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/xer_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h diff --git a/e2sim/e2apv1sim/ASN1c/xer_support.c b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.c similarity index 100% rename from e2sim/e2apv1sim/ASN1c/xer_support.c rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.c diff --git a/e2sim/e2apv1sim/ASN1c/xer_support.h b/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.h similarity index 100% rename from e2sim/e2apv1sim/ASN1c/xer_support.h rename to e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt b/e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt new file mode 100644 index 0000000..66fbf41 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/Dockerfile b/e2sim/e2sm_examples/kpm_e2sm/Dockerfile new file mode 100644 index 0000000..6b16671 --- /dev/null +++ b/e2sim/e2sm_examples/kpm_e2sm/Dockerfile @@ -0,0 +1,102 @@ +# 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:8-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 +COPY 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 [ "/usr/local/bin/ts_xapp" ] diff --git a/e2sim/e2apv1sim/cellMeasReport.txt b/e2sim/e2sm_examples/kpm_e2sm/cellMeasReport.txt similarity index 100% rename from e2sim/e2apv1sim/cellMeasReport.txt rename to e2sim/e2sm_examples/kpm_e2sm/cellMeasReport.txt diff --git a/e2sim/e2sm_examples/kpm_e2sm/nlohmann_json_release b/e2sim/e2sm_examples/kpm_e2sm/nlohmann_json_release new file mode 160000 index 0000000..8fedbef --- /dev/null +++ b/e2sim/e2sm_examples/kpm_e2sm/nlohmann_json_release @@ -0,0 +1 @@ +Subproject commit 8fedbef70ff9c5ddea15cdb765687ba946f0d461 diff --git a/e2sim/e2apv1sim/e2sim/simulation.txt b/e2sim/e2sm_examples/kpm_e2sm/simulation.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/simulation.txt rename to e2sim/e2sm_examples/kpm_e2sm/simulation.txt diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ANY.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ANY.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ANY.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ANY.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/BIT_STRING.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/BIT_STRING.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/BIT_STRING.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/BIT_STRING.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/C-RNTI.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/C-RNTI.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/C-RNTI.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/C-RNTI.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt new file mode 100644 index 0000000..964af7b --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c new file mode 100644 index 0000000..294c0a7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h new file mode 100644 index 0000000..1c168e7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c new file mode 100644 index 0000000..11ade29 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h new file mode 100644 index 0000000..44fb6b9 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..d7d2008 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..67008e3 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c new file mode 100644 index 0000000..b4a1dfb --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h new file mode 100644 index 0000000..187b6ec --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..72dca60 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..a247216 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c new file mode 100644 index 0000000..0ac9911 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f92578e --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c new file mode 100644 index 0000000..8f9f73b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h new file mode 100644 index 0000000..76d1b89 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..c2350c2 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..3977363 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..d54f845 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..57f9cf4 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..ed81ffc --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9500793 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..8d6888d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..600e848 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..8f21633 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..ab89da4 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..20b2f35 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..c09d454 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..81dce04 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..64fda6d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..2818f1c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..2caa477 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c new file mode 100644 index 0000000..d0280b1 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8e5dcf6 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..d1cfbf9 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..b5aabcf --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..7392861 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..c3b4930 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..f6d50d8 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..a9152e3 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..5e72065 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..7b460d2 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..552725f --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..4646519 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/GNB-Name.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-Name.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..cc0a706 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..6257cd1 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..cdc62e7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..a3fa696 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..ee8b882 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..037537a --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..ea2e38c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..8f15471 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..f942bce --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..0311e40 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..6ceca00 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..c8683e2 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..9f85294 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..7b7fc65 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..cdf362c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..75933b6 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..740f552 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..ac18b81 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..a3dfaed --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..843002a --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/INTEGER.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/INTEGER.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/INTEGER.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/INTEGER.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..9dc4ccf --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..cea345e --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..62c2707 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..7a4c612 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/NI-Type.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NI-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NI-Type.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NI-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NRCGI.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NRCGI.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NRCGI.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NRCGI.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NativeInteger.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NativeInteger.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NativeInteger.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NativeInteger.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PF-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PF-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PF-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PF-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..d0a3d97 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..0083974 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PlmnID-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PlmnID-List.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PlmnID-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PlmnID-List.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c new file mode 100644 index 0000000..e28be1a --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h new file mode 100644 index 0000000..9af00f6 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/PrintableString.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PrintableString.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PrintableString.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PrintableString.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..31d0944 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..1d85971 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4636657 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..750426b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c434a72 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..c895e7e --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..44a410d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..178cc55 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..9019178 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..dd9a5be --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..e6abc22 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..a62f34b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..1d70ccf --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..ca20e0d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..c7466e3 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..cb581b9 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..d9b038e --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..f733073 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/RAN-Container.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RAN-Container.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RAN-Container.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RAN-Container.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..3cc4346 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..b791652 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..2e60af0 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..93dca22 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..3fa7c18 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..1566a03 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..964225d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..dc825cf --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..ac39adc --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..338e066 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a2aa7ed --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..837b0e2 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..61f8e02 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..f1193cb --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..1cc0185 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..1cad48c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..e5345f7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..4949436 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..edb976f --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..3ad904a --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..457e9ff --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..09d9711 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..3cc57e0 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..0d1b376 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..abb292f --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..c38717c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..94f5b2f --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..1bbbd47 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..9a0588b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..9d89df9 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c new file mode 100644 index 0000000..56c67b4 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h new file mode 100644 index 0000000..68fc9b4 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c new file mode 100644 index 0000000..7fd484b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h new file mode 100644 index 0000000..2f1f5ae --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..e47fa8d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..3e92509 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..4cfed50 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..dd303af --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..0fd327b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..11fc016 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..5e821fe --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..34c81b3 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..76b0bdc --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..7a28d41 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..c79d335 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..2301656 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..9004d22 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..a501aaf --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..36934f5 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..fa6bcd8 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..c5ccbff --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..7bed8f2 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..9b183a8 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..54474e7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..ecf7fc1 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..b9c63f6 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c new file mode 100644 index 0000000..acadb86 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h new file mode 100644 index 0000000..c6a89bf --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..64e4144 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..d6655e1 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..cea2831 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..5d8ee52 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..453d308 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..f286d17 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c new file mode 100644 index 0000000..8297a1e --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h new file mode 100644 index 0000000..769ece8 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dd83fcd --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h new file mode 100644 index 0000000..25749c0 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..325f270 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..d15d587 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..86f3600 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..50bbff7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..875bb38 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..a50b20d --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..369d521 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..eb38105 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..0f7c74f --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..352ad75 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..c584cc1 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..12b34f8 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..105b324 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..654a420 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..a1d91a4 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..c16b877 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..b206576 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..6ff580b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..754c2d7 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..2baa323 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..a9088f3 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..24f30de --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..431301b --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..b4f4837 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..fb10ee0 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..1397029 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..866c010 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..ac9cd3b --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c new file mode 100644 index 0000000..8d2dc82 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h new file mode 100644 index 0000000..f92e0ed --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c new file mode 100644 index 0000000..30f6ed9 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h new file mode 100644 index 0000000..139b953 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/SNSSAI.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SNSSAI.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SNSSAI.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SNSSAI.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..1fbef5e --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..5df655a --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c new file mode 100644 index 0000000..ad3c27c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h new file mode 100644 index 0000000..7c06018 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/Timestamp.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Timestamp.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Timestamp.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Timestamp.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..fb10f3c --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..51bb220 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c new file mode 100644 index 0000000..6b4f37e --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h new file mode 100644 index 0000000..7dee671 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..7cd5cd5 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..0a1cb1a --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_application.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_application.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_application.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_application.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_bit_data.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_bit_data.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_bit_data.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_bit_data.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_codecs.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_codecs.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h new file mode 100644 index 0000000..a6f348c --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/asn_internal.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_internal.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_internal.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_internal.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_ioc.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_ioc.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_random_fill.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_random_fill.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_random_fill.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_random_fill.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_system.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_system.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ber_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ber_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ber_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ber_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_TYPE.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_TYPE.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constr_TYPE.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constr_TYPE.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constraints.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constraints.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/constraints.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/constraints.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk new file mode 100644 index 0000000..ef02a5b --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/der_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/der_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/der_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/der_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/oer_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/oer_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/oer_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/oer_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/oer_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/oer_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/oer_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/oer_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/oer_support.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/oer_support.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/oer_support.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/oer_support.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c new file mode 100644 index 0000000..ea8309c --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ASN1c/per_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_opentype.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_opentype.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_opentype.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_opentype.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_support.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_support.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/per_support.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/per_support.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/xer_decoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/xer_decoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/xer_decoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/xer_decoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/xer_encoder.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/xer_encoder.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/xer_encoder.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/xer_encoder.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/xer_support.c b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/xer_support.c rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/xer_support.h b/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/xer_support.h rename to e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt new file mode 100644 index 0000000..ed6e7ad --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp new file mode 100644 index 0000000..29b6a48 --- /dev/null +++ b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp @@ -0,0 +1,1872 @@ +/***************************************************************************** +# * +# 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; + } + + + 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/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp new file mode 100644 index 0000000..09a3583 --- /dev/null +++ b/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/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp new file mode 100644 index 0000000..3f0d013 --- /dev/null +++ b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp @@ -0,0 +1,662 @@ +/***************************************************************************** +# * +# 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 + + + +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"; + + e2sim.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"; + + e2sim.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"); + e2sim.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(); + + e2sim.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/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp new file mode 100644 index 0000000..13b12d3 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/ueMeasReport.txt b/e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/ueMeasReport.txt rename to e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt diff --git a/e2sim/ASN1c/ABS-Status.c b/e2sim/previous/ASN1c/ABS-Status.c similarity index 100% rename from e2sim/ASN1c/ABS-Status.c rename to e2sim/previous/ASN1c/ABS-Status.c diff --git a/e2sim/ASN1c/ABS-Status.h b/e2sim/previous/ASN1c/ABS-Status.h similarity index 100% rename from e2sim/ASN1c/ABS-Status.h rename to e2sim/previous/ASN1c/ABS-Status.h diff --git a/e2sim/ASN1c/ABSInformation.c b/e2sim/previous/ASN1c/ABSInformation.c similarity index 100% rename from e2sim/ASN1c/ABSInformation.c rename to e2sim/previous/ASN1c/ABSInformation.c diff --git a/e2sim/ASN1c/ABSInformation.h b/e2sim/previous/ASN1c/ABSInformation.h similarity index 100% rename from e2sim/ASN1c/ABSInformation.h rename to e2sim/previous/ASN1c/ABSInformation.h diff --git a/e2sim/ASN1c/ABSInformationFDD.c b/e2sim/previous/ASN1c/ABSInformationFDD.c similarity index 100% rename from e2sim/ASN1c/ABSInformationFDD.c rename to e2sim/previous/ASN1c/ABSInformationFDD.c diff --git a/e2sim/ASN1c/ABSInformationFDD.h b/e2sim/previous/ASN1c/ABSInformationFDD.h similarity index 100% rename from e2sim/ASN1c/ABSInformationFDD.h rename to e2sim/previous/ASN1c/ABSInformationFDD.h diff --git a/e2sim/ASN1c/ABSInformationTDD.c b/e2sim/previous/ASN1c/ABSInformationTDD.c similarity index 100% rename from e2sim/ASN1c/ABSInformationTDD.c rename to e2sim/previous/ASN1c/ABSInformationTDD.c diff --git a/e2sim/ASN1c/ABSInformationTDD.h b/e2sim/previous/ASN1c/ABSInformationTDD.h similarity index 100% rename from e2sim/ASN1c/ABSInformationTDD.h rename to e2sim/previous/ASN1c/ABSInformationTDD.h diff --git a/e2sim/ASN1c/ANY.c b/e2sim/previous/ASN1c/ANY.c similarity index 100% rename from e2sim/ASN1c/ANY.c rename to e2sim/previous/ASN1c/ANY.c diff --git a/e2sim/ASN1c/ANY.h b/e2sim/previous/ASN1c/ANY.h similarity index 100% rename from e2sim/ASN1c/ANY.h rename to e2sim/previous/ASN1c/ANY.h diff --git a/e2sim/ASN1c/AS-SecurityInformation.c b/e2sim/previous/ASN1c/AS-SecurityInformation.c similarity index 100% rename from e2sim/ASN1c/AS-SecurityInformation.c rename to e2sim/previous/ASN1c/AS-SecurityInformation.c diff --git a/e2sim/ASN1c/AS-SecurityInformation.h b/e2sim/previous/ASN1c/AS-SecurityInformation.h similarity index 100% rename from e2sim/ASN1c/AS-SecurityInformation.h rename to e2sim/previous/ASN1c/AS-SecurityInformation.h diff --git a/e2sim/ASN1c/ActionParameter-ID.c b/e2sim/previous/ASN1c/ActionParameter-ID.c similarity index 100% rename from e2sim/ASN1c/ActionParameter-ID.c rename to e2sim/previous/ASN1c/ActionParameter-ID.c diff --git a/e2sim/ASN1c/ActionParameter-ID.h b/e2sim/previous/ASN1c/ActionParameter-ID.h similarity index 100% rename from e2sim/ASN1c/ActionParameter-ID.h rename to e2sim/previous/ASN1c/ActionParameter-ID.h diff --git a/e2sim/ASN1c/ActionParameter-Item.c b/e2sim/previous/ASN1c/ActionParameter-Item.c similarity index 100% rename from e2sim/ASN1c/ActionParameter-Item.c rename to e2sim/previous/ASN1c/ActionParameter-Item.c diff --git a/e2sim/ASN1c/ActionParameter-Item.h b/e2sim/previous/ASN1c/ActionParameter-Item.h similarity index 100% rename from e2sim/ASN1c/ActionParameter-Item.h rename to e2sim/previous/ASN1c/ActionParameter-Item.h diff --git a/e2sim/ASN1c/ActionParameter-Value.c b/e2sim/previous/ASN1c/ActionParameter-Value.c similarity index 100% rename from e2sim/ASN1c/ActionParameter-Value.c rename to e2sim/previous/ASN1c/ActionParameter-Value.c diff --git a/e2sim/ASN1c/ActionParameter-Value.h b/e2sim/previous/ASN1c/ActionParameter-Value.h similarity index 100% rename from e2sim/ASN1c/ActionParameter-Value.h rename to e2sim/previous/ASN1c/ActionParameter-Value.h diff --git a/e2sim/ASN1c/ActivatedCellList-Item.c b/e2sim/previous/ASN1c/ActivatedCellList-Item.c similarity index 100% rename from e2sim/ASN1c/ActivatedCellList-Item.c rename to e2sim/previous/ASN1c/ActivatedCellList-Item.c diff --git a/e2sim/ASN1c/ActivatedCellList-Item.h b/e2sim/previous/ASN1c/ActivatedCellList-Item.h similarity index 100% rename from e2sim/ASN1c/ActivatedCellList-Item.h rename to e2sim/previous/ASN1c/ActivatedCellList-Item.h diff --git a/e2sim/ASN1c/ActivatedCellList.c b/e2sim/previous/ASN1c/ActivatedCellList.c similarity index 100% rename from e2sim/ASN1c/ActivatedCellList.c rename to e2sim/previous/ASN1c/ActivatedCellList.c diff --git a/e2sim/ASN1c/ActivatedCellList.h b/e2sim/previous/ASN1c/ActivatedCellList.h similarity index 100% rename from e2sim/ASN1c/ActivatedCellList.h rename to e2sim/previous/ASN1c/ActivatedCellList.h diff --git a/e2sim/ASN1c/ActivatedNRCellList-Item.c b/e2sim/previous/ASN1c/ActivatedNRCellList-Item.c similarity index 100% rename from e2sim/ASN1c/ActivatedNRCellList-Item.c rename to e2sim/previous/ASN1c/ActivatedNRCellList-Item.c diff --git a/e2sim/ASN1c/ActivatedNRCellList-Item.h b/e2sim/previous/ASN1c/ActivatedNRCellList-Item.h similarity index 100% rename from e2sim/ASN1c/ActivatedNRCellList-Item.h rename to e2sim/previous/ASN1c/ActivatedNRCellList-Item.h diff --git a/e2sim/ASN1c/ActivatedNRCellList.c b/e2sim/previous/ASN1c/ActivatedNRCellList.c similarity index 100% rename from e2sim/ASN1c/ActivatedNRCellList.c rename to e2sim/previous/ASN1c/ActivatedNRCellList.c diff --git a/e2sim/ASN1c/ActivatedNRCellList.h b/e2sim/previous/ASN1c/ActivatedNRCellList.h similarity index 100% rename from e2sim/ASN1c/ActivatedNRCellList.h rename to e2sim/previous/ASN1c/ActivatedNRCellList.h diff --git a/e2sim/ASN1c/ActivationID.c b/e2sim/previous/ASN1c/ActivationID.c similarity index 100% rename from e2sim/ASN1c/ActivationID.c rename to e2sim/previous/ASN1c/ActivationID.c diff --git a/e2sim/ASN1c/ActivationID.h b/e2sim/previous/ASN1c/ActivationID.h similarity index 100% rename from e2sim/ASN1c/ActivationID.h rename to e2sim/previous/ASN1c/ActivationID.h diff --git a/e2sim/ASN1c/AdditionalSpecialSubframe-Info.c b/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.c similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframe-Info.c rename to e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.c diff --git a/e2sim/ASN1c/AdditionalSpecialSubframe-Info.h b/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.h similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframe-Info.h rename to e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.h diff --git a/e2sim/ASN1c/AdditionalSpecialSubframeExtension-Info.c b/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.c similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframeExtension-Info.c rename to e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.c diff --git a/e2sim/ASN1c/AdditionalSpecialSubframeExtension-Info.h b/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.h similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframeExtension-Info.h rename to e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.h diff --git a/e2sim/ASN1c/AdditionalSpecialSubframePatterns.c b/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.c similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframePatterns.c rename to e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.c diff --git a/e2sim/ASN1c/AdditionalSpecialSubframePatterns.h b/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.h similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframePatterns.h rename to e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.h diff --git a/e2sim/ASN1c/AdditionalSpecialSubframePatternsExtension.c b/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.c similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframePatternsExtension.c rename to e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.c diff --git a/e2sim/ASN1c/AdditionalSpecialSubframePatternsExtension.h b/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.h similarity index 100% rename from e2sim/ASN1c/AdditionalSpecialSubframePatternsExtension.h rename to e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.h diff --git a/e2sim/ASN1c/AerialUEsubscriptionInformation.c b/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.c similarity index 100% rename from e2sim/ASN1c/AerialUEsubscriptionInformation.c rename to e2sim/previous/ASN1c/AerialUEsubscriptionInformation.c diff --git a/e2sim/ASN1c/AerialUEsubscriptionInformation.h b/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.h similarity index 100% rename from e2sim/ASN1c/AerialUEsubscriptionInformation.h rename to e2sim/previous/ASN1c/AerialUEsubscriptionInformation.h diff --git a/e2sim/ASN1c/AllocationAndRetentionPriority.c b/e2sim/previous/ASN1c/AllocationAndRetentionPriority.c similarity index 100% rename from e2sim/ASN1c/AllocationAndRetentionPriority.c rename to e2sim/previous/ASN1c/AllocationAndRetentionPriority.c diff --git a/e2sim/ASN1c/AllocationAndRetentionPriority.h b/e2sim/previous/ASN1c/AllocationAndRetentionPriority.h similarity index 100% rename from e2sim/ASN1c/AllocationAndRetentionPriority.h rename to e2sim/previous/ASN1c/AllocationAndRetentionPriority.h diff --git a/e2sim/ASN1c/AreaScopeOfMDT.c b/e2sim/previous/ASN1c/AreaScopeOfMDT.c similarity index 100% rename from e2sim/ASN1c/AreaScopeOfMDT.c rename to e2sim/previous/ASN1c/AreaScopeOfMDT.c diff --git a/e2sim/ASN1c/AreaScopeOfMDT.h b/e2sim/previous/ASN1c/AreaScopeOfMDT.h similarity index 100% rename from e2sim/ASN1c/AreaScopeOfMDT.h rename to e2sim/previous/ASN1c/AreaScopeOfMDT.h diff --git a/e2sim/ASN1c/AreaScopeOfQMC.c b/e2sim/previous/ASN1c/AreaScopeOfQMC.c similarity index 100% rename from e2sim/ASN1c/AreaScopeOfQMC.c rename to e2sim/previous/ASN1c/AreaScopeOfQMC.c diff --git a/e2sim/ASN1c/AreaScopeOfQMC.h b/e2sim/previous/ASN1c/AreaScopeOfQMC.h similarity index 100% rename from e2sim/ASN1c/AreaScopeOfQMC.h rename to e2sim/previous/ASN1c/AreaScopeOfQMC.h diff --git a/e2sim/ASN1c/BIT_STRING.c b/e2sim/previous/ASN1c/BIT_STRING.c similarity index 100% rename from e2sim/ASN1c/BIT_STRING.c rename to e2sim/previous/ASN1c/BIT_STRING.c diff --git a/e2sim/ASN1c/BIT_STRING.h b/e2sim/previous/ASN1c/BIT_STRING.h similarity index 100% rename from e2sim/ASN1c/BIT_STRING.h rename to e2sim/previous/ASN1c/BIT_STRING.h diff --git a/e2sim/ASN1c/BOOLEAN.c b/e2sim/previous/ASN1c/BOOLEAN.c similarity index 100% rename from e2sim/ASN1c/BOOLEAN.c rename to e2sim/previous/ASN1c/BOOLEAN.c diff --git a/e2sim/ASN1c/BOOLEAN.h b/e2sim/previous/ASN1c/BOOLEAN.h similarity index 100% rename from e2sim/ASN1c/BOOLEAN.h rename to e2sim/previous/ASN1c/BOOLEAN.h diff --git a/e2sim/ASN1c/BandInfo.c b/e2sim/previous/ASN1c/BandInfo.c similarity index 100% rename from e2sim/ASN1c/BandInfo.c rename to e2sim/previous/ASN1c/BandInfo.c diff --git a/e2sim/ASN1c/BandInfo.h b/e2sim/previous/ASN1c/BandInfo.h similarity index 100% rename from e2sim/ASN1c/BandInfo.h rename to e2sim/previous/ASN1c/BandInfo.h diff --git a/e2sim/ASN1c/BandwidthReducedSI.c b/e2sim/previous/ASN1c/BandwidthReducedSI.c similarity index 100% rename from e2sim/ASN1c/BandwidthReducedSI.c rename to e2sim/previous/ASN1c/BandwidthReducedSI.c diff --git a/e2sim/ASN1c/BandwidthReducedSI.h b/e2sim/previous/ASN1c/BandwidthReducedSI.h similarity index 100% rename from e2sim/ASN1c/BandwidthReducedSI.h rename to e2sim/previous/ASN1c/BandwidthReducedSI.h diff --git a/e2sim/ASN1c/BearerType.c b/e2sim/previous/ASN1c/BearerType.c similarity index 100% rename from e2sim/ASN1c/BearerType.c rename to e2sim/previous/ASN1c/BearerType.c diff --git a/e2sim/ASN1c/BearerType.h b/e2sim/previous/ASN1c/BearerType.h similarity index 100% rename from e2sim/ASN1c/BearerType.h rename to e2sim/previous/ASN1c/BearerType.h diff --git a/e2sim/ASN1c/BenefitMetric.c b/e2sim/previous/ASN1c/BenefitMetric.c similarity index 100% rename from e2sim/ASN1c/BenefitMetric.c rename to e2sim/previous/ASN1c/BenefitMetric.c diff --git a/e2sim/ASN1c/BenefitMetric.h b/e2sim/previous/ASN1c/BenefitMetric.h similarity index 100% rename from e2sim/ASN1c/BenefitMetric.h rename to e2sim/previous/ASN1c/BenefitMetric.h diff --git a/e2sim/ASN1c/BitRate.c b/e2sim/previous/ASN1c/BitRate.c similarity index 100% rename from e2sim/ASN1c/BitRate.c rename to e2sim/previous/ASN1c/BitRate.c diff --git a/e2sim/ASN1c/BitRate.h b/e2sim/previous/ASN1c/BitRate.h similarity index 100% rename from e2sim/ASN1c/BitRate.h rename to e2sim/previous/ASN1c/BitRate.h diff --git a/e2sim/ASN1c/BluetoothMeasConfig.c b/e2sim/previous/ASN1c/BluetoothMeasConfig.c similarity index 100% rename from e2sim/ASN1c/BluetoothMeasConfig.c rename to e2sim/previous/ASN1c/BluetoothMeasConfig.c diff --git a/e2sim/ASN1c/BluetoothMeasConfig.h b/e2sim/previous/ASN1c/BluetoothMeasConfig.h similarity index 100% rename from e2sim/ASN1c/BluetoothMeasConfig.h rename to e2sim/previous/ASN1c/BluetoothMeasConfig.h diff --git a/e2sim/ASN1c/BluetoothMeasConfigNameList.c b/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.c similarity index 100% rename from e2sim/ASN1c/BluetoothMeasConfigNameList.c rename to e2sim/previous/ASN1c/BluetoothMeasConfigNameList.c diff --git a/e2sim/ASN1c/BluetoothMeasConfigNameList.h b/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.h similarity index 100% rename from e2sim/ASN1c/BluetoothMeasConfigNameList.h rename to e2sim/previous/ASN1c/BluetoothMeasConfigNameList.h diff --git a/e2sim/ASN1c/BluetoothMeasurementConfiguration.c b/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.c similarity index 100% rename from e2sim/ASN1c/BluetoothMeasurementConfiguration.c rename to e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.c diff --git a/e2sim/ASN1c/BluetoothMeasurementConfiguration.h b/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.h similarity index 100% rename from e2sim/ASN1c/BluetoothMeasurementConfiguration.h rename to e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.h diff --git a/e2sim/ASN1c/BluetoothName.c b/e2sim/previous/ASN1c/BluetoothName.c similarity index 100% rename from e2sim/ASN1c/BluetoothName.c rename to e2sim/previous/ASN1c/BluetoothName.c diff --git a/e2sim/ASN1c/BluetoothName.h b/e2sim/previous/ASN1c/BluetoothName.h similarity index 100% rename from e2sim/ASN1c/BluetoothName.h rename to e2sim/previous/ASN1c/BluetoothName.h diff --git a/e2sim/ASN1c/BroadcastPLMNs-Item.c b/e2sim/previous/ASN1c/BroadcastPLMNs-Item.c similarity index 100% rename from e2sim/ASN1c/BroadcastPLMNs-Item.c rename to e2sim/previous/ASN1c/BroadcastPLMNs-Item.c diff --git a/e2sim/ASN1c/BroadcastPLMNs-Item.h b/e2sim/previous/ASN1c/BroadcastPLMNs-Item.h similarity index 100% rename from e2sim/ASN1c/BroadcastPLMNs-Item.h rename to e2sim/previous/ASN1c/BroadcastPLMNs-Item.h diff --git a/e2sim/ASN1c/CNTypeRestrictions.c b/e2sim/previous/ASN1c/CNTypeRestrictions.c similarity index 100% rename from e2sim/ASN1c/CNTypeRestrictions.c rename to e2sim/previous/ASN1c/CNTypeRestrictions.c diff --git a/e2sim/ASN1c/CNTypeRestrictions.h b/e2sim/previous/ASN1c/CNTypeRestrictions.h similarity index 100% rename from e2sim/ASN1c/CNTypeRestrictions.h rename to e2sim/previous/ASN1c/CNTypeRestrictions.h diff --git a/e2sim/ASN1c/CNTypeRestrictionsItem.c b/e2sim/previous/ASN1c/CNTypeRestrictionsItem.c similarity index 100% rename from e2sim/ASN1c/CNTypeRestrictionsItem.c rename to e2sim/previous/ASN1c/CNTypeRestrictionsItem.c diff --git a/e2sim/ASN1c/CNTypeRestrictionsItem.h b/e2sim/previous/ASN1c/CNTypeRestrictionsItem.h similarity index 100% rename from e2sim/ASN1c/CNTypeRestrictionsItem.h rename to e2sim/previous/ASN1c/CNTypeRestrictionsItem.h diff --git a/e2sim/ASN1c/COUNTValueExtended.c b/e2sim/previous/ASN1c/COUNTValueExtended.c similarity index 100% rename from e2sim/ASN1c/COUNTValueExtended.c rename to e2sim/previous/ASN1c/COUNTValueExtended.c diff --git a/e2sim/ASN1c/COUNTValueExtended.h b/e2sim/previous/ASN1c/COUNTValueExtended.h similarity index 100% rename from e2sim/ASN1c/COUNTValueExtended.h rename to e2sim/previous/ASN1c/COUNTValueExtended.h diff --git a/e2sim/ASN1c/COUNTvalue.c b/e2sim/previous/ASN1c/COUNTvalue.c similarity index 100% rename from e2sim/ASN1c/COUNTvalue.c rename to e2sim/previous/ASN1c/COUNTvalue.c diff --git a/e2sim/ASN1c/COUNTvalue.h b/e2sim/previous/ASN1c/COUNTvalue.h similarity index 100% rename from e2sim/ASN1c/COUNTvalue.h rename to e2sim/previous/ASN1c/COUNTvalue.h diff --git a/e2sim/ASN1c/COUNTvaluePDCP-SNlength18.c b/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.c similarity index 100% rename from e2sim/ASN1c/COUNTvaluePDCP-SNlength18.c rename to e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.c diff --git a/e2sim/ASN1c/COUNTvaluePDCP-SNlength18.h b/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.h similarity index 100% rename from e2sim/ASN1c/COUNTvaluePDCP-SNlength18.h rename to e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.h diff --git a/e2sim/ASN1c/CRNTI.c b/e2sim/previous/ASN1c/CRNTI.c similarity index 100% rename from e2sim/ASN1c/CRNTI.c rename to e2sim/previous/ASN1c/CRNTI.c diff --git a/e2sim/ASN1c/CRNTI.h b/e2sim/previous/ASN1c/CRNTI.h similarity index 100% rename from e2sim/ASN1c/CRNTI.h rename to e2sim/previous/ASN1c/CRNTI.h diff --git a/e2sim/ASN1c/CSG-Id.c b/e2sim/previous/ASN1c/CSG-Id.c similarity index 100% rename from e2sim/ASN1c/CSG-Id.c rename to e2sim/previous/ASN1c/CSG-Id.c diff --git a/e2sim/ASN1c/CSG-Id.h b/e2sim/previous/ASN1c/CSG-Id.h similarity index 100% rename from e2sim/ASN1c/CSG-Id.h rename to e2sim/previous/ASN1c/CSG-Id.h diff --git a/e2sim/ASN1c/CSGMembershipStatus.c b/e2sim/previous/ASN1c/CSGMembershipStatus.c similarity index 100% rename from e2sim/ASN1c/CSGMembershipStatus.c rename to e2sim/previous/ASN1c/CSGMembershipStatus.c diff --git a/e2sim/ASN1c/CSGMembershipStatus.h b/e2sim/previous/ASN1c/CSGMembershipStatus.h similarity index 100% rename from e2sim/ASN1c/CSGMembershipStatus.h rename to e2sim/previous/ASN1c/CSGMembershipStatus.h diff --git a/e2sim/ASN1c/CSIReportList.c b/e2sim/previous/ASN1c/CSIReportList.c similarity index 100% rename from e2sim/ASN1c/CSIReportList.c rename to e2sim/previous/ASN1c/CSIReportList.c diff --git a/e2sim/ASN1c/CSIReportList.h b/e2sim/previous/ASN1c/CSIReportList.h similarity index 100% rename from e2sim/ASN1c/CSIReportList.h rename to e2sim/previous/ASN1c/CSIReportList.h diff --git a/e2sim/ASN1c/CSIReportPerCSIProcess.c b/e2sim/previous/ASN1c/CSIReportPerCSIProcess.c similarity index 100% rename from e2sim/ASN1c/CSIReportPerCSIProcess.c rename to e2sim/previous/ASN1c/CSIReportPerCSIProcess.c diff --git a/e2sim/ASN1c/CSIReportPerCSIProcess.h b/e2sim/previous/ASN1c/CSIReportPerCSIProcess.h similarity index 100% rename from e2sim/ASN1c/CSIReportPerCSIProcess.h rename to e2sim/previous/ASN1c/CSIReportPerCSIProcess.h diff --git a/e2sim/ASN1c/CSIReportPerCSIProcessItem.c b/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.c similarity index 100% rename from e2sim/ASN1c/CSIReportPerCSIProcessItem.c rename to e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.c diff --git a/e2sim/ASN1c/CSIReportPerCSIProcessItem.h b/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.h similarity index 100% rename from e2sim/ASN1c/CSIReportPerCSIProcessItem.h rename to e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.h diff --git a/e2sim/ASN1c/CallProcess-ID.c b/e2sim/previous/ASN1c/CallProcess-ID.c similarity index 100% rename from e2sim/ASN1c/CallProcess-ID.c rename to e2sim/previous/ASN1c/CallProcess-ID.c diff --git a/e2sim/ASN1c/CallProcess-ID.h b/e2sim/previous/ASN1c/CallProcess-ID.h similarity index 100% rename from e2sim/ASN1c/CallProcess-ID.h rename to e2sim/previous/ASN1c/CallProcess-ID.h diff --git a/e2sim/ASN1c/CapacityValue.c b/e2sim/previous/ASN1c/CapacityValue.c similarity index 100% rename from e2sim/ASN1c/CapacityValue.c rename to e2sim/previous/ASN1c/CapacityValue.c diff --git a/e2sim/ASN1c/CapacityValue.h b/e2sim/previous/ASN1c/CapacityValue.h similarity index 100% rename from e2sim/ASN1c/CapacityValue.h rename to e2sim/previous/ASN1c/CapacityValue.h diff --git a/e2sim/ASN1c/Cause.c b/e2sim/previous/ASN1c/Cause.c similarity index 100% rename from e2sim/ASN1c/Cause.c rename to e2sim/previous/ASN1c/Cause.c diff --git a/e2sim/ASN1c/Cause.h b/e2sim/previous/ASN1c/Cause.h similarity index 100% rename from e2sim/ASN1c/Cause.h rename to e2sim/previous/ASN1c/Cause.h diff --git a/e2sim/ASN1c/CauseMisc.c b/e2sim/previous/ASN1c/CauseMisc.c similarity index 100% rename from e2sim/ASN1c/CauseMisc.c rename to e2sim/previous/ASN1c/CauseMisc.c diff --git a/e2sim/ASN1c/CauseMisc.h b/e2sim/previous/ASN1c/CauseMisc.h similarity index 100% rename from e2sim/ASN1c/CauseMisc.h rename to e2sim/previous/ASN1c/CauseMisc.h diff --git a/e2sim/ASN1c/CauseProtocol.c b/e2sim/previous/ASN1c/CauseProtocol.c similarity index 100% rename from e2sim/ASN1c/CauseProtocol.c rename to e2sim/previous/ASN1c/CauseProtocol.c diff --git a/e2sim/ASN1c/CauseProtocol.h b/e2sim/previous/ASN1c/CauseProtocol.h similarity index 100% rename from e2sim/ASN1c/CauseProtocol.h rename to e2sim/previous/ASN1c/CauseProtocol.h diff --git a/e2sim/ASN1c/CauseRIC.c b/e2sim/previous/ASN1c/CauseRIC.c similarity index 100% rename from e2sim/ASN1c/CauseRIC.c rename to e2sim/previous/ASN1c/CauseRIC.c diff --git a/e2sim/ASN1c/CauseRIC.h b/e2sim/previous/ASN1c/CauseRIC.h similarity index 100% rename from e2sim/ASN1c/CauseRIC.h rename to e2sim/previous/ASN1c/CauseRIC.h diff --git a/e2sim/ASN1c/CauseRadioNetwork.c b/e2sim/previous/ASN1c/CauseRadioNetwork.c similarity index 100% rename from e2sim/ASN1c/CauseRadioNetwork.c rename to e2sim/previous/ASN1c/CauseRadioNetwork.c diff --git a/e2sim/ASN1c/CauseRadioNetwork.h b/e2sim/previous/ASN1c/CauseRadioNetwork.h similarity index 100% rename from e2sim/ASN1c/CauseRadioNetwork.h rename to e2sim/previous/ASN1c/CauseRadioNetwork.h diff --git a/e2sim/ASN1c/CauseTransport.c b/e2sim/previous/ASN1c/CauseTransport.c similarity index 100% rename from e2sim/ASN1c/CauseTransport.c rename to e2sim/previous/ASN1c/CauseTransport.c diff --git a/e2sim/ASN1c/CauseTransport.h b/e2sim/previous/ASN1c/CauseTransport.h similarity index 100% rename from e2sim/ASN1c/CauseTransport.h rename to e2sim/previous/ASN1c/CauseTransport.h diff --git a/e2sim/ASN1c/Cell-Size.c b/e2sim/previous/ASN1c/Cell-Size.c similarity index 100% rename from e2sim/ASN1c/Cell-Size.c rename to e2sim/previous/ASN1c/Cell-Size.c diff --git a/e2sim/ASN1c/Cell-Size.h b/e2sim/previous/ASN1c/Cell-Size.h similarity index 100% rename from e2sim/ASN1c/Cell-Size.h rename to e2sim/previous/ASN1c/Cell-Size.h diff --git a/e2sim/ASN1c/CellActivationFailure.c b/e2sim/previous/ASN1c/CellActivationFailure.c similarity index 100% rename from e2sim/ASN1c/CellActivationFailure.c rename to e2sim/previous/ASN1c/CellActivationFailure.c diff --git a/e2sim/ASN1c/CellActivationFailure.h b/e2sim/previous/ASN1c/CellActivationFailure.h similarity index 100% rename from e2sim/ASN1c/CellActivationFailure.h rename to e2sim/previous/ASN1c/CellActivationFailure.h diff --git a/e2sim/ASN1c/CellActivationRequest.c b/e2sim/previous/ASN1c/CellActivationRequest.c similarity index 100% rename from e2sim/ASN1c/CellActivationRequest.c rename to e2sim/previous/ASN1c/CellActivationRequest.c diff --git a/e2sim/ASN1c/CellActivationRequest.h b/e2sim/previous/ASN1c/CellActivationRequest.h similarity index 100% rename from e2sim/ASN1c/CellActivationRequest.h rename to e2sim/previous/ASN1c/CellActivationRequest.h diff --git a/e2sim/ASN1c/CellActivationResponse.c b/e2sim/previous/ASN1c/CellActivationResponse.c similarity index 100% rename from e2sim/ASN1c/CellActivationResponse.c rename to e2sim/previous/ASN1c/CellActivationResponse.c diff --git a/e2sim/ASN1c/CellActivationResponse.h b/e2sim/previous/ASN1c/CellActivationResponse.h similarity index 100% rename from e2sim/ASN1c/CellActivationResponse.h rename to e2sim/previous/ASN1c/CellActivationResponse.h diff --git a/e2sim/ASN1c/CellAssistanceInformation.c b/e2sim/previous/ASN1c/CellAssistanceInformation.c similarity index 100% rename from e2sim/ASN1c/CellAssistanceInformation.c rename to e2sim/previous/ASN1c/CellAssistanceInformation.c diff --git a/e2sim/ASN1c/CellAssistanceInformation.h b/e2sim/previous/ASN1c/CellAssistanceInformation.h similarity index 100% rename from e2sim/ASN1c/CellAssistanceInformation.h rename to e2sim/previous/ASN1c/CellAssistanceInformation.h diff --git a/e2sim/ASN1c/CellBasedMDT.c b/e2sim/previous/ASN1c/CellBasedMDT.c similarity index 100% rename from e2sim/ASN1c/CellBasedMDT.c rename to e2sim/previous/ASN1c/CellBasedMDT.c diff --git a/e2sim/ASN1c/CellBasedMDT.h b/e2sim/previous/ASN1c/CellBasedMDT.h similarity index 100% rename from e2sim/ASN1c/CellBasedMDT.h rename to e2sim/previous/ASN1c/CellBasedMDT.h diff --git a/e2sim/ASN1c/CellBasedQMC.c b/e2sim/previous/ASN1c/CellBasedQMC.c similarity index 100% rename from e2sim/ASN1c/CellBasedQMC.c rename to e2sim/previous/ASN1c/CellBasedQMC.c diff --git a/e2sim/ASN1c/CellBasedQMC.h b/e2sim/previous/ASN1c/CellBasedQMC.h similarity index 100% rename from e2sim/ASN1c/CellBasedQMC.h rename to e2sim/previous/ASN1c/CellBasedQMC.h diff --git a/e2sim/ASN1c/CellCapacityClassValue.c b/e2sim/previous/ASN1c/CellCapacityClassValue.c similarity index 100% rename from e2sim/ASN1c/CellCapacityClassValue.c rename to e2sim/previous/ASN1c/CellCapacityClassValue.c diff --git a/e2sim/ASN1c/CellCapacityClassValue.h b/e2sim/previous/ASN1c/CellCapacityClassValue.h similarity index 100% rename from e2sim/ASN1c/CellCapacityClassValue.h rename to e2sim/previous/ASN1c/CellCapacityClassValue.h diff --git a/e2sim/ASN1c/CellDeploymentStatusIndicator.c b/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.c similarity index 100% rename from e2sim/ASN1c/CellDeploymentStatusIndicator.c rename to e2sim/previous/ASN1c/CellDeploymentStatusIndicator.c diff --git a/e2sim/ASN1c/CellDeploymentStatusIndicator.h b/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.h similarity index 100% rename from e2sim/ASN1c/CellDeploymentStatusIndicator.h rename to e2sim/previous/ASN1c/CellDeploymentStatusIndicator.h diff --git a/e2sim/ASN1c/CellIdListforMDT.c b/e2sim/previous/ASN1c/CellIdListforMDT.c similarity index 100% rename from e2sim/ASN1c/CellIdListforMDT.c rename to e2sim/previous/ASN1c/CellIdListforMDT.c diff --git a/e2sim/ASN1c/CellIdListforMDT.h b/e2sim/previous/ASN1c/CellIdListforMDT.h similarity index 100% rename from e2sim/ASN1c/CellIdListforMDT.h rename to e2sim/previous/ASN1c/CellIdListforMDT.h diff --git a/e2sim/ASN1c/CellIdListforQMC.c b/e2sim/previous/ASN1c/CellIdListforQMC.c similarity index 100% rename from e2sim/ASN1c/CellIdListforQMC.c rename to e2sim/previous/ASN1c/CellIdListforQMC.c diff --git a/e2sim/ASN1c/CellIdListforQMC.h b/e2sim/previous/ASN1c/CellIdListforQMC.h similarity index 100% rename from e2sim/ASN1c/CellIdListforQMC.h rename to e2sim/previous/ASN1c/CellIdListforQMC.h diff --git a/e2sim/ASN1c/CellInformation-Item.c b/e2sim/previous/ASN1c/CellInformation-Item.c similarity index 100% rename from e2sim/ASN1c/CellInformation-Item.c rename to e2sim/previous/ASN1c/CellInformation-Item.c diff --git a/e2sim/ASN1c/CellInformation-Item.h b/e2sim/previous/ASN1c/CellInformation-Item.h similarity index 100% rename from e2sim/ASN1c/CellInformation-Item.h rename to e2sim/previous/ASN1c/CellInformation-Item.h diff --git a/e2sim/ASN1c/CellInformation-List.c b/e2sim/previous/ASN1c/CellInformation-List.c similarity index 100% rename from e2sim/ASN1c/CellInformation-List.c rename to e2sim/previous/ASN1c/CellInformation-List.c diff --git a/e2sim/ASN1c/CellInformation-List.h b/e2sim/previous/ASN1c/CellInformation-List.h similarity index 100% rename from e2sim/ASN1c/CellInformation-List.h rename to e2sim/previous/ASN1c/CellInformation-List.h diff --git a/e2sim/ASN1c/CellMeasurementResult-Item.c b/e2sim/previous/ASN1c/CellMeasurementResult-Item.c similarity index 100% rename from e2sim/ASN1c/CellMeasurementResult-Item.c rename to e2sim/previous/ASN1c/CellMeasurementResult-Item.c diff --git a/e2sim/ASN1c/CellMeasurementResult-Item.h b/e2sim/previous/ASN1c/CellMeasurementResult-Item.h similarity index 100% rename from e2sim/ASN1c/CellMeasurementResult-Item.h rename to e2sim/previous/ASN1c/CellMeasurementResult-Item.h diff --git a/e2sim/ASN1c/CellMeasurementResult-List.c b/e2sim/previous/ASN1c/CellMeasurementResult-List.c similarity index 100% rename from e2sim/ASN1c/CellMeasurementResult-List.c rename to e2sim/previous/ASN1c/CellMeasurementResult-List.c diff --git a/e2sim/ASN1c/CellMeasurementResult-List.h b/e2sim/previous/ASN1c/CellMeasurementResult-List.h similarity index 100% rename from e2sim/ASN1c/CellMeasurementResult-List.h rename to e2sim/previous/ASN1c/CellMeasurementResult-List.h diff --git a/e2sim/ASN1c/CellReplacingInfo.c b/e2sim/previous/ASN1c/CellReplacingInfo.c similarity index 100% rename from e2sim/ASN1c/CellReplacingInfo.c rename to e2sim/previous/ASN1c/CellReplacingInfo.c diff --git a/e2sim/ASN1c/CellReplacingInfo.h b/e2sim/previous/ASN1c/CellReplacingInfo.h similarity index 100% rename from e2sim/ASN1c/CellReplacingInfo.h rename to e2sim/previous/ASN1c/CellReplacingInfo.h diff --git a/e2sim/ASN1c/CellReportingIndicator.c b/e2sim/previous/ASN1c/CellReportingIndicator.c similarity index 100% rename from e2sim/ASN1c/CellReportingIndicator.c rename to e2sim/previous/ASN1c/CellReportingIndicator.c diff --git a/e2sim/ASN1c/CellReportingIndicator.h b/e2sim/previous/ASN1c/CellReportingIndicator.h similarity index 100% rename from e2sim/ASN1c/CellReportingIndicator.h rename to e2sim/previous/ASN1c/CellReportingIndicator.h diff --git a/e2sim/ASN1c/CellToReport-Item.c b/e2sim/previous/ASN1c/CellToReport-Item.c similarity index 100% rename from e2sim/ASN1c/CellToReport-Item.c rename to e2sim/previous/ASN1c/CellToReport-Item.c diff --git a/e2sim/ASN1c/CellToReport-Item.h b/e2sim/previous/ASN1c/CellToReport-Item.h similarity index 100% rename from e2sim/ASN1c/CellToReport-Item.h rename to e2sim/previous/ASN1c/CellToReport-Item.h diff --git a/e2sim/ASN1c/CellToReport-List.c b/e2sim/previous/ASN1c/CellToReport-List.c similarity index 100% rename from e2sim/ASN1c/CellToReport-List.c rename to e2sim/previous/ASN1c/CellToReport-List.c diff --git a/e2sim/ASN1c/CellToReport-List.h b/e2sim/previous/ASN1c/CellToReport-List.h similarity index 100% rename from e2sim/ASN1c/CellToReport-List.h rename to e2sim/previous/ASN1c/CellToReport-List.h diff --git a/e2sim/ASN1c/CellType.c b/e2sim/previous/ASN1c/CellType.c similarity index 100% rename from e2sim/ASN1c/CellType.c rename to e2sim/previous/ASN1c/CellType.c diff --git a/e2sim/ASN1c/CellType.h b/e2sim/previous/ASN1c/CellType.h similarity index 100% rename from e2sim/ASN1c/CellType.h rename to e2sim/previous/ASN1c/CellType.h diff --git a/e2sim/ASN1c/CoMPHypothesisSet.c b/e2sim/previous/ASN1c/CoMPHypothesisSet.c similarity index 100% rename from e2sim/ASN1c/CoMPHypothesisSet.c rename to e2sim/previous/ASN1c/CoMPHypothesisSet.c diff --git a/e2sim/ASN1c/CoMPHypothesisSet.h b/e2sim/previous/ASN1c/CoMPHypothesisSet.h similarity index 100% rename from e2sim/ASN1c/CoMPHypothesisSet.h rename to e2sim/previous/ASN1c/CoMPHypothesisSet.h diff --git a/e2sim/ASN1c/CoMPHypothesisSetItem.c b/e2sim/previous/ASN1c/CoMPHypothesisSetItem.c similarity index 100% rename from e2sim/ASN1c/CoMPHypothesisSetItem.c rename to e2sim/previous/ASN1c/CoMPHypothesisSetItem.c diff --git a/e2sim/ASN1c/CoMPHypothesisSetItem.h b/e2sim/previous/ASN1c/CoMPHypothesisSetItem.h similarity index 100% rename from e2sim/ASN1c/CoMPHypothesisSetItem.h rename to e2sim/previous/ASN1c/CoMPHypothesisSetItem.h diff --git a/e2sim/ASN1c/CoMPInformation.c b/e2sim/previous/ASN1c/CoMPInformation.c similarity index 100% rename from e2sim/ASN1c/CoMPInformation.c rename to e2sim/previous/ASN1c/CoMPInformation.c diff --git a/e2sim/ASN1c/CoMPInformation.h b/e2sim/previous/ASN1c/CoMPInformation.h similarity index 100% rename from e2sim/ASN1c/CoMPInformation.h rename to e2sim/previous/ASN1c/CoMPInformation.h diff --git a/e2sim/ASN1c/CoMPInformationItem.c b/e2sim/previous/ASN1c/CoMPInformationItem.c similarity index 100% rename from e2sim/ASN1c/CoMPInformationItem.c rename to e2sim/previous/ASN1c/CoMPInformationItem.c diff --git a/e2sim/ASN1c/CoMPInformationItem.h b/e2sim/previous/ASN1c/CoMPInformationItem.h similarity index 100% rename from e2sim/ASN1c/CoMPInformationItem.h rename to e2sim/previous/ASN1c/CoMPInformationItem.h diff --git a/e2sim/ASN1c/CoMPInformationStartTime.c b/e2sim/previous/ASN1c/CoMPInformationStartTime.c similarity index 100% rename from e2sim/ASN1c/CoMPInformationStartTime.c rename to e2sim/previous/ASN1c/CoMPInformationStartTime.c diff --git a/e2sim/ASN1c/CoMPInformationStartTime.h b/e2sim/previous/ASN1c/CoMPInformationStartTime.h similarity index 100% rename from e2sim/ASN1c/CoMPInformationStartTime.h rename to e2sim/previous/ASN1c/CoMPInformationStartTime.h diff --git a/e2sim/ASN1c/CompleteFailureCauseInformation-Item.c b/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.c similarity index 100% rename from e2sim/ASN1c/CompleteFailureCauseInformation-Item.c rename to e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.c diff --git a/e2sim/ASN1c/CompleteFailureCauseInformation-Item.h b/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.h similarity index 100% rename from e2sim/ASN1c/CompleteFailureCauseInformation-Item.h rename to e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.h diff --git a/e2sim/ASN1c/CompleteFailureCauseInformation-List.c b/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.c similarity index 100% rename from e2sim/ASN1c/CompleteFailureCauseInformation-List.c rename to e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.c diff --git a/e2sim/ASN1c/CompleteFailureCauseInformation-List.h b/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.h similarity index 100% rename from e2sim/ASN1c/CompleteFailureCauseInformation-List.h rename to e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.h diff --git a/e2sim/ASN1c/CompositeAvailableCapacity.c b/e2sim/previous/ASN1c/CompositeAvailableCapacity.c similarity index 100% rename from e2sim/ASN1c/CompositeAvailableCapacity.c rename to e2sim/previous/ASN1c/CompositeAvailableCapacity.c diff --git a/e2sim/ASN1c/CompositeAvailableCapacity.h b/e2sim/previous/ASN1c/CompositeAvailableCapacity.h similarity index 100% rename from e2sim/ASN1c/CompositeAvailableCapacity.h rename to e2sim/previous/ASN1c/CompositeAvailableCapacity.h diff --git a/e2sim/ASN1c/CompositeAvailableCapacityGroup.c b/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.c similarity index 100% rename from e2sim/ASN1c/CompositeAvailableCapacityGroup.c rename to e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.c diff --git a/e2sim/ASN1c/CompositeAvailableCapacityGroup.h b/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.h similarity index 100% rename from e2sim/ASN1c/CompositeAvailableCapacityGroup.h rename to e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.h diff --git a/e2sim/ASN1c/Correlation-ID.c b/e2sim/previous/ASN1c/Correlation-ID.c similarity index 100% rename from e2sim/ASN1c/Correlation-ID.c rename to e2sim/previous/ASN1c/Correlation-ID.c diff --git a/e2sim/ASN1c/Correlation-ID.h b/e2sim/previous/ASN1c/Correlation-ID.h similarity index 100% rename from e2sim/ASN1c/Correlation-ID.h rename to e2sim/previous/ASN1c/Correlation-ID.h diff --git a/e2sim/ASN1c/CoverageModification-Item.c b/e2sim/previous/ASN1c/CoverageModification-Item.c similarity index 100% rename from e2sim/ASN1c/CoverageModification-Item.c rename to e2sim/previous/ASN1c/CoverageModification-Item.c diff --git a/e2sim/ASN1c/CoverageModification-Item.h b/e2sim/previous/ASN1c/CoverageModification-Item.h similarity index 100% rename from e2sim/ASN1c/CoverageModification-Item.h rename to e2sim/previous/ASN1c/CoverageModification-Item.h diff --git a/e2sim/ASN1c/CoverageModificationList.c b/e2sim/previous/ASN1c/CoverageModificationList.c similarity index 100% rename from e2sim/ASN1c/CoverageModificationList.c rename to e2sim/previous/ASN1c/CoverageModificationList.c diff --git a/e2sim/ASN1c/CoverageModificationList.h b/e2sim/previous/ASN1c/CoverageModificationList.h similarity index 100% rename from e2sim/ASN1c/CoverageModificationList.h rename to e2sim/previous/ASN1c/CoverageModificationList.h diff --git a/e2sim/ASN1c/Criticality.c b/e2sim/previous/ASN1c/Criticality.c similarity index 100% rename from e2sim/ASN1c/Criticality.c rename to e2sim/previous/ASN1c/Criticality.c diff --git a/e2sim/ASN1c/Criticality.h b/e2sim/previous/ASN1c/Criticality.h similarity index 100% rename from e2sim/ASN1c/Criticality.h rename to e2sim/previous/ASN1c/Criticality.h diff --git a/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.c similarity index 100% rename from e2sim/ASN1c/CriticalityDiagnostics-IE-List.c rename to e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.c diff --git a/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.h similarity index 100% rename from e2sim/ASN1c/CriticalityDiagnostics-IE-List.h rename to e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.h diff --git a/e2sim/ASN1c/CriticalityDiagnostics.c b/e2sim/previous/ASN1c/CriticalityDiagnostics.c similarity index 100% rename from e2sim/ASN1c/CriticalityDiagnostics.c rename to e2sim/previous/ASN1c/CriticalityDiagnostics.c diff --git a/e2sim/ASN1c/CriticalityDiagnostics.h b/e2sim/previous/ASN1c/CriticalityDiagnostics.h similarity index 100% rename from e2sim/ASN1c/CriticalityDiagnostics.h rename to e2sim/previous/ASN1c/CriticalityDiagnostics.h diff --git a/e2sim/ASN1c/CyclicPrefixDL.c b/e2sim/previous/ASN1c/CyclicPrefixDL.c similarity index 100% rename from e2sim/ASN1c/CyclicPrefixDL.c rename to e2sim/previous/ASN1c/CyclicPrefixDL.c diff --git a/e2sim/ASN1c/CyclicPrefixDL.h b/e2sim/previous/ASN1c/CyclicPrefixDL.h similarity index 100% rename from e2sim/ASN1c/CyclicPrefixDL.h rename to e2sim/previous/ASN1c/CyclicPrefixDL.h diff --git a/e2sim/ASN1c/CyclicPrefixUL.c b/e2sim/previous/ASN1c/CyclicPrefixUL.c similarity index 100% rename from e2sim/ASN1c/CyclicPrefixUL.c rename to e2sim/previous/ASN1c/CyclicPrefixUL.c diff --git a/e2sim/ASN1c/CyclicPrefixUL.h b/e2sim/previous/ASN1c/CyclicPrefixUL.h similarity index 100% rename from e2sim/ASN1c/CyclicPrefixUL.h rename to e2sim/previous/ASN1c/CyclicPrefixUL.h diff --git a/e2sim/ASN1c/DL-ABS-status.c b/e2sim/previous/ASN1c/DL-ABS-status.c similarity index 100% rename from e2sim/ASN1c/DL-ABS-status.c rename to e2sim/previous/ASN1c/DL-ABS-status.c diff --git a/e2sim/ASN1c/DL-ABS-status.h b/e2sim/previous/ASN1c/DL-ABS-status.h similarity index 100% rename from e2sim/ASN1c/DL-ABS-status.h rename to e2sim/previous/ASN1c/DL-ABS-status.h diff --git a/e2sim/ASN1c/DL-Forwarding.c b/e2sim/previous/ASN1c/DL-Forwarding.c similarity index 100% rename from e2sim/ASN1c/DL-Forwarding.c rename to e2sim/previous/ASN1c/DL-Forwarding.c diff --git a/e2sim/ASN1c/DL-Forwarding.h b/e2sim/previous/ASN1c/DL-Forwarding.h similarity index 100% rename from e2sim/ASN1c/DL-Forwarding.h rename to e2sim/previous/ASN1c/DL-Forwarding.h diff --git a/e2sim/ASN1c/DL-GBR-PRB-usage.c b/e2sim/previous/ASN1c/DL-GBR-PRB-usage.c similarity index 100% rename from e2sim/ASN1c/DL-GBR-PRB-usage.c rename to e2sim/previous/ASN1c/DL-GBR-PRB-usage.c diff --git a/e2sim/ASN1c/DL-GBR-PRB-usage.h b/e2sim/previous/ASN1c/DL-GBR-PRB-usage.h similarity index 100% rename from e2sim/ASN1c/DL-GBR-PRB-usage.h rename to e2sim/previous/ASN1c/DL-GBR-PRB-usage.h diff --git a/e2sim/ASN1c/DL-Total-PRB-usage.c b/e2sim/previous/ASN1c/DL-Total-PRB-usage.c similarity index 100% rename from e2sim/ASN1c/DL-Total-PRB-usage.c rename to e2sim/previous/ASN1c/DL-Total-PRB-usage.c diff --git a/e2sim/ASN1c/DL-Total-PRB-usage.h b/e2sim/previous/ASN1c/DL-Total-PRB-usage.h similarity index 100% rename from e2sim/ASN1c/DL-Total-PRB-usage.h rename to e2sim/previous/ASN1c/DL-Total-PRB-usage.h diff --git a/e2sim/ASN1c/DL-non-GBR-PRB-usage.c b/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c similarity index 100% rename from e2sim/ASN1c/DL-non-GBR-PRB-usage.c rename to e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c diff --git a/e2sim/ASN1c/DL-non-GBR-PRB-usage.h b/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h similarity index 100% rename from e2sim/ASN1c/DL-non-GBR-PRB-usage.h rename to e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h diff --git a/e2sim/ASN1c/DL-scheduling-PDCCH-CCE-usage.c b/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c similarity index 100% rename from e2sim/ASN1c/DL-scheduling-PDCCH-CCE-usage.c rename to e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c diff --git a/e2sim/ASN1c/DL-scheduling-PDCCH-CCE-usage.h b/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h similarity index 100% rename from e2sim/ASN1c/DL-scheduling-PDCCH-CCE-usage.h rename to e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h diff --git a/e2sim/ASN1c/DLResourceBitmapULandDLSharing.c b/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.c similarity index 100% rename from e2sim/ASN1c/DLResourceBitmapULandDLSharing.c rename to e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.c diff --git a/e2sim/ASN1c/DLResourceBitmapULandDLSharing.h b/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.h similarity index 100% rename from e2sim/ASN1c/DLResourceBitmapULandDLSharing.h rename to e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.h diff --git a/e2sim/ASN1c/DLResourcesULandDLSharing.c b/e2sim/previous/ASN1c/DLResourcesULandDLSharing.c similarity index 100% rename from e2sim/ASN1c/DLResourcesULandDLSharing.c rename to e2sim/previous/ASN1c/DLResourcesULandDLSharing.c diff --git a/e2sim/ASN1c/DLResourcesULandDLSharing.h b/e2sim/previous/ASN1c/DLResourcesULandDLSharing.h similarity index 100% rename from e2sim/ASN1c/DLResourcesULandDLSharing.h rename to e2sim/previous/ASN1c/DLResourcesULandDLSharing.h diff --git a/e2sim/ASN1c/DRB-ID.c b/e2sim/previous/ASN1c/DRB-ID.c similarity index 100% rename from e2sim/ASN1c/DRB-ID.c rename to e2sim/previous/ASN1c/DRB-ID.c diff --git a/e2sim/ASN1c/DRB-ID.h b/e2sim/previous/ASN1c/DRB-ID.h similarity index 100% rename from e2sim/ASN1c/DRB-ID.h rename to e2sim/previous/ASN1c/DRB-ID.h diff --git a/e2sim/ASN1c/DataForwardingAddressIndication.c b/e2sim/previous/ASN1c/DataForwardingAddressIndication.c similarity index 100% rename from e2sim/ASN1c/DataForwardingAddressIndication.c rename to e2sim/previous/ASN1c/DataForwardingAddressIndication.c diff --git a/e2sim/ASN1c/DataForwardingAddressIndication.h b/e2sim/previous/ASN1c/DataForwardingAddressIndication.h similarity index 100% rename from e2sim/ASN1c/DataForwardingAddressIndication.h rename to e2sim/previous/ASN1c/DataForwardingAddressIndication.h diff --git a/e2sim/ASN1c/DataTrafficResourceIndication.c b/e2sim/previous/ASN1c/DataTrafficResourceIndication.c similarity index 100% rename from e2sim/ASN1c/DataTrafficResourceIndication.c rename to e2sim/previous/ASN1c/DataTrafficResourceIndication.c diff --git a/e2sim/ASN1c/DataTrafficResourceIndication.h b/e2sim/previous/ASN1c/DataTrafficResourceIndication.h similarity index 100% rename from e2sim/ASN1c/DataTrafficResourceIndication.h rename to e2sim/previous/ASN1c/DataTrafficResourceIndication.h diff --git a/e2sim/ASN1c/DataTrafficResources.c b/e2sim/previous/ASN1c/DataTrafficResources.c similarity index 100% rename from e2sim/ASN1c/DataTrafficResources.c rename to e2sim/previous/ASN1c/DataTrafficResources.c diff --git a/e2sim/ASN1c/DataTrafficResources.h b/e2sim/previous/ASN1c/DataTrafficResources.h similarity index 100% rename from e2sim/ASN1c/DataTrafficResources.h rename to e2sim/previous/ASN1c/DataTrafficResources.h diff --git a/e2sim/ASN1c/DeactivationIndication.c b/e2sim/previous/ASN1c/DeactivationIndication.c similarity index 100% rename from e2sim/ASN1c/DeactivationIndication.c rename to e2sim/previous/ASN1c/DeactivationIndication.c diff --git a/e2sim/ASN1c/DeactivationIndication.h b/e2sim/previous/ASN1c/DeactivationIndication.h similarity index 100% rename from e2sim/ASN1c/DeactivationIndication.h rename to e2sim/previous/ASN1c/DeactivationIndication.h diff --git a/e2sim/ASN1c/DeliveryStatus.c b/e2sim/previous/ASN1c/DeliveryStatus.c similarity index 100% rename from e2sim/ASN1c/DeliveryStatus.c rename to e2sim/previous/ASN1c/DeliveryStatus.c diff --git a/e2sim/ASN1c/DeliveryStatus.h b/e2sim/previous/ASN1c/DeliveryStatus.h similarity index 100% rename from e2sim/ASN1c/DeliveryStatus.h rename to e2sim/previous/ASN1c/DeliveryStatus.h diff --git a/e2sim/ASN1c/DuplicationActivation.c b/e2sim/previous/ASN1c/DuplicationActivation.c similarity index 100% rename from e2sim/ASN1c/DuplicationActivation.c rename to e2sim/previous/ASN1c/DuplicationActivation.c diff --git a/e2sim/ASN1c/DuplicationActivation.h b/e2sim/previous/ASN1c/DuplicationActivation.h similarity index 100% rename from e2sim/ASN1c/DuplicationActivation.h rename to e2sim/previous/ASN1c/DuplicationActivation.h diff --git a/e2sim/ASN1c/DynamicDLTransmissionInformation.c b/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.c similarity index 100% rename from e2sim/ASN1c/DynamicDLTransmissionInformation.c rename to e2sim/previous/ASN1c/DynamicDLTransmissionInformation.c diff --git a/e2sim/ASN1c/DynamicDLTransmissionInformation.h b/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.h similarity index 100% rename from e2sim/ASN1c/DynamicDLTransmissionInformation.h rename to e2sim/previous/ASN1c/DynamicDLTransmissionInformation.h diff --git a/e2sim/ASN1c/DynamicNAICSInformation.c b/e2sim/previous/ASN1c/DynamicNAICSInformation.c similarity index 100% rename from e2sim/ASN1c/DynamicNAICSInformation.c rename to e2sim/previous/ASN1c/DynamicNAICSInformation.c diff --git a/e2sim/ASN1c/DynamicNAICSInformation.h b/e2sim/previous/ASN1c/DynamicNAICSInformation.h similarity index 100% rename from e2sim/ASN1c/DynamicNAICSInformation.h rename to e2sim/previous/ASN1c/DynamicNAICSInformation.h diff --git a/e2sim/ASN1c/E-RAB-ID.c b/e2sim/previous/ASN1c/E-RAB-ID.c similarity index 100% rename from e2sim/ASN1c/E-RAB-ID.c rename to e2sim/previous/ASN1c/E-RAB-ID.c diff --git a/e2sim/ASN1c/E-RAB-ID.h b/e2sim/previous/ASN1c/E-RAB-ID.h similarity index 100% rename from e2sim/ASN1c/E-RAB-ID.h rename to e2sim/previous/ASN1c/E-RAB-ID.h diff --git a/e2sim/ASN1c/E-RAB-Item.c b/e2sim/previous/ASN1c/E-RAB-Item.c similarity index 100% rename from e2sim/ASN1c/E-RAB-Item.c rename to e2sim/previous/ASN1c/E-RAB-Item.c diff --git a/e2sim/ASN1c/E-RAB-Item.h b/e2sim/previous/ASN1c/E-RAB-Item.h similarity index 100% rename from e2sim/ASN1c/E-RAB-Item.h rename to e2sim/previous/ASN1c/E-RAB-Item.h diff --git a/e2sim/ASN1c/E-RAB-Level-QoS-Parameters.c b/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.c similarity index 100% rename from e2sim/ASN1c/E-RAB-Level-QoS-Parameters.c rename to e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.c diff --git a/e2sim/ASN1c/E-RAB-Level-QoS-Parameters.h b/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.h similarity index 100% rename from e2sim/ASN1c/E-RAB-Level-QoS-Parameters.h rename to e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.h diff --git a/e2sim/ASN1c/E-RAB-List.c b/e2sim/previous/ASN1c/E-RAB-List.c similarity index 100% rename from e2sim/ASN1c/E-RAB-List.c rename to e2sim/previous/ASN1c/E-RAB-List.c diff --git a/e2sim/ASN1c/E-RAB-List.h b/e2sim/previous/ASN1c/E-RAB-List.h similarity index 100% rename from e2sim/ASN1c/E-RAB-List.h rename to e2sim/previous/ASN1c/E-RAB-List.h diff --git a/e2sim/ASN1c/E-RABUsageReport-Item.c b/e2sim/previous/ASN1c/E-RABUsageReport-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABUsageReport-Item.c rename to e2sim/previous/ASN1c/E-RABUsageReport-Item.c diff --git a/e2sim/ASN1c/E-RABUsageReport-Item.h b/e2sim/previous/ASN1c/E-RABUsageReport-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABUsageReport-Item.h rename to e2sim/previous/ASN1c/E-RABUsageReport-Item.h diff --git a/e2sim/ASN1c/E-RABUsageReportList.c b/e2sim/previous/ASN1c/E-RABUsageReportList.c similarity index 100% rename from e2sim/ASN1c/E-RABUsageReportList.c rename to e2sim/previous/ASN1c/E-RABUsageReportList.c diff --git a/e2sim/ASN1c/E-RABUsageReportList.h b/e2sim/previous/ASN1c/E-RABUsageReportList.h similarity index 100% rename from e2sim/ASN1c/E-RABUsageReportList.h rename to e2sim/previous/ASN1c/E-RABUsageReportList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-Item.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-List.c b/e2sim/previous/ASN1c/E-RABs-Admitted-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-List.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-List.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-List.h b/e2sim/previous/ASN1c/E-RABs-Admitted-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-List.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-List.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-List.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-List.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-List.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-List.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c b/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c diff --git a/e2sim/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h b/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h rename to e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c diff --git a/e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h b/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h rename to e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h diff --git a/e2sim/ASN1c/E-RABs-DataForwardingAddress-Item.c b/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-DataForwardingAddress-Item.c rename to e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.c diff --git a/e2sim/ASN1c/E-RABs-DataForwardingAddress-Item.h b/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-DataForwardingAddress-Item.h rename to e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.h diff --git a/e2sim/ASN1c/E-RABs-DataForwardingAddress-List.c b/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-DataForwardingAddress-List.c rename to e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.c diff --git a/e2sim/ASN1c/E-RABs-DataForwardingAddress-List.h b/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-DataForwardingAddress-List.h rename to e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.h diff --git a/e2sim/ASN1c/E-RABs-SubjectToCounterCheck-List.c b/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToCounterCheck-List.c rename to e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.c diff --git a/e2sim/ASN1c/E-RABs-SubjectToCounterCheck-List.h b/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToCounterCheck-List.h rename to e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.h diff --git a/e2sim/ASN1c/E-RABs-SubjectToCounterCheckItem.c b/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToCounterCheckItem.c rename to e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.c diff --git a/e2sim/ASN1c/E-RABs-SubjectToCounterCheckItem.h b/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToCounterCheckItem.h rename to e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.h diff --git a/e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c b/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c rename to e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c diff --git a/e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h b/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h rename to e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h diff --git a/e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c b/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c rename to e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c diff --git a/e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h b/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h rename to e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h diff --git a/e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c b/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c rename to e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c diff --git a/e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h b/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h rename to e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h diff --git a/e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-List.c b/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-List.c rename to e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.c diff --git a/e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-List.h b/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-SubjectToStatusTransfer-List.h rename to e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-List-ModReq.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-List-ModReq.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-List-ModReq.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-List-ModReq.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-List.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-List.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-List.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-List.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-ModReqItem.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c diff --git a/e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h b/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h rename to e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-List-ModReq.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-List-ModReq.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-List-ModReq.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-List-ModReq.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-ModReqItem.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h b/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-List-ModReq.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-List-ModReq.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-List-ModReq.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-List-ModReq.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-List-RelConf.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-List-RelConf.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-List-RelConf.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-List-RelConf.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-List-RelReq.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-List-RelReq.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-List-RelReq.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-List-RelReq.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqItem.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqd.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqd.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqd.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqd.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelConfItem.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-RelReqItem.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c diff --git a/e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h b/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h rename to e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h diff --git a/e2sim/ASN1c/E-RABs-ToBeSetup-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetup-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeSetup-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetup-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h diff --git a/e2sim/ASN1c/E-RABs-ToBeSetup-List.c b/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetup-List.c rename to e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c diff --git a/e2sim/ASN1c/E-RABs-ToBeSetup-List.h b/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetup-List.h rename to e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h diff --git a/e2sim/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c b/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c rename to e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c diff --git a/e2sim/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h b/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h rename to e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h diff --git a/e2sim/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c b/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c rename to e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c diff --git a/e2sim/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h b/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h similarity index 100% rename from e2sim/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h rename to e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h diff --git a/e2sim/ASN1c/E2AP-PDU.c b/e2sim/previous/ASN1c/E2AP-PDU.c similarity index 100% rename from e2sim/ASN1c/E2AP-PDU.c rename to e2sim/previous/ASN1c/E2AP-PDU.c diff --git a/e2sim/ASN1c/E2AP-PDU.h b/e2sim/previous/ASN1c/E2AP-PDU.h similarity index 100% rename from e2sim/ASN1c/E2AP-PDU.h rename to e2sim/previous/ASN1c/E2AP-PDU.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-actionDefinition.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-actionDefinition.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-actionDefinition.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-actionDefinition.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-callProcessID.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-callProcessID.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-callProcessID.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-callProcessID.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-controlHeader.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-controlHeader.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-controlHeader.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-controlHeader.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-controlMessage.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-controlMessage.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-controlMessage.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-controlMessage.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-indicationHeader.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-indicationHeader.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-indicationHeader.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-indicationHeader.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.h diff --git a/e2sim/ASN1c/E2SM-gNB-X2-indicationMessage.c b/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.c similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-indicationMessage.c rename to e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.c diff --git a/e2sim/ASN1c/E2SM-gNB-X2-indicationMessage.h b/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.h similarity index 100% rename from e2sim/ASN1c/E2SM-gNB-X2-indicationMessage.h rename to e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.h diff --git a/e2sim/ASN1c/EARFCN.c b/e2sim/previous/ASN1c/EARFCN.c similarity index 100% rename from e2sim/ASN1c/EARFCN.c rename to e2sim/previous/ASN1c/EARFCN.c diff --git a/e2sim/ASN1c/EARFCN.h b/e2sim/previous/ASN1c/EARFCN.h similarity index 100% rename from e2sim/ASN1c/EARFCN.h rename to e2sim/previous/ASN1c/EARFCN.h diff --git a/e2sim/ASN1c/EARFCNExtension.c b/e2sim/previous/ASN1c/EARFCNExtension.c similarity index 100% rename from e2sim/ASN1c/EARFCNExtension.c rename to e2sim/previous/ASN1c/EARFCNExtension.c diff --git a/e2sim/ASN1c/EARFCNExtension.h b/e2sim/previous/ASN1c/EARFCNExtension.h similarity index 100% rename from e2sim/ASN1c/EARFCNExtension.h rename to e2sim/previous/ASN1c/EARFCNExtension.h diff --git a/e2sim/ASN1c/ECGI.c b/e2sim/previous/ASN1c/ECGI.c similarity index 100% rename from e2sim/ASN1c/ECGI.c rename to e2sim/previous/ASN1c/ECGI.c diff --git a/e2sim/ASN1c/ECGI.h b/e2sim/previous/ASN1c/ECGI.h similarity index 100% rename from e2sim/ASN1c/ECGI.h rename to e2sim/previous/ASN1c/ECGI.h diff --git a/e2sim/ASN1c/EN-DC-ResourceConfiguration.c b/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.c similarity index 100% rename from e2sim/ASN1c/EN-DC-ResourceConfiguration.c rename to e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.c diff --git a/e2sim/ASN1c/EN-DC-ResourceConfiguration.h b/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.h similarity index 100% rename from e2sim/ASN1c/EN-DC-ResourceConfiguration.h rename to e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.h diff --git a/e2sim/ASN1c/ENB-ID.c b/e2sim/previous/ASN1c/ENB-ID.c similarity index 100% rename from e2sim/ASN1c/ENB-ID.c rename to e2sim/previous/ASN1c/ENB-ID.c diff --git a/e2sim/ASN1c/ENB-ID.h b/e2sim/previous/ASN1c/ENB-ID.h similarity index 100% rename from e2sim/ASN1c/ENB-ID.h rename to e2sim/previous/ASN1c/ENB-ID.h diff --git a/e2sim/ASN1c/ENBConfigurationUpdate.c b/e2sim/previous/ASN1c/ENBConfigurationUpdate.c similarity index 100% rename from e2sim/ASN1c/ENBConfigurationUpdate.c rename to e2sim/previous/ASN1c/ENBConfigurationUpdate.c diff --git a/e2sim/ASN1c/ENBConfigurationUpdate.h b/e2sim/previous/ASN1c/ENBConfigurationUpdate.h similarity index 100% rename from e2sim/ASN1c/ENBConfigurationUpdate.h rename to e2sim/previous/ASN1c/ENBConfigurationUpdate.h diff --git a/e2sim/ASN1c/ENBConfigurationUpdateAcknowledge.c b/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.c similarity index 100% rename from e2sim/ASN1c/ENBConfigurationUpdateAcknowledge.c rename to e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.c diff --git a/e2sim/ASN1c/ENBConfigurationUpdateAcknowledge.h b/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.h similarity index 100% rename from e2sim/ASN1c/ENBConfigurationUpdateAcknowledge.h rename to e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.h diff --git a/e2sim/ASN1c/ENBConfigurationUpdateFailure.c b/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.c similarity index 100% rename from e2sim/ASN1c/ENBConfigurationUpdateFailure.c rename to e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.c diff --git a/e2sim/ASN1c/ENBConfigurationUpdateFailure.h b/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.h similarity index 100% rename from e2sim/ASN1c/ENBConfigurationUpdateFailure.h rename to e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.h diff --git a/e2sim/ASN1c/ENDCCellActivationFailure.c b/e2sim/previous/ASN1c/ENDCCellActivationFailure.c similarity index 100% rename from e2sim/ASN1c/ENDCCellActivationFailure.c rename to e2sim/previous/ASN1c/ENDCCellActivationFailure.c diff --git a/e2sim/ASN1c/ENDCCellActivationFailure.h b/e2sim/previous/ASN1c/ENDCCellActivationFailure.h similarity index 100% rename from e2sim/ASN1c/ENDCCellActivationFailure.h rename to e2sim/previous/ASN1c/ENDCCellActivationFailure.h diff --git a/e2sim/ASN1c/ENDCCellActivationRequest.c b/e2sim/previous/ASN1c/ENDCCellActivationRequest.c similarity index 100% rename from e2sim/ASN1c/ENDCCellActivationRequest.c rename to e2sim/previous/ASN1c/ENDCCellActivationRequest.c diff --git a/e2sim/ASN1c/ENDCCellActivationRequest.h b/e2sim/previous/ASN1c/ENDCCellActivationRequest.h similarity index 100% rename from e2sim/ASN1c/ENDCCellActivationRequest.h rename to e2sim/previous/ASN1c/ENDCCellActivationRequest.h diff --git a/e2sim/ASN1c/ENDCCellActivationResponse.c b/e2sim/previous/ASN1c/ENDCCellActivationResponse.c similarity index 100% rename from e2sim/ASN1c/ENDCCellActivationResponse.c rename to e2sim/previous/ASN1c/ENDCCellActivationResponse.c diff --git a/e2sim/ASN1c/ENDCCellActivationResponse.h b/e2sim/previous/ASN1c/ENDCCellActivationResponse.h similarity index 100% rename from e2sim/ASN1c/ENDCCellActivationResponse.h rename to e2sim/previous/ASN1c/ENDCCellActivationResponse.h diff --git a/e2sim/ASN1c/ENDCConfigurationUpdate.c b/e2sim/previous/ASN1c/ENDCConfigurationUpdate.c similarity index 100% rename from e2sim/ASN1c/ENDCConfigurationUpdate.c rename to e2sim/previous/ASN1c/ENDCConfigurationUpdate.c diff --git a/e2sim/ASN1c/ENDCConfigurationUpdate.h b/e2sim/previous/ASN1c/ENDCConfigurationUpdate.h similarity index 100% rename from e2sim/ASN1c/ENDCConfigurationUpdate.h rename to e2sim/previous/ASN1c/ENDCConfigurationUpdate.h diff --git a/e2sim/ASN1c/ENDCConfigurationUpdateAcknowledge.c b/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.c similarity index 100% rename from e2sim/ASN1c/ENDCConfigurationUpdateAcknowledge.c rename to e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.c diff --git a/e2sim/ASN1c/ENDCConfigurationUpdateAcknowledge.h b/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.h similarity index 100% rename from e2sim/ASN1c/ENDCConfigurationUpdateAcknowledge.h rename to e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.h diff --git a/e2sim/ASN1c/ENDCConfigurationUpdateFailure.c b/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.c similarity index 100% rename from e2sim/ASN1c/ENDCConfigurationUpdateFailure.c rename to e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.c diff --git a/e2sim/ASN1c/ENDCConfigurationUpdateFailure.h b/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.h similarity index 100% rename from e2sim/ASN1c/ENDCConfigurationUpdateFailure.h rename to e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.h diff --git a/e2sim/ASN1c/ENDCPartialResetConfirm.c b/e2sim/previous/ASN1c/ENDCPartialResetConfirm.c similarity index 100% rename from e2sim/ASN1c/ENDCPartialResetConfirm.c rename to e2sim/previous/ASN1c/ENDCPartialResetConfirm.c diff --git a/e2sim/ASN1c/ENDCPartialResetConfirm.h b/e2sim/previous/ASN1c/ENDCPartialResetConfirm.h similarity index 100% rename from e2sim/ASN1c/ENDCPartialResetConfirm.h rename to e2sim/previous/ASN1c/ENDCPartialResetConfirm.h diff --git a/e2sim/ASN1c/ENDCPartialResetRequired.c b/e2sim/previous/ASN1c/ENDCPartialResetRequired.c similarity index 100% rename from e2sim/ASN1c/ENDCPartialResetRequired.c rename to e2sim/previous/ASN1c/ENDCPartialResetRequired.c diff --git a/e2sim/ASN1c/ENDCPartialResetRequired.h b/e2sim/previous/ASN1c/ENDCPartialResetRequired.h similarity index 100% rename from e2sim/ASN1c/ENDCPartialResetRequired.h rename to e2sim/previous/ASN1c/ENDCPartialResetRequired.h diff --git a/e2sim/ASN1c/ENDCX2RemovalFailure.c b/e2sim/previous/ASN1c/ENDCX2RemovalFailure.c similarity index 100% rename from e2sim/ASN1c/ENDCX2RemovalFailure.c rename to e2sim/previous/ASN1c/ENDCX2RemovalFailure.c diff --git a/e2sim/ASN1c/ENDCX2RemovalFailure.h b/e2sim/previous/ASN1c/ENDCX2RemovalFailure.h similarity index 100% rename from e2sim/ASN1c/ENDCX2RemovalFailure.h rename to e2sim/previous/ASN1c/ENDCX2RemovalFailure.h diff --git a/e2sim/ASN1c/ENDCX2RemovalRequest.c b/e2sim/previous/ASN1c/ENDCX2RemovalRequest.c similarity index 100% rename from e2sim/ASN1c/ENDCX2RemovalRequest.c rename to e2sim/previous/ASN1c/ENDCX2RemovalRequest.c diff --git a/e2sim/ASN1c/ENDCX2RemovalRequest.h b/e2sim/previous/ASN1c/ENDCX2RemovalRequest.h similarity index 100% rename from e2sim/ASN1c/ENDCX2RemovalRequest.h rename to e2sim/previous/ASN1c/ENDCX2RemovalRequest.h diff --git a/e2sim/ASN1c/ENDCX2RemovalResponse.c b/e2sim/previous/ASN1c/ENDCX2RemovalResponse.c similarity index 100% rename from e2sim/ASN1c/ENDCX2RemovalResponse.c rename to e2sim/previous/ASN1c/ENDCX2RemovalResponse.c diff --git a/e2sim/ASN1c/ENDCX2RemovalResponse.h b/e2sim/previous/ASN1c/ENDCX2RemovalResponse.h similarity index 100% rename from e2sim/ASN1c/ENDCX2RemovalResponse.h rename to e2sim/previous/ASN1c/ENDCX2RemovalResponse.h diff --git a/e2sim/ASN1c/ENDCX2SetupFailure.c b/e2sim/previous/ASN1c/ENDCX2SetupFailure.c similarity index 100% rename from e2sim/ASN1c/ENDCX2SetupFailure.c rename to e2sim/previous/ASN1c/ENDCX2SetupFailure.c diff --git a/e2sim/ASN1c/ENDCX2SetupFailure.h b/e2sim/previous/ASN1c/ENDCX2SetupFailure.h similarity index 100% rename from e2sim/ASN1c/ENDCX2SetupFailure.h rename to e2sim/previous/ASN1c/ENDCX2SetupFailure.h diff --git a/e2sim/ASN1c/ENDCX2SetupRequest.c b/e2sim/previous/ASN1c/ENDCX2SetupRequest.c similarity index 100% rename from e2sim/ASN1c/ENDCX2SetupRequest.c rename to e2sim/previous/ASN1c/ENDCX2SetupRequest.c diff --git a/e2sim/ASN1c/ENDCX2SetupRequest.h b/e2sim/previous/ASN1c/ENDCX2SetupRequest.h similarity index 100% rename from e2sim/ASN1c/ENDCX2SetupRequest.h rename to e2sim/previous/ASN1c/ENDCX2SetupRequest.h diff --git a/e2sim/ASN1c/ENDCX2SetupResponse.c b/e2sim/previous/ASN1c/ENDCX2SetupResponse.c similarity index 100% rename from e2sim/ASN1c/ENDCX2SetupResponse.c rename to e2sim/previous/ASN1c/ENDCX2SetupResponse.c diff --git a/e2sim/ASN1c/ENDCX2SetupResponse.h b/e2sim/previous/ASN1c/ENDCX2SetupResponse.h similarity index 100% rename from e2sim/ASN1c/ENDCX2SetupResponse.h rename to e2sim/previous/ASN1c/ENDCX2SetupResponse.h diff --git a/e2sim/ASN1c/EPLMNs.c b/e2sim/previous/ASN1c/EPLMNs.c similarity index 100% rename from e2sim/ASN1c/EPLMNs.c rename to e2sim/previous/ASN1c/EPLMNs.c diff --git a/e2sim/ASN1c/EPLMNs.h b/e2sim/previous/ASN1c/EPLMNs.h similarity index 100% rename from e2sim/ASN1c/EPLMNs.h rename to e2sim/previous/ASN1c/EPLMNs.h diff --git a/e2sim/ASN1c/ERABActivityNotifyItem.c b/e2sim/previous/ASN1c/ERABActivityNotifyItem.c similarity index 100% rename from e2sim/ASN1c/ERABActivityNotifyItem.c rename to e2sim/previous/ASN1c/ERABActivityNotifyItem.c diff --git a/e2sim/ASN1c/ERABActivityNotifyItem.h b/e2sim/previous/ASN1c/ERABActivityNotifyItem.h similarity index 100% rename from e2sim/ASN1c/ERABActivityNotifyItem.h rename to e2sim/previous/ASN1c/ERABActivityNotifyItem.h diff --git a/e2sim/ASN1c/ERABActivityNotifyItemList.c b/e2sim/previous/ASN1c/ERABActivityNotifyItemList.c similarity index 100% rename from e2sim/ASN1c/ERABActivityNotifyItemList.c rename to e2sim/previous/ASN1c/ERABActivityNotifyItemList.c diff --git a/e2sim/ASN1c/ERABActivityNotifyItemList.h b/e2sim/previous/ASN1c/ERABActivityNotifyItemList.h similarity index 100% rename from e2sim/ASN1c/ERABActivityNotifyItemList.h rename to e2sim/previous/ASN1c/ERABActivityNotifyItemList.h diff --git a/e2sim/ASN1c/EUTRA-Mode-Info.c b/e2sim/previous/ASN1c/EUTRA-Mode-Info.c similarity index 100% rename from e2sim/ASN1c/EUTRA-Mode-Info.c rename to e2sim/previous/ASN1c/EUTRA-Mode-Info.c diff --git a/e2sim/ASN1c/EUTRA-Mode-Info.h b/e2sim/previous/ASN1c/EUTRA-Mode-Info.h similarity index 100% rename from e2sim/ASN1c/EUTRA-Mode-Info.h rename to e2sim/previous/ASN1c/EUTRA-Mode-Info.h diff --git a/e2sim/ASN1c/EUTRANCellIdentifier.c b/e2sim/previous/ASN1c/EUTRANCellIdentifier.c similarity index 100% rename from e2sim/ASN1c/EUTRANCellIdentifier.c rename to e2sim/previous/ASN1c/EUTRANCellIdentifier.c diff --git a/e2sim/ASN1c/EUTRANCellIdentifier.h b/e2sim/previous/ASN1c/EUTRANCellIdentifier.h similarity index 100% rename from e2sim/ASN1c/EUTRANCellIdentifier.h rename to e2sim/previous/ASN1c/EUTRANCellIdentifier.h diff --git a/e2sim/ASN1c/EUTRANRCellResourceCoordinationRequest.c b/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.c similarity index 100% rename from e2sim/ASN1c/EUTRANRCellResourceCoordinationRequest.c rename to e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.c diff --git a/e2sim/ASN1c/EUTRANRCellResourceCoordinationRequest.h b/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.h similarity index 100% rename from e2sim/ASN1c/EUTRANRCellResourceCoordinationRequest.h rename to e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.h diff --git a/e2sim/ASN1c/EUTRANRCellResourceCoordinationResponse.c b/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.c similarity index 100% rename from e2sim/ASN1c/EUTRANRCellResourceCoordinationResponse.c rename to e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.c diff --git a/e2sim/ASN1c/EUTRANRCellResourceCoordinationResponse.h b/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.h similarity index 100% rename from e2sim/ASN1c/EUTRANRCellResourceCoordinationResponse.h rename to e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.h diff --git a/e2sim/ASN1c/EUTRANTraceID.c b/e2sim/previous/ASN1c/EUTRANTraceID.c similarity index 100% rename from e2sim/ASN1c/EUTRANTraceID.c rename to e2sim/previous/ASN1c/EUTRANTraceID.c diff --git a/e2sim/ASN1c/EUTRANTraceID.h b/e2sim/previous/ASN1c/EUTRANTraceID.h similarity index 100% rename from e2sim/ASN1c/EUTRANTraceID.h rename to e2sim/previous/ASN1c/EUTRANTraceID.h diff --git a/e2sim/ASN1c/EncryptionAlgorithms.c b/e2sim/previous/ASN1c/EncryptionAlgorithms.c similarity index 100% rename from e2sim/ASN1c/EncryptionAlgorithms.c rename to e2sim/previous/ASN1c/EncryptionAlgorithms.c diff --git a/e2sim/ASN1c/EncryptionAlgorithms.h b/e2sim/previous/ASN1c/EncryptionAlgorithms.h similarity index 100% rename from e2sim/ASN1c/EncryptionAlgorithms.h rename to e2sim/previous/ASN1c/EncryptionAlgorithms.h diff --git a/e2sim/ASN1c/EnhancedRNTP.c b/e2sim/previous/ASN1c/EnhancedRNTP.c similarity index 100% rename from e2sim/ASN1c/EnhancedRNTP.c rename to e2sim/previous/ASN1c/EnhancedRNTP.c diff --git a/e2sim/ASN1c/EnhancedRNTP.h b/e2sim/previous/ASN1c/EnhancedRNTP.h similarity index 100% rename from e2sim/ASN1c/EnhancedRNTP.h rename to e2sim/previous/ASN1c/EnhancedRNTP.h diff --git a/e2sim/ASN1c/EnhancedRNTPStartTime.c b/e2sim/previous/ASN1c/EnhancedRNTPStartTime.c similarity index 100% rename from e2sim/ASN1c/EnhancedRNTPStartTime.c rename to e2sim/previous/ASN1c/EnhancedRNTPStartTime.c diff --git a/e2sim/ASN1c/EnhancedRNTPStartTime.h b/e2sim/previous/ASN1c/EnhancedRNTPStartTime.h similarity index 100% rename from e2sim/ASN1c/EnhancedRNTPStartTime.h rename to e2sim/previous/ASN1c/EnhancedRNTPStartTime.h diff --git a/e2sim/ASN1c/ErrorIndication.c b/e2sim/previous/ASN1c/ErrorIndication.c similarity index 100% rename from e2sim/ASN1c/ErrorIndication.c rename to e2sim/previous/ASN1c/ErrorIndication.c diff --git a/e2sim/ASN1c/ErrorIndication.h b/e2sim/previous/ASN1c/ErrorIndication.h similarity index 100% rename from e2sim/ASN1c/ErrorIndication.h rename to e2sim/previous/ASN1c/ErrorIndication.h diff --git a/e2sim/ASN1c/EventType.c b/e2sim/previous/ASN1c/EventType.c similarity index 100% rename from e2sim/ASN1c/EventType.c rename to e2sim/previous/ASN1c/EventType.c diff --git a/e2sim/ASN1c/EventType.h b/e2sim/previous/ASN1c/EventType.h similarity index 100% rename from e2sim/ASN1c/EventType.h rename to e2sim/previous/ASN1c/EventType.h diff --git a/e2sim/ASN1c/ExpectedActivityPeriod.c b/e2sim/previous/ASN1c/ExpectedActivityPeriod.c similarity index 100% rename from e2sim/ASN1c/ExpectedActivityPeriod.c rename to e2sim/previous/ASN1c/ExpectedActivityPeriod.c diff --git a/e2sim/ASN1c/ExpectedActivityPeriod.h b/e2sim/previous/ASN1c/ExpectedActivityPeriod.h similarity index 100% rename from e2sim/ASN1c/ExpectedActivityPeriod.h rename to e2sim/previous/ASN1c/ExpectedActivityPeriod.h diff --git a/e2sim/ASN1c/ExpectedHOInterval.c b/e2sim/previous/ASN1c/ExpectedHOInterval.c similarity index 100% rename from e2sim/ASN1c/ExpectedHOInterval.c rename to e2sim/previous/ASN1c/ExpectedHOInterval.c diff --git a/e2sim/ASN1c/ExpectedHOInterval.h b/e2sim/previous/ASN1c/ExpectedHOInterval.h similarity index 100% rename from e2sim/ASN1c/ExpectedHOInterval.h rename to e2sim/previous/ASN1c/ExpectedHOInterval.h diff --git a/e2sim/ASN1c/ExpectedIdlePeriod.c b/e2sim/previous/ASN1c/ExpectedIdlePeriod.c similarity index 100% rename from e2sim/ASN1c/ExpectedIdlePeriod.c rename to e2sim/previous/ASN1c/ExpectedIdlePeriod.c diff --git a/e2sim/ASN1c/ExpectedIdlePeriod.h b/e2sim/previous/ASN1c/ExpectedIdlePeriod.h similarity index 100% rename from e2sim/ASN1c/ExpectedIdlePeriod.h rename to e2sim/previous/ASN1c/ExpectedIdlePeriod.h diff --git a/e2sim/ASN1c/ExpectedUEActivityBehaviour.c b/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.c similarity index 100% rename from e2sim/ASN1c/ExpectedUEActivityBehaviour.c rename to e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.c diff --git a/e2sim/ASN1c/ExpectedUEActivityBehaviour.h b/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.h similarity index 100% rename from e2sim/ASN1c/ExpectedUEActivityBehaviour.h rename to e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.h diff --git a/e2sim/ASN1c/ExpectedUEBehaviour.c b/e2sim/previous/ASN1c/ExpectedUEBehaviour.c similarity index 100% rename from e2sim/ASN1c/ExpectedUEBehaviour.c rename to e2sim/previous/ASN1c/ExpectedUEBehaviour.c diff --git a/e2sim/ASN1c/ExpectedUEBehaviour.h b/e2sim/previous/ASN1c/ExpectedUEBehaviour.h similarity index 100% rename from e2sim/ASN1c/ExpectedUEBehaviour.h rename to e2sim/previous/ASN1c/ExpectedUEBehaviour.h diff --git a/e2sim/ASN1c/ExtendedBitRate.c b/e2sim/previous/ASN1c/ExtendedBitRate.c similarity index 100% rename from e2sim/ASN1c/ExtendedBitRate.c rename to e2sim/previous/ASN1c/ExtendedBitRate.c diff --git a/e2sim/ASN1c/ExtendedBitRate.h b/e2sim/previous/ASN1c/ExtendedBitRate.h similarity index 100% rename from e2sim/ASN1c/ExtendedBitRate.h rename to e2sim/previous/ASN1c/ExtendedBitRate.h diff --git a/e2sim/ASN1c/ExtendedULInterferenceOverloadInfo.c b/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.c similarity index 100% rename from e2sim/ASN1c/ExtendedULInterferenceOverloadInfo.c rename to e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.c diff --git a/e2sim/ASN1c/ExtendedULInterferenceOverloadInfo.h b/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.h similarity index 100% rename from e2sim/ASN1c/ExtendedULInterferenceOverloadInfo.h rename to e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.h diff --git a/e2sim/ASN1c/FDD-Info.c b/e2sim/previous/ASN1c/FDD-Info.c similarity index 100% rename from e2sim/ASN1c/FDD-Info.c rename to e2sim/previous/ASN1c/FDD-Info.c diff --git a/e2sim/ASN1c/FDD-Info.h b/e2sim/previous/ASN1c/FDD-Info.h similarity index 100% rename from e2sim/ASN1c/FDD-Info.h rename to e2sim/previous/ASN1c/FDD-Info.h diff --git a/e2sim/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c b/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c similarity index 100% rename from e2sim/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c rename to e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c diff --git a/e2sim/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h b/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h similarity index 100% rename from e2sim/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h rename to e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h diff --git a/e2sim/ASN1c/FDD-InfoServedNRCell-Information.c b/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.c similarity index 100% rename from e2sim/ASN1c/FDD-InfoServedNRCell-Information.c rename to e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.c diff --git a/e2sim/ASN1c/FDD-InfoServedNRCell-Information.h b/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.h similarity index 100% rename from e2sim/ASN1c/FDD-InfoServedNRCell-Information.h rename to e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.h diff --git a/e2sim/ASN1c/FiveGS-TAC.c b/e2sim/previous/ASN1c/FiveGS-TAC.c similarity index 100% rename from e2sim/ASN1c/FiveGS-TAC.c rename to e2sim/previous/ASN1c/FiveGS-TAC.c diff --git a/e2sim/ASN1c/FiveGS-TAC.h b/e2sim/previous/ASN1c/FiveGS-TAC.h similarity index 100% rename from e2sim/ASN1c/FiveGS-TAC.h rename to e2sim/previous/ASN1c/FiveGS-TAC.h diff --git a/e2sim/ASN1c/ForbiddenInterRATs.c b/e2sim/previous/ASN1c/ForbiddenInterRATs.c similarity index 100% rename from e2sim/ASN1c/ForbiddenInterRATs.c rename to e2sim/previous/ASN1c/ForbiddenInterRATs.c diff --git a/e2sim/ASN1c/ForbiddenInterRATs.h b/e2sim/previous/ASN1c/ForbiddenInterRATs.h similarity index 100% rename from e2sim/ASN1c/ForbiddenInterRATs.h rename to e2sim/previous/ASN1c/ForbiddenInterRATs.h diff --git a/e2sim/ASN1c/ForbiddenLACs.c b/e2sim/previous/ASN1c/ForbiddenLACs.c similarity index 100% rename from e2sim/ASN1c/ForbiddenLACs.c rename to e2sim/previous/ASN1c/ForbiddenLACs.c diff --git a/e2sim/ASN1c/ForbiddenLACs.h b/e2sim/previous/ASN1c/ForbiddenLACs.h similarity index 100% rename from e2sim/ASN1c/ForbiddenLACs.h rename to e2sim/previous/ASN1c/ForbiddenLACs.h diff --git a/e2sim/ASN1c/ForbiddenLAs-Item.c b/e2sim/previous/ASN1c/ForbiddenLAs-Item.c similarity index 100% rename from e2sim/ASN1c/ForbiddenLAs-Item.c rename to e2sim/previous/ASN1c/ForbiddenLAs-Item.c diff --git a/e2sim/ASN1c/ForbiddenLAs-Item.h b/e2sim/previous/ASN1c/ForbiddenLAs-Item.h similarity index 100% rename from e2sim/ASN1c/ForbiddenLAs-Item.h rename to e2sim/previous/ASN1c/ForbiddenLAs-Item.h diff --git a/e2sim/ASN1c/ForbiddenLAs.c b/e2sim/previous/ASN1c/ForbiddenLAs.c similarity index 100% rename from e2sim/ASN1c/ForbiddenLAs.c rename to e2sim/previous/ASN1c/ForbiddenLAs.c diff --git a/e2sim/ASN1c/ForbiddenLAs.h b/e2sim/previous/ASN1c/ForbiddenLAs.h similarity index 100% rename from e2sim/ASN1c/ForbiddenLAs.h rename to e2sim/previous/ASN1c/ForbiddenLAs.h diff --git a/e2sim/ASN1c/ForbiddenTACs.c b/e2sim/previous/ASN1c/ForbiddenTACs.c similarity index 100% rename from e2sim/ASN1c/ForbiddenTACs.c rename to e2sim/previous/ASN1c/ForbiddenTACs.c diff --git a/e2sim/ASN1c/ForbiddenTACs.h b/e2sim/previous/ASN1c/ForbiddenTACs.h similarity index 100% rename from e2sim/ASN1c/ForbiddenTACs.h rename to e2sim/previous/ASN1c/ForbiddenTACs.h diff --git a/e2sim/ASN1c/ForbiddenTAs-Item.c b/e2sim/previous/ASN1c/ForbiddenTAs-Item.c similarity index 100% rename from e2sim/ASN1c/ForbiddenTAs-Item.c rename to e2sim/previous/ASN1c/ForbiddenTAs-Item.c diff --git a/e2sim/ASN1c/ForbiddenTAs-Item.h b/e2sim/previous/ASN1c/ForbiddenTAs-Item.h similarity index 100% rename from e2sim/ASN1c/ForbiddenTAs-Item.h rename to e2sim/previous/ASN1c/ForbiddenTAs-Item.h diff --git a/e2sim/ASN1c/ForbiddenTAs.c b/e2sim/previous/ASN1c/ForbiddenTAs.c similarity index 100% rename from e2sim/ASN1c/ForbiddenTAs.c rename to e2sim/previous/ASN1c/ForbiddenTAs.c diff --git a/e2sim/ASN1c/ForbiddenTAs.h b/e2sim/previous/ASN1c/ForbiddenTAs.h similarity index 100% rename from e2sim/ASN1c/ForbiddenTAs.h rename to e2sim/previous/ASN1c/ForbiddenTAs.h diff --git a/e2sim/ASN1c/Fourframes.c b/e2sim/previous/ASN1c/Fourframes.c similarity index 100% rename from e2sim/ASN1c/Fourframes.c rename to e2sim/previous/ASN1c/Fourframes.c diff --git a/e2sim/ASN1c/Fourframes.h b/e2sim/previous/ASN1c/Fourframes.h similarity index 100% rename from e2sim/ASN1c/Fourframes.h rename to e2sim/previous/ASN1c/Fourframes.h diff --git a/e2sim/ASN1c/FreqBandIndicator.c b/e2sim/previous/ASN1c/FreqBandIndicator.c similarity index 100% rename from e2sim/ASN1c/FreqBandIndicator.c rename to e2sim/previous/ASN1c/FreqBandIndicator.c diff --git a/e2sim/ASN1c/FreqBandIndicator.h b/e2sim/previous/ASN1c/FreqBandIndicator.h similarity index 100% rename from e2sim/ASN1c/FreqBandIndicator.h rename to e2sim/previous/ASN1c/FreqBandIndicator.h diff --git a/e2sim/ASN1c/FreqBandIndicatorPriority.c b/e2sim/previous/ASN1c/FreqBandIndicatorPriority.c similarity index 100% rename from e2sim/ASN1c/FreqBandIndicatorPriority.c rename to e2sim/previous/ASN1c/FreqBandIndicatorPriority.c diff --git a/e2sim/ASN1c/FreqBandIndicatorPriority.h b/e2sim/previous/ASN1c/FreqBandIndicatorPriority.h similarity index 100% rename from e2sim/ASN1c/FreqBandIndicatorPriority.h rename to e2sim/previous/ASN1c/FreqBandIndicatorPriority.h diff --git a/e2sim/ASN1c/FreqBandNrItem.c b/e2sim/previous/ASN1c/FreqBandNrItem.c similarity index 100% rename from e2sim/ASN1c/FreqBandNrItem.c rename to e2sim/previous/ASN1c/FreqBandNrItem.c diff --git a/e2sim/ASN1c/FreqBandNrItem.h b/e2sim/previous/ASN1c/FreqBandNrItem.h similarity index 100% rename from e2sim/ASN1c/FreqBandNrItem.h rename to e2sim/previous/ASN1c/FreqBandNrItem.h diff --git a/e2sim/ASN1c/GBR-QosInformation.c b/e2sim/previous/ASN1c/GBR-QosInformation.c similarity index 100% rename from e2sim/ASN1c/GBR-QosInformation.c rename to e2sim/previous/ASN1c/GBR-QosInformation.c diff --git a/e2sim/ASN1c/GBR-QosInformation.h b/e2sim/previous/ASN1c/GBR-QosInformation.h similarity index 100% rename from e2sim/ASN1c/GBR-QosInformation.h rename to e2sim/previous/ASN1c/GBR-QosInformation.h diff --git a/e2sim/ASN1c/GNB-ID.c b/e2sim/previous/ASN1c/GNB-ID.c similarity index 100% rename from e2sim/ASN1c/GNB-ID.c rename to e2sim/previous/ASN1c/GNB-ID.c diff --git a/e2sim/ASN1c/GNB-ID.h b/e2sim/previous/ASN1c/GNB-ID.h similarity index 100% rename from e2sim/ASN1c/GNB-ID.h rename to e2sim/previous/ASN1c/GNB-ID.h diff --git a/e2sim/ASN1c/GNBOverloadInformation.c b/e2sim/previous/ASN1c/GNBOverloadInformation.c similarity index 100% rename from e2sim/ASN1c/GNBOverloadInformation.c rename to e2sim/previous/ASN1c/GNBOverloadInformation.c diff --git a/e2sim/ASN1c/GNBOverloadInformation.h b/e2sim/previous/ASN1c/GNBOverloadInformation.h similarity index 100% rename from e2sim/ASN1c/GNBOverloadInformation.h rename to e2sim/previous/ASN1c/GNBOverloadInformation.h diff --git a/e2sim/ASN1c/GNBStatusIndication.c b/e2sim/previous/ASN1c/GNBStatusIndication.c similarity index 100% rename from e2sim/ASN1c/GNBStatusIndication.c rename to e2sim/previous/ASN1c/GNBStatusIndication.c diff --git a/e2sim/ASN1c/GNBStatusIndication.h b/e2sim/previous/ASN1c/GNBStatusIndication.h similarity index 100% rename from e2sim/ASN1c/GNBStatusIndication.h rename to e2sim/previous/ASN1c/GNBStatusIndication.h diff --git a/e2sim/ASN1c/GTP-TEI.c b/e2sim/previous/ASN1c/GTP-TEI.c similarity index 100% rename from e2sim/ASN1c/GTP-TEI.c rename to e2sim/previous/ASN1c/GTP-TEI.c diff --git a/e2sim/ASN1c/GTP-TEI.h b/e2sim/previous/ASN1c/GTP-TEI.h similarity index 100% rename from e2sim/ASN1c/GTP-TEI.h rename to e2sim/previous/ASN1c/GTP-TEI.h diff --git a/e2sim/ASN1c/GTPtunnelEndpoint.c b/e2sim/previous/ASN1c/GTPtunnelEndpoint.c similarity index 100% rename from e2sim/ASN1c/GTPtunnelEndpoint.c rename to e2sim/previous/ASN1c/GTPtunnelEndpoint.c diff --git a/e2sim/ASN1c/GTPtunnelEndpoint.h b/e2sim/previous/ASN1c/GTPtunnelEndpoint.h similarity index 100% rename from e2sim/ASN1c/GTPtunnelEndpoint.h rename to e2sim/previous/ASN1c/GTPtunnelEndpoint.h diff --git a/e2sim/ASN1c/GU-Group-ID.c b/e2sim/previous/ASN1c/GU-Group-ID.c similarity index 100% rename from e2sim/ASN1c/GU-Group-ID.c rename to e2sim/previous/ASN1c/GU-Group-ID.c diff --git a/e2sim/ASN1c/GU-Group-ID.h b/e2sim/previous/ASN1c/GU-Group-ID.h similarity index 100% rename from e2sim/ASN1c/GU-Group-ID.h rename to e2sim/previous/ASN1c/GU-Group-ID.h diff --git a/e2sim/ASN1c/GUGroupIDList.c b/e2sim/previous/ASN1c/GUGroupIDList.c similarity index 100% rename from e2sim/ASN1c/GUGroupIDList.c rename to e2sim/previous/ASN1c/GUGroupIDList.c diff --git a/e2sim/ASN1c/GUGroupIDList.h b/e2sim/previous/ASN1c/GUGroupIDList.h similarity index 100% rename from e2sim/ASN1c/GUGroupIDList.h rename to e2sim/previous/ASN1c/GUGroupIDList.h diff --git a/e2sim/ASN1c/GUMMEI.c b/e2sim/previous/ASN1c/GUMMEI.c similarity index 100% rename from e2sim/ASN1c/GUMMEI.c rename to e2sim/previous/ASN1c/GUMMEI.c diff --git a/e2sim/ASN1c/GUMMEI.h b/e2sim/previous/ASN1c/GUMMEI.h similarity index 100% rename from e2sim/ASN1c/GUMMEI.h rename to e2sim/previous/ASN1c/GUMMEI.h diff --git a/e2sim/ASN1c/GlobalENB-ID.c b/e2sim/previous/ASN1c/GlobalENB-ID.c similarity index 100% rename from e2sim/ASN1c/GlobalENB-ID.c rename to e2sim/previous/ASN1c/GlobalENB-ID.c diff --git a/e2sim/ASN1c/GlobalENB-ID.h b/e2sim/previous/ASN1c/GlobalENB-ID.h similarity index 100% rename from e2sim/ASN1c/GlobalENB-ID.h rename to e2sim/previous/ASN1c/GlobalENB-ID.h diff --git a/e2sim/ASN1c/GlobalGNB-ID.c b/e2sim/previous/ASN1c/GlobalGNB-ID.c similarity index 100% rename from e2sim/ASN1c/GlobalGNB-ID.c rename to e2sim/previous/ASN1c/GlobalGNB-ID.c diff --git a/e2sim/ASN1c/GlobalGNB-ID.h b/e2sim/previous/ASN1c/GlobalGNB-ID.h similarity index 100% rename from e2sim/ASN1c/GlobalGNB-ID.h rename to e2sim/previous/ASN1c/GlobalGNB-ID.h diff --git a/e2sim/ASN1c/HFN.c b/e2sim/previous/ASN1c/HFN.c similarity index 100% rename from e2sim/ASN1c/HFN.c rename to e2sim/previous/ASN1c/HFN.c diff --git a/e2sim/ASN1c/HFN.h b/e2sim/previous/ASN1c/HFN.h similarity index 100% rename from e2sim/ASN1c/HFN.h rename to e2sim/previous/ASN1c/HFN.h diff --git a/e2sim/ASN1c/HFNModified.c b/e2sim/previous/ASN1c/HFNModified.c similarity index 100% rename from e2sim/ASN1c/HFNModified.c rename to e2sim/previous/ASN1c/HFNModified.c diff --git a/e2sim/ASN1c/HFNModified.h b/e2sim/previous/ASN1c/HFNModified.h similarity index 100% rename from e2sim/ASN1c/HFNModified.h rename to e2sim/previous/ASN1c/HFNModified.h diff --git a/e2sim/ASN1c/HFNforPDCP-SNlength18.c b/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c similarity index 100% rename from e2sim/ASN1c/HFNforPDCP-SNlength18.c rename to e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c diff --git a/e2sim/ASN1c/HFNforPDCP-SNlength18.h b/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h similarity index 100% rename from e2sim/ASN1c/HFNforPDCP-SNlength18.h rename to e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h diff --git a/e2sim/ASN1c/HWLoadIndicator.c b/e2sim/previous/ASN1c/HWLoadIndicator.c similarity index 100% rename from e2sim/ASN1c/HWLoadIndicator.c rename to e2sim/previous/ASN1c/HWLoadIndicator.c diff --git a/e2sim/ASN1c/HWLoadIndicator.h b/e2sim/previous/ASN1c/HWLoadIndicator.h similarity index 100% rename from e2sim/ASN1c/HWLoadIndicator.h rename to e2sim/previous/ASN1c/HWLoadIndicator.h diff --git a/e2sim/ASN1c/HandoverCancel.c b/e2sim/previous/ASN1c/HandoverCancel.c similarity index 100% rename from e2sim/ASN1c/HandoverCancel.c rename to e2sim/previous/ASN1c/HandoverCancel.c diff --git a/e2sim/ASN1c/HandoverCancel.h b/e2sim/previous/ASN1c/HandoverCancel.h similarity index 100% rename from e2sim/ASN1c/HandoverCancel.h rename to e2sim/previous/ASN1c/HandoverCancel.h diff --git a/e2sim/ASN1c/HandoverPreparationFailure.c b/e2sim/previous/ASN1c/HandoverPreparationFailure.c similarity index 100% rename from e2sim/ASN1c/HandoverPreparationFailure.c rename to e2sim/previous/ASN1c/HandoverPreparationFailure.c diff --git a/e2sim/ASN1c/HandoverPreparationFailure.h b/e2sim/previous/ASN1c/HandoverPreparationFailure.h similarity index 100% rename from e2sim/ASN1c/HandoverPreparationFailure.h rename to e2sim/previous/ASN1c/HandoverPreparationFailure.h diff --git a/e2sim/ASN1c/HandoverReport.c b/e2sim/previous/ASN1c/HandoverReport.c similarity index 100% rename from e2sim/ASN1c/HandoverReport.c rename to e2sim/previous/ASN1c/HandoverReport.c diff --git a/e2sim/ASN1c/HandoverReport.h b/e2sim/previous/ASN1c/HandoverReport.h similarity index 100% rename from e2sim/ASN1c/HandoverReport.h rename to e2sim/previous/ASN1c/HandoverReport.h diff --git a/e2sim/ASN1c/HandoverReportType.c b/e2sim/previous/ASN1c/HandoverReportType.c similarity index 100% rename from e2sim/ASN1c/HandoverReportType.c rename to e2sim/previous/ASN1c/HandoverReportType.c diff --git a/e2sim/ASN1c/HandoverReportType.h b/e2sim/previous/ASN1c/HandoverReportType.h similarity index 100% rename from e2sim/ASN1c/HandoverReportType.h rename to e2sim/previous/ASN1c/HandoverReportType.h diff --git a/e2sim/ASN1c/HandoverRequest.c b/e2sim/previous/ASN1c/HandoverRequest.c similarity index 100% rename from e2sim/ASN1c/HandoverRequest.c rename to e2sim/previous/ASN1c/HandoverRequest.c diff --git a/e2sim/ASN1c/HandoverRequest.h b/e2sim/previous/ASN1c/HandoverRequest.h similarity index 100% rename from e2sim/ASN1c/HandoverRequest.h rename to e2sim/previous/ASN1c/HandoverRequest.h diff --git a/e2sim/ASN1c/HandoverRequestAcknowledge.c b/e2sim/previous/ASN1c/HandoverRequestAcknowledge.c similarity index 100% rename from e2sim/ASN1c/HandoverRequestAcknowledge.c rename to e2sim/previous/ASN1c/HandoverRequestAcknowledge.c diff --git a/e2sim/ASN1c/HandoverRequestAcknowledge.h b/e2sim/previous/ASN1c/HandoverRequestAcknowledge.h similarity index 100% rename from e2sim/ASN1c/HandoverRequestAcknowledge.h rename to e2sim/previous/ASN1c/HandoverRequestAcknowledge.h diff --git a/e2sim/ASN1c/HandoverRestrictionList.c b/e2sim/previous/ASN1c/HandoverRestrictionList.c similarity index 100% rename from e2sim/ASN1c/HandoverRestrictionList.c rename to e2sim/previous/ASN1c/HandoverRestrictionList.c diff --git a/e2sim/ASN1c/HandoverRestrictionList.h b/e2sim/previous/ASN1c/HandoverRestrictionList.h similarity index 100% rename from e2sim/ASN1c/HandoverRestrictionList.h rename to e2sim/previous/ASN1c/HandoverRestrictionList.h diff --git a/e2sim/ASN1c/INTEGER.c b/e2sim/previous/ASN1c/INTEGER.c similarity index 100% rename from e2sim/ASN1c/INTEGER.c rename to e2sim/previous/ASN1c/INTEGER.c diff --git a/e2sim/ASN1c/INTEGER.h b/e2sim/previous/ASN1c/INTEGER.h similarity index 100% rename from e2sim/ASN1c/INTEGER.h rename to e2sim/previous/ASN1c/INTEGER.h diff --git a/e2sim/ASN1c/InitiatingMessage.c b/e2sim/previous/ASN1c/InitiatingMessage.c similarity index 100% rename from e2sim/ASN1c/InitiatingMessage.c rename to e2sim/previous/ASN1c/InitiatingMessage.c diff --git a/e2sim/ASN1c/InitiatingMessage.h b/e2sim/previous/ASN1c/InitiatingMessage.h similarity index 100% rename from e2sim/ASN1c/InitiatingMessage.h rename to e2sim/previous/ASN1c/InitiatingMessage.h diff --git a/e2sim/ASN1c/InitiatingNodeType-EndcConfigUpdate.c b/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.c similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EndcConfigUpdate.c rename to e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.c diff --git a/e2sim/ASN1c/InitiatingNodeType-EndcConfigUpdate.h b/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.h similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EndcConfigUpdate.h rename to e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.h diff --git a/e2sim/ASN1c/InitiatingNodeType-EndcX2Removal.c b/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.c similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EndcX2Removal.c rename to e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.c diff --git a/e2sim/ASN1c/InitiatingNodeType-EndcX2Removal.h b/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.h similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EndcX2Removal.h rename to e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.h diff --git a/e2sim/ASN1c/InitiatingNodeType-EndcX2Setup.c b/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.c similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EndcX2Setup.c rename to e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.c diff --git a/e2sim/ASN1c/InitiatingNodeType-EndcX2Setup.h b/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.h similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EndcX2Setup.h rename to e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.h diff --git a/e2sim/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c b/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c rename to e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c diff --git a/e2sim/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h b/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h similarity index 100% rename from e2sim/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h rename to e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h diff --git a/e2sim/ASN1c/IntegrityProtectionAlgorithms.c b/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.c similarity index 100% rename from e2sim/ASN1c/IntegrityProtectionAlgorithms.c rename to e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.c diff --git a/e2sim/ASN1c/IntegrityProtectionAlgorithms.h b/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.h similarity index 100% rename from e2sim/ASN1c/IntegrityProtectionAlgorithms.h rename to e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.h diff --git a/e2sim/ASN1c/Interface-ID.c b/e2sim/previous/ASN1c/Interface-ID.c similarity index 100% rename from e2sim/ASN1c/Interface-ID.c rename to e2sim/previous/ASN1c/Interface-ID.c diff --git a/e2sim/ASN1c/Interface-ID.h b/e2sim/previous/ASN1c/Interface-ID.h similarity index 100% rename from e2sim/ASN1c/Interface-ID.h rename to e2sim/previous/ASN1c/Interface-ID.h diff --git a/e2sim/ASN1c/InterfaceDirection.c b/e2sim/previous/ASN1c/InterfaceDirection.c similarity index 100% rename from e2sim/ASN1c/InterfaceDirection.c rename to e2sim/previous/ASN1c/InterfaceDirection.c diff --git a/e2sim/ASN1c/InterfaceDirection.h b/e2sim/previous/ASN1c/InterfaceDirection.h similarity index 100% rename from e2sim/ASN1c/InterfaceDirection.h rename to e2sim/previous/ASN1c/InterfaceDirection.h diff --git a/e2sim/ASN1c/InterfaceMessage.c b/e2sim/previous/ASN1c/InterfaceMessage.c similarity index 100% rename from e2sim/ASN1c/InterfaceMessage.c rename to e2sim/previous/ASN1c/InterfaceMessage.c diff --git a/e2sim/ASN1c/InterfaceMessage.h b/e2sim/previous/ASN1c/InterfaceMessage.h similarity index 100% rename from e2sim/ASN1c/InterfaceMessage.h rename to e2sim/previous/ASN1c/InterfaceMessage.h diff --git a/e2sim/ASN1c/InterfaceMessageType.c b/e2sim/previous/ASN1c/InterfaceMessageType.c similarity index 100% rename from e2sim/ASN1c/InterfaceMessageType.c rename to e2sim/previous/ASN1c/InterfaceMessageType.c diff --git a/e2sim/ASN1c/InterfaceMessageType.h b/e2sim/previous/ASN1c/InterfaceMessageType.h similarity index 100% rename from e2sim/ASN1c/InterfaceMessageType.h rename to e2sim/previous/ASN1c/InterfaceMessageType.h diff --git a/e2sim/ASN1c/InterfaceProtocolIE-ID.c b/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-ID.c rename to e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c diff --git a/e2sim/ASN1c/InterfaceProtocolIE-ID.h b/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-ID.h rename to e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h diff --git a/e2sim/ASN1c/InterfaceProtocolIE-Item.c b/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.c similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-Item.c rename to e2sim/previous/ASN1c/InterfaceProtocolIE-Item.c diff --git a/e2sim/ASN1c/InterfaceProtocolIE-Item.h b/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.h similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-Item.h rename to e2sim/previous/ASN1c/InterfaceProtocolIE-Item.h diff --git a/e2sim/ASN1c/InterfaceProtocolIE-Test.c b/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.c similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-Test.c rename to e2sim/previous/ASN1c/InterfaceProtocolIE-Test.c diff --git a/e2sim/ASN1c/InterfaceProtocolIE-Test.h b/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.h similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-Test.h rename to e2sim/previous/ASN1c/InterfaceProtocolIE-Test.h diff --git a/e2sim/ASN1c/InterfaceProtocolIE-Value.c b/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.c similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-Value.c rename to e2sim/previous/ASN1c/InterfaceProtocolIE-Value.c diff --git a/e2sim/ASN1c/InterfaceProtocolIE-Value.h b/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.h similarity index 100% rename from e2sim/ASN1c/InterfaceProtocolIE-Value.h rename to e2sim/previous/ASN1c/InterfaceProtocolIE-Value.h diff --git a/e2sim/ASN1c/InterfacesToTrace.c b/e2sim/previous/ASN1c/InterfacesToTrace.c similarity index 100% rename from e2sim/ASN1c/InterfacesToTrace.c rename to e2sim/previous/ASN1c/InterfacesToTrace.c diff --git a/e2sim/ASN1c/InterfacesToTrace.h b/e2sim/previous/ASN1c/InterfacesToTrace.h similarity index 100% rename from e2sim/ASN1c/InterfacesToTrace.h rename to e2sim/previous/ASN1c/InterfacesToTrace.h diff --git a/e2sim/ASN1c/InvokeIndication.c b/e2sim/previous/ASN1c/InvokeIndication.c similarity index 100% rename from e2sim/ASN1c/InvokeIndication.c rename to e2sim/previous/ASN1c/InvokeIndication.c diff --git a/e2sim/ASN1c/InvokeIndication.h b/e2sim/previous/ASN1c/InvokeIndication.h similarity index 100% rename from e2sim/ASN1c/InvokeIndication.h rename to e2sim/previous/ASN1c/InvokeIndication.h diff --git a/e2sim/ASN1c/Key-eNodeB-Star.c b/e2sim/previous/ASN1c/Key-eNodeB-Star.c similarity index 100% rename from e2sim/ASN1c/Key-eNodeB-Star.c rename to e2sim/previous/ASN1c/Key-eNodeB-Star.c diff --git a/e2sim/ASN1c/Key-eNodeB-Star.h b/e2sim/previous/ASN1c/Key-eNodeB-Star.h similarity index 100% rename from e2sim/ASN1c/Key-eNodeB-Star.h rename to e2sim/previous/ASN1c/Key-eNodeB-Star.h diff --git a/e2sim/ASN1c/LAC.c b/e2sim/previous/ASN1c/LAC.c similarity index 100% rename from e2sim/ASN1c/LAC.c rename to e2sim/previous/ASN1c/LAC.c diff --git a/e2sim/ASN1c/LAC.h b/e2sim/previous/ASN1c/LAC.h similarity index 100% rename from e2sim/ASN1c/LAC.h rename to e2sim/previous/ASN1c/LAC.h diff --git a/e2sim/ASN1c/LCID.c b/e2sim/previous/ASN1c/LCID.c similarity index 100% rename from e2sim/ASN1c/LCID.c rename to e2sim/previous/ASN1c/LCID.c diff --git a/e2sim/ASN1c/LCID.h b/e2sim/previous/ASN1c/LCID.h similarity index 100% rename from e2sim/ASN1c/LCID.h rename to e2sim/previous/ASN1c/LCID.h diff --git a/e2sim/ASN1c/LHN-ID.c b/e2sim/previous/ASN1c/LHN-ID.c similarity index 100% rename from e2sim/ASN1c/LHN-ID.c rename to e2sim/previous/ASN1c/LHN-ID.c diff --git a/e2sim/ASN1c/LHN-ID.h b/e2sim/previous/ASN1c/LHN-ID.h similarity index 100% rename from e2sim/ASN1c/LHN-ID.h rename to e2sim/previous/ASN1c/LHN-ID.h diff --git a/e2sim/ASN1c/LastVisitedCell-Item.c b/e2sim/previous/ASN1c/LastVisitedCell-Item.c similarity index 100% rename from e2sim/ASN1c/LastVisitedCell-Item.c rename to e2sim/previous/ASN1c/LastVisitedCell-Item.c diff --git a/e2sim/ASN1c/LastVisitedCell-Item.h b/e2sim/previous/ASN1c/LastVisitedCell-Item.h similarity index 100% rename from e2sim/ASN1c/LastVisitedCell-Item.h rename to e2sim/previous/ASN1c/LastVisitedCell-Item.h diff --git a/e2sim/ASN1c/LastVisitedEUTRANCellInformation.c b/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.c similarity index 100% rename from e2sim/ASN1c/LastVisitedEUTRANCellInformation.c rename to e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.c diff --git a/e2sim/ASN1c/LastVisitedEUTRANCellInformation.h b/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.h similarity index 100% rename from e2sim/ASN1c/LastVisitedEUTRANCellInformation.h rename to e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.h diff --git a/e2sim/ASN1c/LastVisitedGERANCellInformation.c b/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.c similarity index 100% rename from e2sim/ASN1c/LastVisitedGERANCellInformation.c rename to e2sim/previous/ASN1c/LastVisitedGERANCellInformation.c diff --git a/e2sim/ASN1c/LastVisitedGERANCellInformation.h b/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.h similarity index 100% rename from e2sim/ASN1c/LastVisitedGERANCellInformation.h rename to e2sim/previous/ASN1c/LastVisitedGERANCellInformation.h diff --git a/e2sim/ASN1c/LastVisitedNGRANCellInformation.c b/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.c similarity index 100% rename from e2sim/ASN1c/LastVisitedNGRANCellInformation.c rename to e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.c diff --git a/e2sim/ASN1c/LastVisitedNGRANCellInformation.h b/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.h similarity index 100% rename from e2sim/ASN1c/LastVisitedNGRANCellInformation.h rename to e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.h diff --git a/e2sim/ASN1c/LastVisitedUTRANCellInformation.c b/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.c similarity index 100% rename from e2sim/ASN1c/LastVisitedUTRANCellInformation.c rename to e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.c diff --git a/e2sim/ASN1c/LastVisitedUTRANCellInformation.h b/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.h similarity index 100% rename from e2sim/ASN1c/LastVisitedUTRANCellInformation.h rename to e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.h diff --git a/e2sim/ASN1c/Limited-list.c b/e2sim/previous/ASN1c/Limited-list.c similarity index 100% rename from e2sim/ASN1c/Limited-list.c rename to e2sim/previous/ASN1c/Limited-list.c diff --git a/e2sim/ASN1c/Limited-list.h b/e2sim/previous/ASN1c/Limited-list.h similarity index 100% rename from e2sim/ASN1c/Limited-list.h rename to e2sim/previous/ASN1c/Limited-list.h diff --git a/e2sim/ASN1c/Links-to-log.c b/e2sim/previous/ASN1c/Links-to-log.c similarity index 100% rename from e2sim/ASN1c/Links-to-log.c rename to e2sim/previous/ASN1c/Links-to-log.c diff --git a/e2sim/ASN1c/Links-to-log.h b/e2sim/previous/ASN1c/Links-to-log.h similarity index 100% rename from e2sim/ASN1c/Links-to-log.h rename to e2sim/previous/ASN1c/Links-to-log.h diff --git a/e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c b/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c similarity index 100% rename from e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c rename to e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c diff --git a/e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h b/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h similarity index 100% rename from e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h rename to e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h diff --git a/e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c b/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c similarity index 100% rename from e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c rename to e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c diff --git a/e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h b/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h similarity index 100% rename from e2sim/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h rename to e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h diff --git a/e2sim/ASN1c/ListofEUTRACellsinNRCoordinationReq.c b/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.c similarity index 100% rename from e2sim/ASN1c/ListofEUTRACellsinNRCoordinationReq.c rename to e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.c diff --git a/e2sim/ASN1c/ListofEUTRACellsinNRCoordinationReq.h b/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.h similarity index 100% rename from e2sim/ASN1c/ListofEUTRACellsinNRCoordinationReq.h rename to e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.h diff --git a/e2sim/ASN1c/ListofNRCellsinNRCoordinationReq.c b/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.c similarity index 100% rename from e2sim/ASN1c/ListofNRCellsinNRCoordinationReq.c rename to e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.c diff --git a/e2sim/ASN1c/ListofNRCellsinNRCoordinationReq.h b/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.h similarity index 100% rename from e2sim/ASN1c/ListofNRCellsinNRCoordinationReq.h rename to e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.h diff --git a/e2sim/ASN1c/ListofNRCellsinNRCoordinationResp.c b/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.c similarity index 100% rename from e2sim/ASN1c/ListofNRCellsinNRCoordinationResp.c rename to e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.c diff --git a/e2sim/ASN1c/ListofNRCellsinNRCoordinationResp.h b/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.h similarity index 100% rename from e2sim/ASN1c/ListofNRCellsinNRCoordinationResp.h rename to e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.h diff --git a/e2sim/ASN1c/LoadIndicator.c b/e2sim/previous/ASN1c/LoadIndicator.c similarity index 100% rename from e2sim/ASN1c/LoadIndicator.c rename to e2sim/previous/ASN1c/LoadIndicator.c diff --git a/e2sim/ASN1c/LoadIndicator.h b/e2sim/previous/ASN1c/LoadIndicator.h similarity index 100% rename from e2sim/ASN1c/LoadIndicator.h rename to e2sim/previous/ASN1c/LoadIndicator.h diff --git a/e2sim/ASN1c/LoadInformation.c b/e2sim/previous/ASN1c/LoadInformation.c similarity index 100% rename from e2sim/ASN1c/LoadInformation.c rename to e2sim/previous/ASN1c/LoadInformation.c diff --git a/e2sim/ASN1c/LoadInformation.h b/e2sim/previous/ASN1c/LoadInformation.h similarity index 100% rename from e2sim/ASN1c/LoadInformation.h rename to e2sim/previous/ASN1c/LoadInformation.h diff --git a/e2sim/ASN1c/LocationReportingInformation.c b/e2sim/previous/ASN1c/LocationReportingInformation.c similarity index 100% rename from e2sim/ASN1c/LocationReportingInformation.c rename to e2sim/previous/ASN1c/LocationReportingInformation.c diff --git a/e2sim/ASN1c/LocationReportingInformation.h b/e2sim/previous/ASN1c/LocationReportingInformation.h similarity index 100% rename from e2sim/ASN1c/LocationReportingInformation.h rename to e2sim/previous/ASN1c/LocationReportingInformation.h diff --git a/e2sim/ASN1c/M1PeriodicReporting.c b/e2sim/previous/ASN1c/M1PeriodicReporting.c similarity index 100% rename from e2sim/ASN1c/M1PeriodicReporting.c rename to e2sim/previous/ASN1c/M1PeriodicReporting.c diff --git a/e2sim/ASN1c/M1PeriodicReporting.h b/e2sim/previous/ASN1c/M1PeriodicReporting.h similarity index 100% rename from e2sim/ASN1c/M1PeriodicReporting.h rename to e2sim/previous/ASN1c/M1PeriodicReporting.h diff --git a/e2sim/ASN1c/M1ReportingTrigger.c b/e2sim/previous/ASN1c/M1ReportingTrigger.c similarity index 100% rename from e2sim/ASN1c/M1ReportingTrigger.c rename to e2sim/previous/ASN1c/M1ReportingTrigger.c diff --git a/e2sim/ASN1c/M1ReportingTrigger.h b/e2sim/previous/ASN1c/M1ReportingTrigger.h similarity index 100% rename from e2sim/ASN1c/M1ReportingTrigger.h rename to e2sim/previous/ASN1c/M1ReportingTrigger.h diff --git a/e2sim/ASN1c/M1ThresholdEventA2.c b/e2sim/previous/ASN1c/M1ThresholdEventA2.c similarity index 100% rename from e2sim/ASN1c/M1ThresholdEventA2.c rename to e2sim/previous/ASN1c/M1ThresholdEventA2.c diff --git a/e2sim/ASN1c/M1ThresholdEventA2.h b/e2sim/previous/ASN1c/M1ThresholdEventA2.h similarity index 100% rename from e2sim/ASN1c/M1ThresholdEventA2.h rename to e2sim/previous/ASN1c/M1ThresholdEventA2.h diff --git a/e2sim/ASN1c/M3Configuration.c b/e2sim/previous/ASN1c/M3Configuration.c similarity index 100% rename from e2sim/ASN1c/M3Configuration.c rename to e2sim/previous/ASN1c/M3Configuration.c diff --git a/e2sim/ASN1c/M3Configuration.h b/e2sim/previous/ASN1c/M3Configuration.h similarity index 100% rename from e2sim/ASN1c/M3Configuration.h rename to e2sim/previous/ASN1c/M3Configuration.h diff --git a/e2sim/ASN1c/M3period.c b/e2sim/previous/ASN1c/M3period.c similarity index 100% rename from e2sim/ASN1c/M3period.c rename to e2sim/previous/ASN1c/M3period.c diff --git a/e2sim/ASN1c/M3period.h b/e2sim/previous/ASN1c/M3period.h similarity index 100% rename from e2sim/ASN1c/M3period.h rename to e2sim/previous/ASN1c/M3period.h diff --git a/e2sim/ASN1c/M4Configuration.c b/e2sim/previous/ASN1c/M4Configuration.c similarity index 100% rename from e2sim/ASN1c/M4Configuration.c rename to e2sim/previous/ASN1c/M4Configuration.c diff --git a/e2sim/ASN1c/M4Configuration.h b/e2sim/previous/ASN1c/M4Configuration.h similarity index 100% rename from e2sim/ASN1c/M4Configuration.h rename to e2sim/previous/ASN1c/M4Configuration.h diff --git a/e2sim/ASN1c/M4period.c b/e2sim/previous/ASN1c/M4period.c similarity index 100% rename from e2sim/ASN1c/M4period.c rename to e2sim/previous/ASN1c/M4period.c diff --git a/e2sim/ASN1c/M4period.h b/e2sim/previous/ASN1c/M4period.h similarity index 100% rename from e2sim/ASN1c/M4period.h rename to e2sim/previous/ASN1c/M4period.h diff --git a/e2sim/ASN1c/M5Configuration.c b/e2sim/previous/ASN1c/M5Configuration.c similarity index 100% rename from e2sim/ASN1c/M5Configuration.c rename to e2sim/previous/ASN1c/M5Configuration.c diff --git a/e2sim/ASN1c/M5Configuration.h b/e2sim/previous/ASN1c/M5Configuration.h similarity index 100% rename from e2sim/ASN1c/M5Configuration.h rename to e2sim/previous/ASN1c/M5Configuration.h diff --git a/e2sim/ASN1c/M5period.c b/e2sim/previous/ASN1c/M5period.c similarity index 100% rename from e2sim/ASN1c/M5period.c rename to e2sim/previous/ASN1c/M5period.c diff --git a/e2sim/ASN1c/M5period.h b/e2sim/previous/ASN1c/M5period.h similarity index 100% rename from e2sim/ASN1c/M5period.h rename to e2sim/previous/ASN1c/M5period.h diff --git a/e2sim/ASN1c/M6Configuration.c b/e2sim/previous/ASN1c/M6Configuration.c similarity index 100% rename from e2sim/ASN1c/M6Configuration.c rename to e2sim/previous/ASN1c/M6Configuration.c diff --git a/e2sim/ASN1c/M6Configuration.h b/e2sim/previous/ASN1c/M6Configuration.h similarity index 100% rename from e2sim/ASN1c/M6Configuration.h rename to e2sim/previous/ASN1c/M6Configuration.h diff --git a/e2sim/ASN1c/M6delay-threshold.c b/e2sim/previous/ASN1c/M6delay-threshold.c similarity index 100% rename from e2sim/ASN1c/M6delay-threshold.c rename to e2sim/previous/ASN1c/M6delay-threshold.c diff --git a/e2sim/ASN1c/M6delay-threshold.h b/e2sim/previous/ASN1c/M6delay-threshold.h similarity index 100% rename from e2sim/ASN1c/M6delay-threshold.h rename to e2sim/previous/ASN1c/M6delay-threshold.h diff --git a/e2sim/ASN1c/M6report-interval.c b/e2sim/previous/ASN1c/M6report-interval.c similarity index 100% rename from e2sim/ASN1c/M6report-interval.c rename to e2sim/previous/ASN1c/M6report-interval.c diff --git a/e2sim/ASN1c/M6report-interval.h b/e2sim/previous/ASN1c/M6report-interval.h similarity index 100% rename from e2sim/ASN1c/M6report-interval.h rename to e2sim/previous/ASN1c/M6report-interval.h diff --git a/e2sim/ASN1c/M7Configuration.c b/e2sim/previous/ASN1c/M7Configuration.c similarity index 100% rename from e2sim/ASN1c/M7Configuration.c rename to e2sim/previous/ASN1c/M7Configuration.c diff --git a/e2sim/ASN1c/M7Configuration.h b/e2sim/previous/ASN1c/M7Configuration.h similarity index 100% rename from e2sim/ASN1c/M7Configuration.h rename to e2sim/previous/ASN1c/M7Configuration.h diff --git a/e2sim/ASN1c/M7period.c b/e2sim/previous/ASN1c/M7period.c similarity index 100% rename from e2sim/ASN1c/M7period.c rename to e2sim/previous/ASN1c/M7period.c diff --git a/e2sim/ASN1c/M7period.h b/e2sim/previous/ASN1c/M7period.h similarity index 100% rename from e2sim/ASN1c/M7period.h rename to e2sim/previous/ASN1c/M7period.h diff --git a/e2sim/ASN1c/MBMS-Service-Area-Identity-List.c b/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.c similarity index 100% rename from e2sim/ASN1c/MBMS-Service-Area-Identity-List.c rename to e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.c diff --git a/e2sim/ASN1c/MBMS-Service-Area-Identity-List.h b/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.h similarity index 100% rename from e2sim/ASN1c/MBMS-Service-Area-Identity-List.h rename to e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.h diff --git a/e2sim/ASN1c/MBMS-Service-Area-Identity.c b/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.c similarity index 100% rename from e2sim/ASN1c/MBMS-Service-Area-Identity.c rename to e2sim/previous/ASN1c/MBMS-Service-Area-Identity.c diff --git a/e2sim/ASN1c/MBMS-Service-Area-Identity.h b/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.h similarity index 100% rename from e2sim/ASN1c/MBMS-Service-Area-Identity.h rename to e2sim/previous/ASN1c/MBMS-Service-Area-Identity.h diff --git a/e2sim/ASN1c/MBSFN-Subframe-Info.c b/e2sim/previous/ASN1c/MBSFN-Subframe-Info.c similarity index 100% rename from e2sim/ASN1c/MBSFN-Subframe-Info.c rename to e2sim/previous/ASN1c/MBSFN-Subframe-Info.c diff --git a/e2sim/ASN1c/MBSFN-Subframe-Info.h b/e2sim/previous/ASN1c/MBSFN-Subframe-Info.h similarity index 100% rename from e2sim/ASN1c/MBSFN-Subframe-Info.h rename to e2sim/previous/ASN1c/MBSFN-Subframe-Info.h diff --git a/e2sim/ASN1c/MBSFN-Subframe-Infolist.c b/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c similarity index 100% rename from e2sim/ASN1c/MBSFN-Subframe-Infolist.c rename to e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c diff --git a/e2sim/ASN1c/MBSFN-Subframe-Infolist.h b/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h similarity index 100% rename from e2sim/ASN1c/MBSFN-Subframe-Infolist.h rename to e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h diff --git a/e2sim/ASN1c/MDT-Activation.c b/e2sim/previous/ASN1c/MDT-Activation.c similarity index 100% rename from e2sim/ASN1c/MDT-Activation.c rename to e2sim/previous/ASN1c/MDT-Activation.c diff --git a/e2sim/ASN1c/MDT-Activation.h b/e2sim/previous/ASN1c/MDT-Activation.h similarity index 100% rename from e2sim/ASN1c/MDT-Activation.h rename to e2sim/previous/ASN1c/MDT-Activation.h diff --git a/e2sim/ASN1c/MDT-Configuration.c b/e2sim/previous/ASN1c/MDT-Configuration.c similarity index 100% rename from e2sim/ASN1c/MDT-Configuration.c rename to e2sim/previous/ASN1c/MDT-Configuration.c diff --git a/e2sim/ASN1c/MDT-Configuration.h b/e2sim/previous/ASN1c/MDT-Configuration.h similarity index 100% rename from e2sim/ASN1c/MDT-Configuration.h rename to e2sim/previous/ASN1c/MDT-Configuration.h diff --git a/e2sim/ASN1c/MDT-Location-Info.c b/e2sim/previous/ASN1c/MDT-Location-Info.c similarity index 100% rename from e2sim/ASN1c/MDT-Location-Info.c rename to e2sim/previous/ASN1c/MDT-Location-Info.c diff --git a/e2sim/ASN1c/MDT-Location-Info.h b/e2sim/previous/ASN1c/MDT-Location-Info.h similarity index 100% rename from e2sim/ASN1c/MDT-Location-Info.h rename to e2sim/previous/ASN1c/MDT-Location-Info.h diff --git a/e2sim/ASN1c/MDTPLMNList.c b/e2sim/previous/ASN1c/MDTPLMNList.c similarity index 100% rename from e2sim/ASN1c/MDTPLMNList.c rename to e2sim/previous/ASN1c/MDTPLMNList.c diff --git a/e2sim/ASN1c/MDTPLMNList.h b/e2sim/previous/ASN1c/MDTPLMNList.h similarity index 100% rename from e2sim/ASN1c/MDTPLMNList.h rename to e2sim/previous/ASN1c/MDTPLMNList.h diff --git a/e2sim/ASN1c/MME-Code.c b/e2sim/previous/ASN1c/MME-Code.c similarity index 100% rename from e2sim/ASN1c/MME-Code.c rename to e2sim/previous/ASN1c/MME-Code.c diff --git a/e2sim/ASN1c/MME-Code.h b/e2sim/previous/ASN1c/MME-Code.h similarity index 100% rename from e2sim/ASN1c/MME-Code.h rename to e2sim/previous/ASN1c/MME-Code.h diff --git a/e2sim/ASN1c/MME-Group-ID.c b/e2sim/previous/ASN1c/MME-Group-ID.c similarity index 100% rename from e2sim/ASN1c/MME-Group-ID.c rename to e2sim/previous/ASN1c/MME-Group-ID.c diff --git a/e2sim/ASN1c/MME-Group-ID.h b/e2sim/previous/ASN1c/MME-Group-ID.h similarity index 100% rename from e2sim/ASN1c/MME-Group-ID.h rename to e2sim/previous/ASN1c/MME-Group-ID.h diff --git a/e2sim/ASN1c/MakeBeforeBreakIndicator.c b/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.c similarity index 100% rename from e2sim/ASN1c/MakeBeforeBreakIndicator.c rename to e2sim/previous/ASN1c/MakeBeforeBreakIndicator.c diff --git a/e2sim/ASN1c/MakeBeforeBreakIndicator.h b/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.h similarity index 100% rename from e2sim/ASN1c/MakeBeforeBreakIndicator.h rename to e2sim/previous/ASN1c/MakeBeforeBreakIndicator.h diff --git a/e2sim/ASN1c/Makefile.am.asn1convert b/e2sim/previous/ASN1c/Makefile.am.asn1convert similarity index 100% rename from e2sim/ASN1c/Makefile.am.asn1convert rename to e2sim/previous/ASN1c/Makefile.am.asn1convert diff --git a/e2sim/ASN1c/Makefile.am.libasncodec b/e2sim/previous/ASN1c/Makefile.am.libasncodec similarity index 100% rename from e2sim/ASN1c/Makefile.am.libasncodec rename to e2sim/previous/ASN1c/Makefile.am.libasncodec diff --git a/e2sim/ASN1c/ManagementBasedMDTallowed.c b/e2sim/previous/ASN1c/ManagementBasedMDTallowed.c similarity index 100% rename from e2sim/ASN1c/ManagementBasedMDTallowed.c rename to e2sim/previous/ASN1c/ManagementBasedMDTallowed.c diff --git a/e2sim/ASN1c/ManagementBasedMDTallowed.h b/e2sim/previous/ASN1c/ManagementBasedMDTallowed.h similarity index 100% rename from e2sim/ASN1c/ManagementBasedMDTallowed.h rename to e2sim/previous/ASN1c/ManagementBasedMDTallowed.h diff --git a/e2sim/ASN1c/Masked-IMEISV.c b/e2sim/previous/ASN1c/Masked-IMEISV.c similarity index 100% rename from e2sim/ASN1c/Masked-IMEISV.c rename to e2sim/previous/ASN1c/Masked-IMEISV.c diff --git a/e2sim/ASN1c/Masked-IMEISV.h b/e2sim/previous/ASN1c/Masked-IMEISV.h similarity index 100% rename from e2sim/ASN1c/Masked-IMEISV.h rename to e2sim/previous/ASN1c/Masked-IMEISV.h diff --git a/e2sim/ASN1c/MeNBCoordinationAssistanceInformation.c b/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.c similarity index 100% rename from e2sim/ASN1c/MeNBCoordinationAssistanceInformation.c rename to e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.c diff --git a/e2sim/ASN1c/MeNBCoordinationAssistanceInformation.h b/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.h similarity index 100% rename from e2sim/ASN1c/MeNBCoordinationAssistanceInformation.h rename to e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.h diff --git a/e2sim/ASN1c/MeNBResourceCoordinationInformation.c b/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.c similarity index 100% rename from e2sim/ASN1c/MeNBResourceCoordinationInformation.c rename to e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.c diff --git a/e2sim/ASN1c/MeNBResourceCoordinationInformation.h b/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.h similarity index 100% rename from e2sim/ASN1c/MeNBResourceCoordinationInformation.h rename to e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.h diff --git a/e2sim/ASN1c/MeNBtoSeNBContainer.c b/e2sim/previous/ASN1c/MeNBtoSeNBContainer.c similarity index 100% rename from e2sim/ASN1c/MeNBtoSeNBContainer.c rename to e2sim/previous/ASN1c/MeNBtoSeNBContainer.c diff --git a/e2sim/ASN1c/MeNBtoSeNBContainer.h b/e2sim/previous/ASN1c/MeNBtoSeNBContainer.h similarity index 100% rename from e2sim/ASN1c/MeNBtoSeNBContainer.h rename to e2sim/previous/ASN1c/MeNBtoSeNBContainer.h diff --git a/e2sim/ASN1c/MeNBtoSgNBContainer.c b/e2sim/previous/ASN1c/MeNBtoSgNBContainer.c similarity index 100% rename from e2sim/ASN1c/MeNBtoSgNBContainer.c rename to e2sim/previous/ASN1c/MeNBtoSgNBContainer.c diff --git a/e2sim/ASN1c/MeNBtoSgNBContainer.h b/e2sim/previous/ASN1c/MeNBtoSgNBContainer.h similarity index 100% rename from e2sim/ASN1c/MeNBtoSgNBContainer.h rename to e2sim/previous/ASN1c/MeNBtoSgNBContainer.h diff --git a/e2sim/ASN1c/Measurement-ID.c b/e2sim/previous/ASN1c/Measurement-ID.c similarity index 100% rename from e2sim/ASN1c/Measurement-ID.c rename to e2sim/previous/ASN1c/Measurement-ID.c diff --git a/e2sim/ASN1c/Measurement-ID.h b/e2sim/previous/ASN1c/Measurement-ID.h similarity index 100% rename from e2sim/ASN1c/Measurement-ID.h rename to e2sim/previous/ASN1c/Measurement-ID.h diff --git a/e2sim/ASN1c/MeasurementFailureCause-Item.c b/e2sim/previous/ASN1c/MeasurementFailureCause-Item.c similarity index 100% rename from e2sim/ASN1c/MeasurementFailureCause-Item.c rename to e2sim/previous/ASN1c/MeasurementFailureCause-Item.c diff --git a/e2sim/ASN1c/MeasurementFailureCause-Item.h b/e2sim/previous/ASN1c/MeasurementFailureCause-Item.h similarity index 100% rename from e2sim/ASN1c/MeasurementFailureCause-Item.h rename to e2sim/previous/ASN1c/MeasurementFailureCause-Item.h diff --git a/e2sim/ASN1c/MeasurementFailureCause-List.c b/e2sim/previous/ASN1c/MeasurementFailureCause-List.c similarity index 100% rename from e2sim/ASN1c/MeasurementFailureCause-List.c rename to e2sim/previous/ASN1c/MeasurementFailureCause-List.c diff --git a/e2sim/ASN1c/MeasurementFailureCause-List.h b/e2sim/previous/ASN1c/MeasurementFailureCause-List.h similarity index 100% rename from e2sim/ASN1c/MeasurementFailureCause-List.h rename to e2sim/previous/ASN1c/MeasurementFailureCause-List.h diff --git a/e2sim/ASN1c/MeasurementInitiationResult-Item.c b/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.c similarity index 100% rename from e2sim/ASN1c/MeasurementInitiationResult-Item.c rename to e2sim/previous/ASN1c/MeasurementInitiationResult-Item.c diff --git a/e2sim/ASN1c/MeasurementInitiationResult-Item.h b/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.h similarity index 100% rename from e2sim/ASN1c/MeasurementInitiationResult-Item.h rename to e2sim/previous/ASN1c/MeasurementInitiationResult-Item.h diff --git a/e2sim/ASN1c/MeasurementInitiationResult-List.c b/e2sim/previous/ASN1c/MeasurementInitiationResult-List.c similarity index 100% rename from e2sim/ASN1c/MeasurementInitiationResult-List.c rename to e2sim/previous/ASN1c/MeasurementInitiationResult-List.c diff --git a/e2sim/ASN1c/MeasurementInitiationResult-List.h b/e2sim/previous/ASN1c/MeasurementInitiationResult-List.h similarity index 100% rename from e2sim/ASN1c/MeasurementInitiationResult-List.h rename to e2sim/previous/ASN1c/MeasurementInitiationResult-List.h diff --git a/e2sim/ASN1c/MeasurementThresholdA2.c b/e2sim/previous/ASN1c/MeasurementThresholdA2.c similarity index 100% rename from e2sim/ASN1c/MeasurementThresholdA2.c rename to e2sim/previous/ASN1c/MeasurementThresholdA2.c diff --git a/e2sim/ASN1c/MeasurementThresholdA2.h b/e2sim/previous/ASN1c/MeasurementThresholdA2.h similarity index 100% rename from e2sim/ASN1c/MeasurementThresholdA2.h rename to e2sim/previous/ASN1c/MeasurementThresholdA2.h diff --git a/e2sim/ASN1c/MeasurementsToActivate.c b/e2sim/previous/ASN1c/MeasurementsToActivate.c similarity index 100% rename from e2sim/ASN1c/MeasurementsToActivate.c rename to e2sim/previous/ASN1c/MeasurementsToActivate.c diff --git a/e2sim/ASN1c/MeasurementsToActivate.h b/e2sim/previous/ASN1c/MeasurementsToActivate.h similarity index 100% rename from e2sim/ASN1c/MeasurementsToActivate.h rename to e2sim/previous/ASN1c/MeasurementsToActivate.h diff --git a/e2sim/ASN1c/MobilityChangeAcknowledge.c b/e2sim/previous/ASN1c/MobilityChangeAcknowledge.c similarity index 100% rename from e2sim/ASN1c/MobilityChangeAcknowledge.c rename to e2sim/previous/ASN1c/MobilityChangeAcknowledge.c diff --git a/e2sim/ASN1c/MobilityChangeAcknowledge.h b/e2sim/previous/ASN1c/MobilityChangeAcknowledge.h similarity index 100% rename from e2sim/ASN1c/MobilityChangeAcknowledge.h rename to e2sim/previous/ASN1c/MobilityChangeAcknowledge.h diff --git a/e2sim/ASN1c/MobilityChangeFailure.c b/e2sim/previous/ASN1c/MobilityChangeFailure.c similarity index 100% rename from e2sim/ASN1c/MobilityChangeFailure.c rename to e2sim/previous/ASN1c/MobilityChangeFailure.c diff --git a/e2sim/ASN1c/MobilityChangeFailure.h b/e2sim/previous/ASN1c/MobilityChangeFailure.h similarity index 100% rename from e2sim/ASN1c/MobilityChangeFailure.h rename to e2sim/previous/ASN1c/MobilityChangeFailure.h diff --git a/e2sim/ASN1c/MobilityChangeRequest.c b/e2sim/previous/ASN1c/MobilityChangeRequest.c similarity index 100% rename from e2sim/ASN1c/MobilityChangeRequest.c rename to e2sim/previous/ASN1c/MobilityChangeRequest.c diff --git a/e2sim/ASN1c/MobilityChangeRequest.h b/e2sim/previous/ASN1c/MobilityChangeRequest.h similarity index 100% rename from e2sim/ASN1c/MobilityChangeRequest.h rename to e2sim/previous/ASN1c/MobilityChangeRequest.h diff --git a/e2sim/ASN1c/MobilityInformation.c b/e2sim/previous/ASN1c/MobilityInformation.c similarity index 100% rename from e2sim/ASN1c/MobilityInformation.c rename to e2sim/previous/ASN1c/MobilityInformation.c diff --git a/e2sim/ASN1c/MobilityInformation.h b/e2sim/previous/ASN1c/MobilityInformation.h similarity index 100% rename from e2sim/ASN1c/MobilityInformation.h rename to e2sim/previous/ASN1c/MobilityInformation.h diff --git a/e2sim/ASN1c/MobilityParametersInformation.c b/e2sim/previous/ASN1c/MobilityParametersInformation.c similarity index 100% rename from e2sim/ASN1c/MobilityParametersInformation.c rename to e2sim/previous/ASN1c/MobilityParametersInformation.c diff --git a/e2sim/ASN1c/MobilityParametersInformation.h b/e2sim/previous/ASN1c/MobilityParametersInformation.h similarity index 100% rename from e2sim/ASN1c/MobilityParametersInformation.h rename to e2sim/previous/ASN1c/MobilityParametersInformation.h diff --git a/e2sim/ASN1c/MobilityParametersModificationRange.c b/e2sim/previous/ASN1c/MobilityParametersModificationRange.c similarity index 100% rename from e2sim/ASN1c/MobilityParametersModificationRange.c rename to e2sim/previous/ASN1c/MobilityParametersModificationRange.c diff --git a/e2sim/ASN1c/MobilityParametersModificationRange.h b/e2sim/previous/ASN1c/MobilityParametersModificationRange.h similarity index 100% rename from e2sim/ASN1c/MobilityParametersModificationRange.h rename to e2sim/previous/ASN1c/MobilityParametersModificationRange.h diff --git a/e2sim/ASN1c/MultibandInfoList.c b/e2sim/previous/ASN1c/MultibandInfoList.c similarity index 100% rename from e2sim/ASN1c/MultibandInfoList.c rename to e2sim/previous/ASN1c/MultibandInfoList.c diff --git a/e2sim/ASN1c/MultibandInfoList.h b/e2sim/previous/ASN1c/MultibandInfoList.h similarity index 100% rename from e2sim/ASN1c/MultibandInfoList.h rename to e2sim/previous/ASN1c/MultibandInfoList.h diff --git a/e2sim/ASN1c/NR-TxBW.c b/e2sim/previous/ASN1c/NR-TxBW.c similarity index 100% rename from e2sim/ASN1c/NR-TxBW.c rename to e2sim/previous/ASN1c/NR-TxBW.c diff --git a/e2sim/ASN1c/NR-TxBW.h b/e2sim/previous/ASN1c/NR-TxBW.h similarity index 100% rename from e2sim/ASN1c/NR-TxBW.h rename to e2sim/previous/ASN1c/NR-TxBW.h diff --git a/e2sim/ASN1c/NRCGI.c b/e2sim/previous/ASN1c/NRCGI.c similarity index 100% rename from e2sim/ASN1c/NRCGI.c rename to e2sim/previous/ASN1c/NRCGI.c diff --git a/e2sim/ASN1c/NRCGI.h b/e2sim/previous/ASN1c/NRCGI.h similarity index 100% rename from e2sim/ASN1c/NRCGI.h rename to e2sim/previous/ASN1c/NRCGI.h diff --git a/e2sim/ASN1c/NRCellIdentifier.c b/e2sim/previous/ASN1c/NRCellIdentifier.c similarity index 100% rename from e2sim/ASN1c/NRCellIdentifier.c rename to e2sim/previous/ASN1c/NRCellIdentifier.c diff --git a/e2sim/ASN1c/NRCellIdentifier.h b/e2sim/previous/ASN1c/NRCellIdentifier.h similarity index 100% rename from e2sim/ASN1c/NRCellIdentifier.h rename to e2sim/previous/ASN1c/NRCellIdentifier.h diff --git a/e2sim/ASN1c/NRFreqInfo.c b/e2sim/previous/ASN1c/NRFreqInfo.c similarity index 100% rename from e2sim/ASN1c/NRFreqInfo.c rename to e2sim/previous/ASN1c/NRFreqInfo.c diff --git a/e2sim/ASN1c/NRFreqInfo.h b/e2sim/previous/ASN1c/NRFreqInfo.h similarity index 100% rename from e2sim/ASN1c/NRFreqInfo.h rename to e2sim/previous/ASN1c/NRFreqInfo.h diff --git a/e2sim/ASN1c/NRNRB.c b/e2sim/previous/ASN1c/NRNRB.c similarity index 100% rename from e2sim/ASN1c/NRNRB.c rename to e2sim/previous/ASN1c/NRNRB.c diff --git a/e2sim/ASN1c/NRNRB.h b/e2sim/previous/ASN1c/NRNRB.h similarity index 100% rename from e2sim/ASN1c/NRNRB.h rename to e2sim/previous/ASN1c/NRNRB.h diff --git a/e2sim/ASN1c/NRNeighbour-Information.c b/e2sim/previous/ASN1c/NRNeighbour-Information.c similarity index 100% rename from e2sim/ASN1c/NRNeighbour-Information.c rename to e2sim/previous/ASN1c/NRNeighbour-Information.c diff --git a/e2sim/ASN1c/NRNeighbour-Information.h b/e2sim/previous/ASN1c/NRNeighbour-Information.h similarity index 100% rename from e2sim/ASN1c/NRNeighbour-Information.h rename to e2sim/previous/ASN1c/NRNeighbour-Information.h diff --git a/e2sim/ASN1c/NRPCI.c b/e2sim/previous/ASN1c/NRPCI.c similarity index 100% rename from e2sim/ASN1c/NRPCI.c rename to e2sim/previous/ASN1c/NRPCI.c diff --git a/e2sim/ASN1c/NRPCI.h b/e2sim/previous/ASN1c/NRPCI.h similarity index 100% rename from e2sim/ASN1c/NRPCI.h rename to e2sim/previous/ASN1c/NRPCI.h diff --git a/e2sim/ASN1c/NRS-NSSS-PowerOffset.c b/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c similarity index 100% rename from e2sim/ASN1c/NRS-NSSS-PowerOffset.c rename to e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c diff --git a/e2sim/ASN1c/NRS-NSSS-PowerOffset.h b/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h similarity index 100% rename from e2sim/ASN1c/NRS-NSSS-PowerOffset.h rename to e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h diff --git a/e2sim/ASN1c/NRSCS.c b/e2sim/previous/ASN1c/NRSCS.c similarity index 100% rename from e2sim/ASN1c/NRSCS.c rename to e2sim/previous/ASN1c/NRSCS.c diff --git a/e2sim/ASN1c/NRSCS.h b/e2sim/previous/ASN1c/NRSCS.h similarity index 100% rename from e2sim/ASN1c/NRSCS.h rename to e2sim/previous/ASN1c/NRSCS.h diff --git a/e2sim/ASN1c/NRUESecurityCapabilities.c b/e2sim/previous/ASN1c/NRUESecurityCapabilities.c similarity index 100% rename from e2sim/ASN1c/NRUESecurityCapabilities.c rename to e2sim/previous/ASN1c/NRUESecurityCapabilities.c diff --git a/e2sim/ASN1c/NRUESecurityCapabilities.h b/e2sim/previous/ASN1c/NRUESecurityCapabilities.h similarity index 100% rename from e2sim/ASN1c/NRUESecurityCapabilities.h rename to e2sim/previous/ASN1c/NRUESecurityCapabilities.h diff --git a/e2sim/ASN1c/NRencryptionAlgorithms.c b/e2sim/previous/ASN1c/NRencryptionAlgorithms.c similarity index 100% rename from e2sim/ASN1c/NRencryptionAlgorithms.c rename to e2sim/previous/ASN1c/NRencryptionAlgorithms.c diff --git a/e2sim/ASN1c/NRencryptionAlgorithms.h b/e2sim/previous/ASN1c/NRencryptionAlgorithms.h similarity index 100% rename from e2sim/ASN1c/NRencryptionAlgorithms.h rename to e2sim/previous/ASN1c/NRencryptionAlgorithms.h diff --git a/e2sim/ASN1c/NRintegrityProtectionAlgorithms.c b/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.c similarity index 100% rename from e2sim/ASN1c/NRintegrityProtectionAlgorithms.c rename to e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.c diff --git a/e2sim/ASN1c/NRintegrityProtectionAlgorithms.h b/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.h similarity index 100% rename from e2sim/ASN1c/NRintegrityProtectionAlgorithms.h rename to e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.h diff --git a/e2sim/ASN1c/NRrestrictionin5GS.c b/e2sim/previous/ASN1c/NRrestrictionin5GS.c similarity index 100% rename from e2sim/ASN1c/NRrestrictionin5GS.c rename to e2sim/previous/ASN1c/NRrestrictionin5GS.c diff --git a/e2sim/ASN1c/NRrestrictionin5GS.h b/e2sim/previous/ASN1c/NRrestrictionin5GS.h similarity index 100% rename from e2sim/ASN1c/NRrestrictionin5GS.h rename to e2sim/previous/ASN1c/NRrestrictionin5GS.h diff --git a/e2sim/ASN1c/NRrestrictioninEPSasSecondaryRAT.c b/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.c similarity index 100% rename from e2sim/ASN1c/NRrestrictioninEPSasSecondaryRAT.c rename to e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.c diff --git a/e2sim/ASN1c/NRrestrictioninEPSasSecondaryRAT.h b/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.h similarity index 100% rename from e2sim/ASN1c/NRrestrictioninEPSasSecondaryRAT.h rename to e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.h diff --git a/e2sim/ASN1c/NSSS-NumOccasionDifferentPrecoder.c b/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.c similarity index 100% rename from e2sim/ASN1c/NSSS-NumOccasionDifferentPrecoder.c rename to e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.c diff --git a/e2sim/ASN1c/NSSS-NumOccasionDifferentPrecoder.h b/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.h similarity index 100% rename from e2sim/ASN1c/NSSS-NumOccasionDifferentPrecoder.h rename to e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.h diff --git a/e2sim/ASN1c/NULL.c b/e2sim/previous/ASN1c/NULL.c similarity index 100% rename from e2sim/ASN1c/NULL.c rename to e2sim/previous/ASN1c/NULL.c diff --git a/e2sim/ASN1c/NULL.h b/e2sim/previous/ASN1c/NULL.h similarity index 100% rename from e2sim/ASN1c/NULL.h rename to e2sim/previous/ASN1c/NULL.h diff --git a/e2sim/ASN1c/NativeEnumerated.c b/e2sim/previous/ASN1c/NativeEnumerated.c similarity index 100% rename from e2sim/ASN1c/NativeEnumerated.c rename to e2sim/previous/ASN1c/NativeEnumerated.c diff --git a/e2sim/ASN1c/NativeEnumerated.h b/e2sim/previous/ASN1c/NativeEnumerated.h similarity index 100% rename from e2sim/ASN1c/NativeEnumerated.h rename to e2sim/previous/ASN1c/NativeEnumerated.h diff --git a/e2sim/ASN1c/NativeInteger.c b/e2sim/previous/ASN1c/NativeInteger.c similarity index 100% rename from e2sim/ASN1c/NativeInteger.c rename to e2sim/previous/ASN1c/NativeInteger.c diff --git a/e2sim/ASN1c/NativeInteger.h b/e2sim/previous/ASN1c/NativeInteger.h similarity index 100% rename from e2sim/ASN1c/NativeInteger.h rename to e2sim/previous/ASN1c/NativeInteger.h diff --git a/e2sim/ASN1c/Neighbour-Information.c b/e2sim/previous/ASN1c/Neighbour-Information.c similarity index 100% rename from e2sim/ASN1c/Neighbour-Information.c rename to e2sim/previous/ASN1c/Neighbour-Information.c diff --git a/e2sim/ASN1c/Neighbour-Information.h b/e2sim/previous/ASN1c/Neighbour-Information.h similarity index 100% rename from e2sim/ASN1c/Neighbour-Information.h rename to e2sim/previous/ASN1c/Neighbour-Information.h diff --git a/e2sim/ASN1c/NewDRBIDrequest.c b/e2sim/previous/ASN1c/NewDRBIDrequest.c similarity index 100% rename from e2sim/ASN1c/NewDRBIDrequest.c rename to e2sim/previous/ASN1c/NewDRBIDrequest.c diff --git a/e2sim/ASN1c/NewDRBIDrequest.h b/e2sim/previous/ASN1c/NewDRBIDrequest.h similarity index 100% rename from e2sim/ASN1c/NewDRBIDrequest.h rename to e2sim/previous/ASN1c/NewDRBIDrequest.h diff --git a/e2sim/ASN1c/NextHopChainingCount.c b/e2sim/previous/ASN1c/NextHopChainingCount.c similarity index 100% rename from e2sim/ASN1c/NextHopChainingCount.c rename to e2sim/previous/ASN1c/NextHopChainingCount.c diff --git a/e2sim/ASN1c/NextHopChainingCount.h b/e2sim/previous/ASN1c/NextHopChainingCount.h similarity index 100% rename from e2sim/ASN1c/NextHopChainingCount.h rename to e2sim/previous/ASN1c/NextHopChainingCount.h diff --git a/e2sim/ASN1c/Number-of-Antennaports.c b/e2sim/previous/ASN1c/Number-of-Antennaports.c similarity index 100% rename from e2sim/ASN1c/Number-of-Antennaports.c rename to e2sim/previous/ASN1c/Number-of-Antennaports.c diff --git a/e2sim/ASN1c/Number-of-Antennaports.h b/e2sim/previous/ASN1c/Number-of-Antennaports.h similarity index 100% rename from e2sim/ASN1c/Number-of-Antennaports.h rename to e2sim/previous/ASN1c/Number-of-Antennaports.h diff --git a/e2sim/ASN1c/OBJECT_IDENTIFIER.c b/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c similarity index 100% rename from e2sim/ASN1c/OBJECT_IDENTIFIER.c rename to e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c diff --git a/e2sim/ASN1c/OBJECT_IDENTIFIER.h b/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h similarity index 100% rename from e2sim/ASN1c/OBJECT_IDENTIFIER.h rename to e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h diff --git a/e2sim/ASN1c/OCTET_STRING.c b/e2sim/previous/ASN1c/OCTET_STRING.c similarity index 100% rename from e2sim/ASN1c/OCTET_STRING.c rename to e2sim/previous/ASN1c/OCTET_STRING.c diff --git a/e2sim/ASN1c/OCTET_STRING.h b/e2sim/previous/ASN1c/OCTET_STRING.h similarity index 100% rename from e2sim/ASN1c/OCTET_STRING.h rename to e2sim/previous/ASN1c/OCTET_STRING.h diff --git a/e2sim/ASN1c/OPEN_TYPE.c b/e2sim/previous/ASN1c/OPEN_TYPE.c similarity index 100% rename from e2sim/ASN1c/OPEN_TYPE.c rename to e2sim/previous/ASN1c/OPEN_TYPE.c diff --git a/e2sim/ASN1c/OPEN_TYPE.h b/e2sim/previous/ASN1c/OPEN_TYPE.h similarity index 100% rename from e2sim/ASN1c/OPEN_TYPE.h rename to e2sim/previous/ASN1c/OPEN_TYPE.h diff --git a/e2sim/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c b/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c similarity index 100% rename from e2sim/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c rename to e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c diff --git a/e2sim/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h b/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h similarity index 100% rename from e2sim/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h rename to e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h diff --git a/e2sim/ASN1c/Old-ECGIs.c b/e2sim/previous/ASN1c/Old-ECGIs.c similarity index 100% rename from e2sim/ASN1c/Old-ECGIs.c rename to e2sim/previous/ASN1c/Old-ECGIs.c diff --git a/e2sim/ASN1c/Old-ECGIs.h b/e2sim/previous/ASN1c/Old-ECGIs.h similarity index 100% rename from e2sim/ASN1c/Old-ECGIs.h rename to e2sim/previous/ASN1c/Old-ECGIs.h diff --git a/e2sim/ASN1c/Oneframe.c b/e2sim/previous/ASN1c/Oneframe.c similarity index 100% rename from e2sim/ASN1c/Oneframe.c rename to e2sim/previous/ASN1c/Oneframe.c diff --git a/e2sim/ASN1c/Oneframe.h b/e2sim/previous/ASN1c/Oneframe.h similarity index 100% rename from e2sim/ASN1c/Oneframe.h rename to e2sim/previous/ASN1c/Oneframe.h diff --git a/e2sim/ASN1c/PA-Values.c b/e2sim/previous/ASN1c/PA-Values.c similarity index 100% rename from e2sim/ASN1c/PA-Values.c rename to e2sim/previous/ASN1c/PA-Values.c diff --git a/e2sim/ASN1c/PA-Values.h b/e2sim/previous/ASN1c/PA-Values.h similarity index 100% rename from e2sim/ASN1c/PA-Values.h rename to e2sim/previous/ASN1c/PA-Values.h diff --git a/e2sim/ASN1c/PCI.c b/e2sim/previous/ASN1c/PCI.c similarity index 100% rename from e2sim/ASN1c/PCI.c rename to e2sim/previous/ASN1c/PCI.c diff --git a/e2sim/ASN1c/PCI.h b/e2sim/previous/ASN1c/PCI.h similarity index 100% rename from e2sim/ASN1c/PCI.h rename to e2sim/previous/ASN1c/PCI.h diff --git a/e2sim/ASN1c/PDCP-SN.c b/e2sim/previous/ASN1c/PDCP-SN.c similarity index 100% rename from e2sim/ASN1c/PDCP-SN.c rename to e2sim/previous/ASN1c/PDCP-SN.c diff --git a/e2sim/ASN1c/PDCP-SN.h b/e2sim/previous/ASN1c/PDCP-SN.h similarity index 100% rename from e2sim/ASN1c/PDCP-SN.h rename to e2sim/previous/ASN1c/PDCP-SN.h diff --git a/e2sim/ASN1c/PDCP-SNExtended.c b/e2sim/previous/ASN1c/PDCP-SNExtended.c similarity index 100% rename from e2sim/ASN1c/PDCP-SNExtended.c rename to e2sim/previous/ASN1c/PDCP-SNExtended.c diff --git a/e2sim/ASN1c/PDCP-SNExtended.h b/e2sim/previous/ASN1c/PDCP-SNExtended.h similarity index 100% rename from e2sim/ASN1c/PDCP-SNExtended.h rename to e2sim/previous/ASN1c/PDCP-SNExtended.h diff --git a/e2sim/ASN1c/PDCP-SNlength18.c b/e2sim/previous/ASN1c/PDCP-SNlength18.c similarity index 100% rename from e2sim/ASN1c/PDCP-SNlength18.c rename to e2sim/previous/ASN1c/PDCP-SNlength18.c diff --git a/e2sim/ASN1c/PDCP-SNlength18.h b/e2sim/previous/ASN1c/PDCP-SNlength18.h similarity index 100% rename from e2sim/ASN1c/PDCP-SNlength18.h rename to e2sim/previous/ASN1c/PDCP-SNlength18.h diff --git a/e2sim/ASN1c/PDCPChangeIndication.c b/e2sim/previous/ASN1c/PDCPChangeIndication.c similarity index 100% rename from e2sim/ASN1c/PDCPChangeIndication.c rename to e2sim/previous/ASN1c/PDCPChangeIndication.c diff --git a/e2sim/ASN1c/PDCPChangeIndication.h b/e2sim/previous/ASN1c/PDCPChangeIndication.h similarity index 100% rename from e2sim/ASN1c/PDCPChangeIndication.h rename to e2sim/previous/ASN1c/PDCPChangeIndication.h diff --git a/e2sim/ASN1c/PDCPSnLength.c b/e2sim/previous/ASN1c/PDCPSnLength.c similarity index 100% rename from e2sim/ASN1c/PDCPSnLength.c rename to e2sim/previous/ASN1c/PDCPSnLength.c diff --git a/e2sim/ASN1c/PDCPSnLength.h b/e2sim/previous/ASN1c/PDCPSnLength.h similarity index 100% rename from e2sim/ASN1c/PDCPSnLength.h rename to e2sim/previous/ASN1c/PDCPSnLength.h diff --git a/e2sim/ASN1c/PLMN-Identity.c b/e2sim/previous/ASN1c/PLMN-Identity.c similarity index 100% rename from e2sim/ASN1c/PLMN-Identity.c rename to e2sim/previous/ASN1c/PLMN-Identity.c diff --git a/e2sim/ASN1c/PLMN-Identity.h b/e2sim/previous/ASN1c/PLMN-Identity.h similarity index 100% rename from e2sim/ASN1c/PLMN-Identity.h rename to e2sim/previous/ASN1c/PLMN-Identity.h diff --git a/e2sim/ASN1c/PLMNAreaBasedQMC.c b/e2sim/previous/ASN1c/PLMNAreaBasedQMC.c similarity index 100% rename from e2sim/ASN1c/PLMNAreaBasedQMC.c rename to e2sim/previous/ASN1c/PLMNAreaBasedQMC.c diff --git a/e2sim/ASN1c/PLMNAreaBasedQMC.h b/e2sim/previous/ASN1c/PLMNAreaBasedQMC.h similarity index 100% rename from e2sim/ASN1c/PLMNAreaBasedQMC.h rename to e2sim/previous/ASN1c/PLMNAreaBasedQMC.h diff --git a/e2sim/ASN1c/PLMNListforQMC.c b/e2sim/previous/ASN1c/PLMNListforQMC.c similarity index 100% rename from e2sim/ASN1c/PLMNListforQMC.c rename to e2sim/previous/ASN1c/PLMNListforQMC.c diff --git a/e2sim/ASN1c/PLMNListforQMC.h b/e2sim/previous/ASN1c/PLMNListforQMC.h similarity index 100% rename from e2sim/ASN1c/PLMNListforQMC.h rename to e2sim/previous/ASN1c/PLMNListforQMC.h diff --git a/e2sim/ASN1c/PRACH-Configuration.c b/e2sim/previous/ASN1c/PRACH-Configuration.c similarity index 100% rename from e2sim/ASN1c/PRACH-Configuration.c rename to e2sim/previous/ASN1c/PRACH-Configuration.c diff --git a/e2sim/ASN1c/PRACH-Configuration.h b/e2sim/previous/ASN1c/PRACH-Configuration.h similarity index 100% rename from e2sim/ASN1c/PRACH-Configuration.h rename to e2sim/previous/ASN1c/PRACH-Configuration.h diff --git a/e2sim/ASN1c/Packet-LossRate.c b/e2sim/previous/ASN1c/Packet-LossRate.c similarity index 100% rename from e2sim/ASN1c/Packet-LossRate.c rename to e2sim/previous/ASN1c/Packet-LossRate.c diff --git a/e2sim/ASN1c/Packet-LossRate.h b/e2sim/previous/ASN1c/Packet-LossRate.h similarity index 100% rename from e2sim/ASN1c/Packet-LossRate.h rename to e2sim/previous/ASN1c/Packet-LossRate.h diff --git a/e2sim/ASN1c/PartialSuccessIndicator.c b/e2sim/previous/ASN1c/PartialSuccessIndicator.c similarity index 100% rename from e2sim/ASN1c/PartialSuccessIndicator.c rename to e2sim/previous/ASN1c/PartialSuccessIndicator.c diff --git a/e2sim/ASN1c/PartialSuccessIndicator.h b/e2sim/previous/ASN1c/PartialSuccessIndicator.h similarity index 100% rename from e2sim/ASN1c/PartialSuccessIndicator.h rename to e2sim/previous/ASN1c/PartialSuccessIndicator.h diff --git a/e2sim/ASN1c/PedestrianUE.c b/e2sim/previous/ASN1c/PedestrianUE.c similarity index 100% rename from e2sim/ASN1c/PedestrianUE.c rename to e2sim/previous/ASN1c/PedestrianUE.c diff --git a/e2sim/ASN1c/PedestrianUE.h b/e2sim/previous/ASN1c/PedestrianUE.h similarity index 100% rename from e2sim/ASN1c/PedestrianUE.h rename to e2sim/previous/ASN1c/PedestrianUE.h diff --git a/e2sim/ASN1c/Port-Number.c b/e2sim/previous/ASN1c/Port-Number.c similarity index 100% rename from e2sim/ASN1c/Port-Number.c rename to e2sim/previous/ASN1c/Port-Number.c diff --git a/e2sim/ASN1c/Port-Number.h b/e2sim/previous/ASN1c/Port-Number.h similarity index 100% rename from e2sim/ASN1c/Port-Number.h rename to e2sim/previous/ASN1c/Port-Number.h diff --git a/e2sim/ASN1c/Pre-emptionCapability.c b/e2sim/previous/ASN1c/Pre-emptionCapability.c similarity index 100% rename from e2sim/ASN1c/Pre-emptionCapability.c rename to e2sim/previous/ASN1c/Pre-emptionCapability.c diff --git a/e2sim/ASN1c/Pre-emptionCapability.h b/e2sim/previous/ASN1c/Pre-emptionCapability.h similarity index 100% rename from e2sim/ASN1c/Pre-emptionCapability.h rename to e2sim/previous/ASN1c/Pre-emptionCapability.h diff --git a/e2sim/ASN1c/Pre-emptionVulnerability.c b/e2sim/previous/ASN1c/Pre-emptionVulnerability.c similarity index 100% rename from e2sim/ASN1c/Pre-emptionVulnerability.c rename to e2sim/previous/ASN1c/Pre-emptionVulnerability.c diff --git a/e2sim/ASN1c/Pre-emptionVulnerability.h b/e2sim/previous/ASN1c/Pre-emptionVulnerability.h similarity index 100% rename from e2sim/ASN1c/Pre-emptionVulnerability.h rename to e2sim/previous/ASN1c/Pre-emptionVulnerability.h diff --git a/e2sim/ASN1c/Presence.c b/e2sim/previous/ASN1c/Presence.c similarity index 100% rename from e2sim/ASN1c/Presence.c rename to e2sim/previous/ASN1c/Presence.c diff --git a/e2sim/ASN1c/Presence.h b/e2sim/previous/ASN1c/Presence.h similarity index 100% rename from e2sim/ASN1c/Presence.h rename to e2sim/previous/ASN1c/Presence.h diff --git a/e2sim/ASN1c/PrintableString.c b/e2sim/previous/ASN1c/PrintableString.c similarity index 100% rename from e2sim/ASN1c/PrintableString.c rename to e2sim/previous/ASN1c/PrintableString.c diff --git a/e2sim/ASN1c/PrintableString.h b/e2sim/previous/ASN1c/PrintableString.h similarity index 100% rename from e2sim/ASN1c/PrintableString.h rename to e2sim/previous/ASN1c/PrintableString.h diff --git a/e2sim/ASN1c/PriorityLevel.c b/e2sim/previous/ASN1c/PriorityLevel.c similarity index 100% rename from e2sim/ASN1c/PriorityLevel.c rename to e2sim/previous/ASN1c/PriorityLevel.c diff --git a/e2sim/ASN1c/PriorityLevel.h b/e2sim/previous/ASN1c/PriorityLevel.h similarity index 100% rename from e2sim/ASN1c/PriorityLevel.h rename to e2sim/previous/ASN1c/PriorityLevel.h diff --git a/e2sim/ASN1c/PrivateIE-Container.c b/e2sim/previous/ASN1c/PrivateIE-Container.c similarity index 100% rename from e2sim/ASN1c/PrivateIE-Container.c rename to e2sim/previous/ASN1c/PrivateIE-Container.c diff --git a/e2sim/ASN1c/PrivateIE-Container.h b/e2sim/previous/ASN1c/PrivateIE-Container.h similarity index 100% rename from e2sim/ASN1c/PrivateIE-Container.h rename to e2sim/previous/ASN1c/PrivateIE-Container.h diff --git a/e2sim/ASN1c/PrivateIE-Field.c b/e2sim/previous/ASN1c/PrivateIE-Field.c similarity index 100% rename from e2sim/ASN1c/PrivateIE-Field.c rename to e2sim/previous/ASN1c/PrivateIE-Field.c diff --git a/e2sim/ASN1c/PrivateIE-Field.h b/e2sim/previous/ASN1c/PrivateIE-Field.h similarity index 100% rename from e2sim/ASN1c/PrivateIE-Field.h rename to e2sim/previous/ASN1c/PrivateIE-Field.h diff --git a/e2sim/ASN1c/PrivateIE-ID.c b/e2sim/previous/ASN1c/PrivateIE-ID.c similarity index 100% rename from e2sim/ASN1c/PrivateIE-ID.c rename to e2sim/previous/ASN1c/PrivateIE-ID.c diff --git a/e2sim/ASN1c/PrivateIE-ID.h b/e2sim/previous/ASN1c/PrivateIE-ID.h similarity index 100% rename from e2sim/ASN1c/PrivateIE-ID.h rename to e2sim/previous/ASN1c/PrivateIE-ID.h diff --git a/e2sim/ASN1c/PrivateMessage.c b/e2sim/previous/ASN1c/PrivateMessage.c similarity index 100% rename from e2sim/ASN1c/PrivateMessage.c rename to e2sim/previous/ASN1c/PrivateMessage.c diff --git a/e2sim/ASN1c/PrivateMessage.h b/e2sim/previous/ASN1c/PrivateMessage.h similarity index 100% rename from e2sim/ASN1c/PrivateMessage.h rename to e2sim/previous/ASN1c/PrivateMessage.h diff --git a/e2sim/ASN1c/ProSeAuthorized.c b/e2sim/previous/ASN1c/ProSeAuthorized.c similarity index 100% rename from e2sim/ASN1c/ProSeAuthorized.c rename to e2sim/previous/ASN1c/ProSeAuthorized.c diff --git a/e2sim/ASN1c/ProSeAuthorized.h b/e2sim/previous/ASN1c/ProSeAuthorized.h similarity index 100% rename from e2sim/ASN1c/ProSeAuthorized.h rename to e2sim/previous/ASN1c/ProSeAuthorized.h diff --git a/e2sim/ASN1c/ProSeDirectCommunication.c b/e2sim/previous/ASN1c/ProSeDirectCommunication.c similarity index 100% rename from e2sim/ASN1c/ProSeDirectCommunication.c rename to e2sim/previous/ASN1c/ProSeDirectCommunication.c diff --git a/e2sim/ASN1c/ProSeDirectCommunication.h b/e2sim/previous/ASN1c/ProSeDirectCommunication.h similarity index 100% rename from e2sim/ASN1c/ProSeDirectCommunication.h rename to e2sim/previous/ASN1c/ProSeDirectCommunication.h diff --git a/e2sim/ASN1c/ProSeDirectDiscovery.c b/e2sim/previous/ASN1c/ProSeDirectDiscovery.c similarity index 100% rename from e2sim/ASN1c/ProSeDirectDiscovery.c rename to e2sim/previous/ASN1c/ProSeDirectDiscovery.c diff --git a/e2sim/ASN1c/ProSeDirectDiscovery.h b/e2sim/previous/ASN1c/ProSeDirectDiscovery.h similarity index 100% rename from e2sim/ASN1c/ProSeDirectDiscovery.h rename to e2sim/previous/ASN1c/ProSeDirectDiscovery.h diff --git a/e2sim/ASN1c/ProSeUEtoNetworkRelaying.c b/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.c similarity index 100% rename from e2sim/ASN1c/ProSeUEtoNetworkRelaying.c rename to e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.c diff --git a/e2sim/ASN1c/ProSeUEtoNetworkRelaying.h b/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.h similarity index 100% rename from e2sim/ASN1c/ProSeUEtoNetworkRelaying.h rename to e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.h diff --git a/e2sim/ASN1c/ProcedureCode.c b/e2sim/previous/ASN1c/ProcedureCode.c similarity index 100% rename from e2sim/ASN1c/ProcedureCode.c rename to e2sim/previous/ASN1c/ProcedureCode.c diff --git a/e2sim/ASN1c/ProcedureCode.h b/e2sim/previous/ASN1c/ProcedureCode.h similarity index 100% rename from e2sim/ASN1c/ProcedureCode.h rename to e2sim/previous/ASN1c/ProcedureCode.h diff --git a/e2sim/ASN1c/ProtectedEUTRAResourceIndication.c b/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.c similarity index 100% rename from e2sim/ASN1c/ProtectedEUTRAResourceIndication.c rename to e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.c diff --git a/e2sim/ASN1c/ProtectedEUTRAResourceIndication.h b/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.h similarity index 100% rename from e2sim/ASN1c/ProtectedEUTRAResourceIndication.h rename to e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.h diff --git a/e2sim/ASN1c/ProtectedFootprintTimePattern.c b/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.c similarity index 100% rename from e2sim/ASN1c/ProtectedFootprintTimePattern.c rename to e2sim/previous/ASN1c/ProtectedFootprintTimePattern.c diff --git a/e2sim/ASN1c/ProtectedFootprintTimePattern.h b/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.h similarity index 100% rename from e2sim/ASN1c/ProtectedFootprintTimePattern.h rename to e2sim/previous/ASN1c/ProtectedFootprintTimePattern.h diff --git a/e2sim/ASN1c/ProtectedResourceList-Item.c b/e2sim/previous/ASN1c/ProtectedResourceList-Item.c similarity index 100% rename from e2sim/ASN1c/ProtectedResourceList-Item.c rename to e2sim/previous/ASN1c/ProtectedResourceList-Item.c diff --git a/e2sim/ASN1c/ProtectedResourceList-Item.h b/e2sim/previous/ASN1c/ProtectedResourceList-Item.h similarity index 100% rename from e2sim/ASN1c/ProtectedResourceList-Item.h rename to e2sim/previous/ASN1c/ProtectedResourceList-Item.h diff --git a/e2sim/ASN1c/ProtectedResourceList.c b/e2sim/previous/ASN1c/ProtectedResourceList.c similarity index 100% rename from e2sim/ASN1c/ProtectedResourceList.c rename to e2sim/previous/ASN1c/ProtectedResourceList.c diff --git a/e2sim/ASN1c/ProtectedResourceList.h b/e2sim/previous/ASN1c/ProtectedResourceList.h similarity index 100% rename from e2sim/ASN1c/ProtectedResourceList.h rename to e2sim/previous/ASN1c/ProtectedResourceList.h diff --git a/e2sim/ASN1c/ProtocolExtensionContainer.c b/e2sim/previous/ASN1c/ProtocolExtensionContainer.c similarity index 100% rename from e2sim/ASN1c/ProtocolExtensionContainer.c rename to e2sim/previous/ASN1c/ProtocolExtensionContainer.c diff --git a/e2sim/ASN1c/ProtocolExtensionContainer.h b/e2sim/previous/ASN1c/ProtocolExtensionContainer.h similarity index 100% rename from e2sim/ASN1c/ProtocolExtensionContainer.h rename to e2sim/previous/ASN1c/ProtocolExtensionContainer.h diff --git a/e2sim/ASN1c/ProtocolExtensionField.c b/e2sim/previous/ASN1c/ProtocolExtensionField.c similarity index 100% rename from e2sim/ASN1c/ProtocolExtensionField.c rename to e2sim/previous/ASN1c/ProtocolExtensionField.c diff --git a/e2sim/ASN1c/ProtocolExtensionField.h b/e2sim/previous/ASN1c/ProtocolExtensionField.h similarity index 100% rename from e2sim/ASN1c/ProtocolExtensionField.h rename to e2sim/previous/ASN1c/ProtocolExtensionField.h diff --git a/e2sim/ASN1c/ProtocolIE-Container.c b/e2sim/previous/ASN1c/ProtocolIE-Container.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-Container.c rename to e2sim/previous/ASN1c/ProtocolIE-Container.c diff --git a/e2sim/ASN1c/ProtocolIE-Container.h b/e2sim/previous/ASN1c/ProtocolIE-Container.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-Container.h rename to e2sim/previous/ASN1c/ProtocolIE-Container.h diff --git a/e2sim/ASN1c/ProtocolIE-ContainerList.c b/e2sim/previous/ASN1c/ProtocolIE-ContainerList.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ContainerList.c rename to e2sim/previous/ASN1c/ProtocolIE-ContainerList.c diff --git a/e2sim/ASN1c/ProtocolIE-ContainerList.h b/e2sim/previous/ASN1c/ProtocolIE-ContainerList.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ContainerList.h rename to e2sim/previous/ASN1c/ProtocolIE-ContainerList.h diff --git a/e2sim/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ContainerPair.c rename to e2sim/previous/ASN1c/ProtocolIE-ContainerPair.c diff --git a/e2sim/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ContainerPair.h rename to e2sim/previous/ASN1c/ProtocolIE-ContainerPair.h diff --git a/e2sim/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ContainerPairList.c rename to e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.c diff --git a/e2sim/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ContainerPairList.h rename to e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.h diff --git a/e2sim/ASN1c/ProtocolIE-Field.c b/e2sim/previous/ASN1c/ProtocolIE-Field.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-Field.c rename to e2sim/previous/ASN1c/ProtocolIE-Field.c diff --git a/e2sim/ASN1c/ProtocolIE-Field.h b/e2sim/previous/ASN1c/ProtocolIE-Field.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-Field.h rename to e2sim/previous/ASN1c/ProtocolIE-Field.h diff --git a/e2sim/ASN1c/ProtocolIE-FieldPair.c b/e2sim/previous/ASN1c/ProtocolIE-FieldPair.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-FieldPair.c rename to e2sim/previous/ASN1c/ProtocolIE-FieldPair.c diff --git a/e2sim/ASN1c/ProtocolIE-FieldPair.h b/e2sim/previous/ASN1c/ProtocolIE-FieldPair.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-FieldPair.h rename to e2sim/previous/ASN1c/ProtocolIE-FieldPair.h diff --git a/e2sim/ASN1c/ProtocolIE-ID.c b/e2sim/previous/ASN1c/ProtocolIE-ID.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ID.c rename to e2sim/previous/ASN1c/ProtocolIE-ID.c diff --git a/e2sim/ASN1c/ProtocolIE-ID.h b/e2sim/previous/ASN1c/ProtocolIE-ID.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-ID.h rename to e2sim/previous/ASN1c/ProtocolIE-ID.h diff --git a/e2sim/ASN1c/ProtocolIE-Single-Container.c b/e2sim/previous/ASN1c/ProtocolIE-Single-Container.c similarity index 100% rename from e2sim/ASN1c/ProtocolIE-Single-Container.c rename to e2sim/previous/ASN1c/ProtocolIE-Single-Container.c diff --git a/e2sim/ASN1c/ProtocolIE-Single-Container.h b/e2sim/previous/ASN1c/ProtocolIE-Single-Container.h similarity index 100% rename from e2sim/ASN1c/ProtocolIE-Single-Container.h rename to e2sim/previous/ASN1c/ProtocolIE-Single-Container.h diff --git a/e2sim/ASN1c/QCI.c b/e2sim/previous/ASN1c/QCI.c similarity index 100% rename from e2sim/ASN1c/QCI.c rename to e2sim/previous/ASN1c/QCI.c diff --git a/e2sim/ASN1c/QCI.h b/e2sim/previous/ASN1c/QCI.h similarity index 100% rename from e2sim/ASN1c/QCI.h rename to e2sim/previous/ASN1c/QCI.h diff --git a/e2sim/ASN1c/RANfunction-Item.c b/e2sim/previous/ASN1c/RANfunction-Item.c similarity index 100% rename from e2sim/ASN1c/RANfunction-Item.c rename to e2sim/previous/ASN1c/RANfunction-Item.c diff --git a/e2sim/ASN1c/RANfunction-Item.h b/e2sim/previous/ASN1c/RANfunction-Item.h similarity index 100% rename from e2sim/ASN1c/RANfunction-Item.h rename to e2sim/previous/ASN1c/RANfunction-Item.h diff --git a/e2sim/ASN1c/RANfunctionDefinition.c b/e2sim/previous/ASN1c/RANfunctionDefinition.c similarity index 100% rename from e2sim/ASN1c/RANfunctionDefinition.c rename to e2sim/previous/ASN1c/RANfunctionDefinition.c diff --git a/e2sim/ASN1c/RANfunctionDefinition.h b/e2sim/previous/ASN1c/RANfunctionDefinition.h similarity index 100% rename from e2sim/ASN1c/RANfunctionDefinition.h rename to e2sim/previous/ASN1c/RANfunctionDefinition.h diff --git a/e2sim/ASN1c/RANfunctionID-Item.c b/e2sim/previous/ASN1c/RANfunctionID-Item.c similarity index 100% rename from e2sim/ASN1c/RANfunctionID-Item.c rename to e2sim/previous/ASN1c/RANfunctionID-Item.c diff --git a/e2sim/ASN1c/RANfunctionID-Item.h b/e2sim/previous/ASN1c/RANfunctionID-Item.h similarity index 100% rename from e2sim/ASN1c/RANfunctionID-Item.h rename to e2sim/previous/ASN1c/RANfunctionID-Item.h diff --git a/e2sim/ASN1c/RANfunctionID.c b/e2sim/previous/ASN1c/RANfunctionID.c similarity index 100% rename from e2sim/ASN1c/RANfunctionID.c rename to e2sim/previous/ASN1c/RANfunctionID.c diff --git a/e2sim/ASN1c/RANfunctionID.h b/e2sim/previous/ASN1c/RANfunctionID.h similarity index 100% rename from e2sim/ASN1c/RANfunctionID.h rename to e2sim/previous/ASN1c/RANfunctionID.h diff --git a/e2sim/ASN1c/RANfunctionIDcause-Item.c b/e2sim/previous/ASN1c/RANfunctionIDcause-Item.c similarity index 100% rename from e2sim/ASN1c/RANfunctionIDcause-Item.c rename to e2sim/previous/ASN1c/RANfunctionIDcause-Item.c diff --git a/e2sim/ASN1c/RANfunctionIDcause-Item.h b/e2sim/previous/ASN1c/RANfunctionIDcause-Item.h similarity index 100% rename from e2sim/ASN1c/RANfunctionIDcause-Item.h rename to e2sim/previous/ASN1c/RANfunctionIDcause-Item.h diff --git a/e2sim/ASN1c/RANfunctions-List.c b/e2sim/previous/ASN1c/RANfunctions-List.c similarity index 100% rename from e2sim/ASN1c/RANfunctions-List.c rename to e2sim/previous/ASN1c/RANfunctions-List.c diff --git a/e2sim/ASN1c/RANfunctions-List.h b/e2sim/previous/ASN1c/RANfunctions-List.h similarity index 100% rename from e2sim/ASN1c/RANfunctions-List.h rename to e2sim/previous/ASN1c/RANfunctions-List.h diff --git a/e2sim/ASN1c/RANfunctionsID-List.c b/e2sim/previous/ASN1c/RANfunctionsID-List.c similarity index 100% rename from e2sim/ASN1c/RANfunctionsID-List.c rename to e2sim/previous/ASN1c/RANfunctionsID-List.c diff --git a/e2sim/ASN1c/RANfunctionsID-List.h b/e2sim/previous/ASN1c/RANfunctionsID-List.h similarity index 100% rename from e2sim/ASN1c/RANfunctionsID-List.h rename to e2sim/previous/ASN1c/RANfunctionsID-List.h diff --git a/e2sim/ASN1c/RANfunctionsIDcause-List.c b/e2sim/previous/ASN1c/RANfunctionsIDcause-List.c similarity index 100% rename from e2sim/ASN1c/RANfunctionsIDcause-List.c rename to e2sim/previous/ASN1c/RANfunctionsIDcause-List.c diff --git a/e2sim/ASN1c/RANfunctionsIDcause-List.h b/e2sim/previous/ASN1c/RANfunctionsIDcause-List.h similarity index 100% rename from e2sim/ASN1c/RANfunctionsIDcause-List.h rename to e2sim/previous/ASN1c/RANfunctionsIDcause-List.h diff --git a/e2sim/ASN1c/RICaction-Admitted-Item.c b/e2sim/previous/ASN1c/RICaction-Admitted-Item.c similarity index 100% rename from e2sim/ASN1c/RICaction-Admitted-Item.c rename to e2sim/previous/ASN1c/RICaction-Admitted-Item.c diff --git a/e2sim/ASN1c/RICaction-Admitted-Item.h b/e2sim/previous/ASN1c/RICaction-Admitted-Item.h similarity index 100% rename from e2sim/ASN1c/RICaction-Admitted-Item.h rename to e2sim/previous/ASN1c/RICaction-Admitted-Item.h diff --git a/e2sim/ASN1c/RICaction-Admitted-List.c b/e2sim/previous/ASN1c/RICaction-Admitted-List.c similarity index 100% rename from e2sim/ASN1c/RICaction-Admitted-List.c rename to e2sim/previous/ASN1c/RICaction-Admitted-List.c diff --git a/e2sim/ASN1c/RICaction-Admitted-List.h b/e2sim/previous/ASN1c/RICaction-Admitted-List.h similarity index 100% rename from e2sim/ASN1c/RICaction-Admitted-List.h rename to e2sim/previous/ASN1c/RICaction-Admitted-List.h diff --git a/e2sim/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.c similarity index 100% rename from e2sim/ASN1c/RICaction-NotAdmitted-Item.c rename to e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.c diff --git a/e2sim/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.h similarity index 100% rename from e2sim/ASN1c/RICaction-NotAdmitted-Item.h rename to e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.h diff --git a/e2sim/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.c similarity index 100% rename from e2sim/ASN1c/RICaction-NotAdmitted-List.c rename to e2sim/previous/ASN1c/RICaction-NotAdmitted-List.c diff --git a/e2sim/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.h similarity index 100% rename from e2sim/ASN1c/RICaction-NotAdmitted-List.h rename to e2sim/previous/ASN1c/RICaction-NotAdmitted-List.h diff --git a/e2sim/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.c similarity index 100% rename from e2sim/ASN1c/RICaction-ToBeSetup-Item.c rename to e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.c diff --git a/e2sim/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.h similarity index 100% rename from e2sim/ASN1c/RICaction-ToBeSetup-Item.h rename to e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.h diff --git a/e2sim/ASN1c/RICactionDefinition.c b/e2sim/previous/ASN1c/RICactionDefinition.c similarity index 100% rename from e2sim/ASN1c/RICactionDefinition.c rename to e2sim/previous/ASN1c/RICactionDefinition.c diff --git a/e2sim/ASN1c/RICactionDefinition.h b/e2sim/previous/ASN1c/RICactionDefinition.h similarity index 100% rename from e2sim/ASN1c/RICactionDefinition.h rename to e2sim/previous/ASN1c/RICactionDefinition.h diff --git a/e2sim/ASN1c/RICactionID.c b/e2sim/previous/ASN1c/RICactionID.c similarity index 100% rename from e2sim/ASN1c/RICactionID.c rename to e2sim/previous/ASN1c/RICactionID.c diff --git a/e2sim/ASN1c/RICactionID.h b/e2sim/previous/ASN1c/RICactionID.h similarity index 100% rename from e2sim/ASN1c/RICactionID.h rename to e2sim/previous/ASN1c/RICactionID.h diff --git a/e2sim/ASN1c/RICactionType.c b/e2sim/previous/ASN1c/RICactionType.c similarity index 100% rename from e2sim/ASN1c/RICactionType.c rename to e2sim/previous/ASN1c/RICactionType.c diff --git a/e2sim/ASN1c/RICactionType.h b/e2sim/previous/ASN1c/RICactionType.h similarity index 100% rename from e2sim/ASN1c/RICactionType.h rename to e2sim/previous/ASN1c/RICactionType.h diff --git a/e2sim/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.c similarity index 100% rename from e2sim/ASN1c/RICactions-ToBeSetup-List.c rename to e2sim/previous/ASN1c/RICactions-ToBeSetup-List.c diff --git a/e2sim/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.h similarity index 100% rename from e2sim/ASN1c/RICactions-ToBeSetup-List.h rename to e2sim/previous/ASN1c/RICactions-ToBeSetup-List.h diff --git a/e2sim/ASN1c/RICcallProcessID.c b/e2sim/previous/ASN1c/RICcallProcessID.c similarity index 100% rename from e2sim/ASN1c/RICcallProcessID.c rename to e2sim/previous/ASN1c/RICcallProcessID.c diff --git a/e2sim/ASN1c/RICcallProcessID.h b/e2sim/previous/ASN1c/RICcallProcessID.h similarity index 100% rename from e2sim/ASN1c/RICcallProcessID.h rename to e2sim/previous/ASN1c/RICcallProcessID.h diff --git a/e2sim/ASN1c/RICcause.c b/e2sim/previous/ASN1c/RICcause.c similarity index 100% rename from e2sim/ASN1c/RICcause.c rename to e2sim/previous/ASN1c/RICcause.c diff --git a/e2sim/ASN1c/RICcause.h b/e2sim/previous/ASN1c/RICcause.h similarity index 100% rename from e2sim/ASN1c/RICcause.h rename to e2sim/previous/ASN1c/RICcause.h diff --git a/e2sim/ASN1c/RICcontrolAckRequest.c b/e2sim/previous/ASN1c/RICcontrolAckRequest.c similarity index 100% rename from e2sim/ASN1c/RICcontrolAckRequest.c rename to e2sim/previous/ASN1c/RICcontrolAckRequest.c diff --git a/e2sim/ASN1c/RICcontrolAckRequest.h b/e2sim/previous/ASN1c/RICcontrolAckRequest.h similarity index 100% rename from e2sim/ASN1c/RICcontrolAckRequest.h rename to e2sim/previous/ASN1c/RICcontrolAckRequest.h diff --git a/e2sim/ASN1c/RICcontrolAcknowledge.c b/e2sim/previous/ASN1c/RICcontrolAcknowledge.c similarity index 100% rename from e2sim/ASN1c/RICcontrolAcknowledge.c rename to e2sim/previous/ASN1c/RICcontrolAcknowledge.c diff --git a/e2sim/ASN1c/RICcontrolAcknowledge.h b/e2sim/previous/ASN1c/RICcontrolAcknowledge.h similarity index 100% rename from e2sim/ASN1c/RICcontrolAcknowledge.h rename to e2sim/previous/ASN1c/RICcontrolAcknowledge.h diff --git a/e2sim/ASN1c/RICcontrolFailure.c b/e2sim/previous/ASN1c/RICcontrolFailure.c similarity index 100% rename from e2sim/ASN1c/RICcontrolFailure.c rename to e2sim/previous/ASN1c/RICcontrolFailure.c diff --git a/e2sim/ASN1c/RICcontrolFailure.h b/e2sim/previous/ASN1c/RICcontrolFailure.h similarity index 100% rename from e2sim/ASN1c/RICcontrolFailure.h rename to e2sim/previous/ASN1c/RICcontrolFailure.h diff --git a/e2sim/ASN1c/RICcontrolHeader.c b/e2sim/previous/ASN1c/RICcontrolHeader.c similarity index 100% rename from e2sim/ASN1c/RICcontrolHeader.c rename to e2sim/previous/ASN1c/RICcontrolHeader.c diff --git a/e2sim/ASN1c/RICcontrolHeader.h b/e2sim/previous/ASN1c/RICcontrolHeader.h similarity index 100% rename from e2sim/ASN1c/RICcontrolHeader.h rename to e2sim/previous/ASN1c/RICcontrolHeader.h diff --git a/e2sim/ASN1c/RICcontrolMessage.c b/e2sim/previous/ASN1c/RICcontrolMessage.c similarity index 100% rename from e2sim/ASN1c/RICcontrolMessage.c rename to e2sim/previous/ASN1c/RICcontrolMessage.c diff --git a/e2sim/ASN1c/RICcontrolMessage.h b/e2sim/previous/ASN1c/RICcontrolMessage.h similarity index 100% rename from e2sim/ASN1c/RICcontrolMessage.h rename to e2sim/previous/ASN1c/RICcontrolMessage.h diff --git a/e2sim/ASN1c/RICcontrolRequest.c b/e2sim/previous/ASN1c/RICcontrolRequest.c similarity index 100% rename from e2sim/ASN1c/RICcontrolRequest.c rename to e2sim/previous/ASN1c/RICcontrolRequest.c diff --git a/e2sim/ASN1c/RICcontrolRequest.h b/e2sim/previous/ASN1c/RICcontrolRequest.h similarity index 100% rename from e2sim/ASN1c/RICcontrolRequest.h rename to e2sim/previous/ASN1c/RICcontrolRequest.h diff --git a/e2sim/ASN1c/RICcontrolStatus.c b/e2sim/previous/ASN1c/RICcontrolStatus.c similarity index 100% rename from e2sim/ASN1c/RICcontrolStatus.c rename to e2sim/previous/ASN1c/RICcontrolStatus.c diff --git a/e2sim/ASN1c/RICcontrolStatus.h b/e2sim/previous/ASN1c/RICcontrolStatus.h similarity index 100% rename from e2sim/ASN1c/RICcontrolStatus.h rename to e2sim/previous/ASN1c/RICcontrolStatus.h diff --git a/e2sim/ASN1c/RICeventTriggerDefinition.c b/e2sim/previous/ASN1c/RICeventTriggerDefinition.c similarity index 100% rename from e2sim/ASN1c/RICeventTriggerDefinition.c rename to e2sim/previous/ASN1c/RICeventTriggerDefinition.c diff --git a/e2sim/ASN1c/RICeventTriggerDefinition.h b/e2sim/previous/ASN1c/RICeventTriggerDefinition.h similarity index 100% rename from e2sim/ASN1c/RICeventTriggerDefinition.h rename to e2sim/previous/ASN1c/RICeventTriggerDefinition.h diff --git a/e2sim/ASN1c/RICindication.c b/e2sim/previous/ASN1c/RICindication.c similarity index 100% rename from e2sim/ASN1c/RICindication.c rename to e2sim/previous/ASN1c/RICindication.c diff --git a/e2sim/ASN1c/RICindication.h b/e2sim/previous/ASN1c/RICindication.h similarity index 100% rename from e2sim/ASN1c/RICindication.h rename to e2sim/previous/ASN1c/RICindication.h diff --git a/e2sim/ASN1c/RICindicationHeader.c b/e2sim/previous/ASN1c/RICindicationHeader.c similarity index 100% rename from e2sim/ASN1c/RICindicationHeader.c rename to e2sim/previous/ASN1c/RICindicationHeader.c diff --git a/e2sim/ASN1c/RICindicationHeader.h b/e2sim/previous/ASN1c/RICindicationHeader.h similarity index 100% rename from e2sim/ASN1c/RICindicationHeader.h rename to e2sim/previous/ASN1c/RICindicationHeader.h diff --git a/e2sim/ASN1c/RICindicationMessage.c b/e2sim/previous/ASN1c/RICindicationMessage.c similarity index 100% rename from e2sim/ASN1c/RICindicationMessage.c rename to e2sim/previous/ASN1c/RICindicationMessage.c diff --git a/e2sim/ASN1c/RICindicationMessage.h b/e2sim/previous/ASN1c/RICindicationMessage.h similarity index 100% rename from e2sim/ASN1c/RICindicationMessage.h rename to e2sim/previous/ASN1c/RICindicationMessage.h diff --git a/e2sim/ASN1c/RICindicationSN.c b/e2sim/previous/ASN1c/RICindicationSN.c similarity index 100% rename from e2sim/ASN1c/RICindicationSN.c rename to e2sim/previous/ASN1c/RICindicationSN.c diff --git a/e2sim/ASN1c/RICindicationSN.h b/e2sim/previous/ASN1c/RICindicationSN.h similarity index 100% rename from e2sim/ASN1c/RICindicationSN.h rename to e2sim/previous/ASN1c/RICindicationSN.h diff --git a/e2sim/ASN1c/RICindicationType.c b/e2sim/previous/ASN1c/RICindicationType.c similarity index 100% rename from e2sim/ASN1c/RICindicationType.c rename to e2sim/previous/ASN1c/RICindicationType.c diff --git a/e2sim/ASN1c/RICindicationType.h b/e2sim/previous/ASN1c/RICindicationType.h similarity index 100% rename from e2sim/ASN1c/RICindicationType.h rename to e2sim/previous/ASN1c/RICindicationType.h diff --git a/e2sim/ASN1c/RICrequestID.c b/e2sim/previous/ASN1c/RICrequestID.c similarity index 100% rename from e2sim/ASN1c/RICrequestID.c rename to e2sim/previous/ASN1c/RICrequestID.c diff --git a/e2sim/ASN1c/RICrequestID.h b/e2sim/previous/ASN1c/RICrequestID.h similarity index 100% rename from e2sim/ASN1c/RICrequestID.h rename to e2sim/previous/ASN1c/RICrequestID.h diff --git a/e2sim/ASN1c/RICserviceQuery.c b/e2sim/previous/ASN1c/RICserviceQuery.c similarity index 100% rename from e2sim/ASN1c/RICserviceQuery.c rename to e2sim/previous/ASN1c/RICserviceQuery.c diff --git a/e2sim/ASN1c/RICserviceQuery.h b/e2sim/previous/ASN1c/RICserviceQuery.h similarity index 100% rename from e2sim/ASN1c/RICserviceQuery.h rename to e2sim/previous/ASN1c/RICserviceQuery.h diff --git a/e2sim/ASN1c/RICserviceUpdate.c b/e2sim/previous/ASN1c/RICserviceUpdate.c similarity index 100% rename from e2sim/ASN1c/RICserviceUpdate.c rename to e2sim/previous/ASN1c/RICserviceUpdate.c diff --git a/e2sim/ASN1c/RICserviceUpdate.h b/e2sim/previous/ASN1c/RICserviceUpdate.h similarity index 100% rename from e2sim/ASN1c/RICserviceUpdate.h rename to e2sim/previous/ASN1c/RICserviceUpdate.h diff --git a/e2sim/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.c similarity index 100% rename from e2sim/ASN1c/RICserviceUpdateAcknowledge.c rename to e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.c diff --git a/e2sim/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.h similarity index 100% rename from e2sim/ASN1c/RICserviceUpdateAcknowledge.h rename to e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.h diff --git a/e2sim/ASN1c/RICserviceUpdateFailure.c b/e2sim/previous/ASN1c/RICserviceUpdateFailure.c similarity index 100% rename from e2sim/ASN1c/RICserviceUpdateFailure.c rename to e2sim/previous/ASN1c/RICserviceUpdateFailure.c diff --git a/e2sim/ASN1c/RICserviceUpdateFailure.h b/e2sim/previous/ASN1c/RICserviceUpdateFailure.h similarity index 100% rename from e2sim/ASN1c/RICserviceUpdateFailure.h rename to e2sim/previous/ASN1c/RICserviceUpdateFailure.h diff --git a/e2sim/ASN1c/RICsubscription.c b/e2sim/previous/ASN1c/RICsubscription.c similarity index 100% rename from e2sim/ASN1c/RICsubscription.c rename to e2sim/previous/ASN1c/RICsubscription.c diff --git a/e2sim/ASN1c/RICsubscription.h b/e2sim/previous/ASN1c/RICsubscription.h similarity index 100% rename from e2sim/ASN1c/RICsubscription.h rename to e2sim/previous/ASN1c/RICsubscription.h diff --git a/e2sim/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.c similarity index 100% rename from e2sim/ASN1c/RICsubscriptionDeleteFailure.c rename to e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.c diff --git a/e2sim/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.h similarity index 100% rename from e2sim/ASN1c/RICsubscriptionDeleteFailure.h rename to e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.h diff --git a/e2sim/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.c similarity index 100% rename from e2sim/ASN1c/RICsubscriptionDeleteRequest.c rename to e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.c diff --git a/e2sim/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.h similarity index 100% rename from e2sim/ASN1c/RICsubscriptionDeleteRequest.h rename to e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.h diff --git a/e2sim/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.c similarity index 100% rename from e2sim/ASN1c/RICsubscriptionDeleteResponse.c rename to e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.c diff --git a/e2sim/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.h similarity index 100% rename from e2sim/ASN1c/RICsubscriptionDeleteResponse.h rename to e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.h diff --git a/e2sim/ASN1c/RICsubscriptionFailure.c b/e2sim/previous/ASN1c/RICsubscriptionFailure.c similarity index 100% rename from e2sim/ASN1c/RICsubscriptionFailure.c rename to e2sim/previous/ASN1c/RICsubscriptionFailure.c diff --git a/e2sim/ASN1c/RICsubscriptionFailure.h b/e2sim/previous/ASN1c/RICsubscriptionFailure.h similarity index 100% rename from e2sim/ASN1c/RICsubscriptionFailure.h rename to e2sim/previous/ASN1c/RICsubscriptionFailure.h diff --git a/e2sim/ASN1c/RICsubscriptionRequest.c b/e2sim/previous/ASN1c/RICsubscriptionRequest.c similarity index 100% rename from e2sim/ASN1c/RICsubscriptionRequest.c rename to e2sim/previous/ASN1c/RICsubscriptionRequest.c diff --git a/e2sim/ASN1c/RICsubscriptionRequest.h b/e2sim/previous/ASN1c/RICsubscriptionRequest.h similarity index 100% rename from e2sim/ASN1c/RICsubscriptionRequest.h rename to e2sim/previous/ASN1c/RICsubscriptionRequest.h diff --git a/e2sim/ASN1c/RICsubscriptionResponse.c b/e2sim/previous/ASN1c/RICsubscriptionResponse.c similarity index 100% rename from e2sim/ASN1c/RICsubscriptionResponse.c rename to e2sim/previous/ASN1c/RICsubscriptionResponse.c diff --git a/e2sim/ASN1c/RICsubscriptionResponse.h b/e2sim/previous/ASN1c/RICsubscriptionResponse.h similarity index 100% rename from e2sim/ASN1c/RICsubscriptionResponse.h rename to e2sim/previous/ASN1c/RICsubscriptionResponse.h diff --git a/e2sim/ASN1c/RICsubsequentAction.c b/e2sim/previous/ASN1c/RICsubsequentAction.c similarity index 100% rename from e2sim/ASN1c/RICsubsequentAction.c rename to e2sim/previous/ASN1c/RICsubsequentAction.c diff --git a/e2sim/ASN1c/RICsubsequentAction.h b/e2sim/previous/ASN1c/RICsubsequentAction.h similarity index 100% rename from e2sim/ASN1c/RICsubsequentAction.h rename to e2sim/previous/ASN1c/RICsubsequentAction.h diff --git a/e2sim/ASN1c/RICsubsequentActionType.c b/e2sim/previous/ASN1c/RICsubsequentActionType.c similarity index 100% rename from e2sim/ASN1c/RICsubsequentActionType.c rename to e2sim/previous/ASN1c/RICsubsequentActionType.c diff --git a/e2sim/ASN1c/RICsubsequentActionType.h b/e2sim/previous/ASN1c/RICsubsequentActionType.h similarity index 100% rename from e2sim/ASN1c/RICsubsequentActionType.h rename to e2sim/previous/ASN1c/RICsubsequentActionType.h diff --git a/e2sim/ASN1c/RICtimeToWait.c b/e2sim/previous/ASN1c/RICtimeToWait.c similarity index 100% rename from e2sim/ASN1c/RICtimeToWait.c rename to e2sim/previous/ASN1c/RICtimeToWait.c diff --git a/e2sim/ASN1c/RICtimeToWait.h b/e2sim/previous/ASN1c/RICtimeToWait.h similarity index 100% rename from e2sim/ASN1c/RICtimeToWait.h rename to e2sim/previous/ASN1c/RICtimeToWait.h diff --git a/e2sim/ASN1c/RLC-Status.c b/e2sim/previous/ASN1c/RLC-Status.c similarity index 100% rename from e2sim/ASN1c/RLC-Status.c rename to e2sim/previous/ASN1c/RLC-Status.c diff --git a/e2sim/ASN1c/RLC-Status.h b/e2sim/previous/ASN1c/RLC-Status.h similarity index 100% rename from e2sim/ASN1c/RLC-Status.h rename to e2sim/previous/ASN1c/RLC-Status.h diff --git a/e2sim/ASN1c/RLCMode.c b/e2sim/previous/ASN1c/RLCMode.c similarity index 100% rename from e2sim/ASN1c/RLCMode.c rename to e2sim/previous/ASN1c/RLCMode.c diff --git a/e2sim/ASN1c/RLCMode.h b/e2sim/previous/ASN1c/RLCMode.h similarity index 100% rename from e2sim/ASN1c/RLCMode.h rename to e2sim/previous/ASN1c/RLCMode.h diff --git a/e2sim/ASN1c/RLFIndication.c b/e2sim/previous/ASN1c/RLFIndication.c similarity index 100% rename from e2sim/ASN1c/RLFIndication.c rename to e2sim/previous/ASN1c/RLFIndication.c diff --git a/e2sim/ASN1c/RLFIndication.h b/e2sim/previous/ASN1c/RLFIndication.h similarity index 100% rename from e2sim/ASN1c/RLFIndication.h rename to e2sim/previous/ASN1c/RLFIndication.h diff --git a/e2sim/ASN1c/RNL-Header.c b/e2sim/previous/ASN1c/RNL-Header.c similarity index 100% rename from e2sim/ASN1c/RNL-Header.c rename to e2sim/previous/ASN1c/RNL-Header.c diff --git a/e2sim/ASN1c/RNL-Header.h b/e2sim/previous/ASN1c/RNL-Header.h similarity index 100% rename from e2sim/ASN1c/RNL-Header.h rename to e2sim/previous/ASN1c/RNL-Header.h diff --git a/e2sim/ASN1c/RNTP-Threshold.c b/e2sim/previous/ASN1c/RNTP-Threshold.c similarity index 100% rename from e2sim/ASN1c/RNTP-Threshold.c rename to e2sim/previous/ASN1c/RNTP-Threshold.c diff --git a/e2sim/ASN1c/RNTP-Threshold.h b/e2sim/previous/ASN1c/RNTP-Threshold.h similarity index 100% rename from e2sim/ASN1c/RNTP-Threshold.h rename to e2sim/previous/ASN1c/RNTP-Threshold.h diff --git a/e2sim/ASN1c/RRC-Config-Ind.c b/e2sim/previous/ASN1c/RRC-Config-Ind.c similarity index 100% rename from e2sim/ASN1c/RRC-Config-Ind.c rename to e2sim/previous/ASN1c/RRC-Config-Ind.c diff --git a/e2sim/ASN1c/RRC-Config-Ind.h b/e2sim/previous/ASN1c/RRC-Config-Ind.h similarity index 100% rename from e2sim/ASN1c/RRC-Config-Ind.h rename to e2sim/previous/ASN1c/RRC-Config-Ind.h diff --git a/e2sim/ASN1c/RRC-Context.c b/e2sim/previous/ASN1c/RRC-Context.c similarity index 100% rename from e2sim/ASN1c/RRC-Context.c rename to e2sim/previous/ASN1c/RRC-Context.c diff --git a/e2sim/ASN1c/RRC-Context.h b/e2sim/previous/ASN1c/RRC-Context.h similarity index 100% rename from e2sim/ASN1c/RRC-Context.h rename to e2sim/previous/ASN1c/RRC-Context.h diff --git a/e2sim/ASN1c/RRCConnReestabIndicator.c b/e2sim/previous/ASN1c/RRCConnReestabIndicator.c similarity index 100% rename from e2sim/ASN1c/RRCConnReestabIndicator.c rename to e2sim/previous/ASN1c/RRCConnReestabIndicator.c diff --git a/e2sim/ASN1c/RRCConnReestabIndicator.h b/e2sim/previous/ASN1c/RRCConnReestabIndicator.h similarity index 100% rename from e2sim/ASN1c/RRCConnReestabIndicator.h rename to e2sim/previous/ASN1c/RRCConnReestabIndicator.h diff --git a/e2sim/ASN1c/RRCConnSetupIndicator.c b/e2sim/previous/ASN1c/RRCConnSetupIndicator.c similarity index 100% rename from e2sim/ASN1c/RRCConnSetupIndicator.c rename to e2sim/previous/ASN1c/RRCConnSetupIndicator.c diff --git a/e2sim/ASN1c/RRCConnSetupIndicator.h b/e2sim/previous/ASN1c/RRCConnSetupIndicator.h similarity index 100% rename from e2sim/ASN1c/RRCConnSetupIndicator.h rename to e2sim/previous/ASN1c/RRCConnSetupIndicator.h diff --git a/e2sim/ASN1c/RRCContainer.c b/e2sim/previous/ASN1c/RRCContainer.c similarity index 100% rename from e2sim/ASN1c/RRCContainer.c rename to e2sim/previous/ASN1c/RRCContainer.c diff --git a/e2sim/ASN1c/RRCContainer.h b/e2sim/previous/ASN1c/RRCContainer.h similarity index 100% rename from e2sim/ASN1c/RRCContainer.h rename to e2sim/previous/ASN1c/RRCContainer.h diff --git a/e2sim/ASN1c/RRCTransfer.c b/e2sim/previous/ASN1c/RRCTransfer.c similarity index 100% rename from e2sim/ASN1c/RRCTransfer.c rename to e2sim/previous/ASN1c/RRCTransfer.c diff --git a/e2sim/ASN1c/RRCTransfer.h b/e2sim/previous/ASN1c/RRCTransfer.h similarity index 100% rename from e2sim/ASN1c/RRCTransfer.h rename to e2sim/previous/ASN1c/RRCTransfer.h diff --git a/e2sim/ASN1c/RSRPMRList.c b/e2sim/previous/ASN1c/RSRPMRList.c similarity index 100% rename from e2sim/ASN1c/RSRPMRList.c rename to e2sim/previous/ASN1c/RSRPMRList.c diff --git a/e2sim/ASN1c/RSRPMRList.h b/e2sim/previous/ASN1c/RSRPMRList.h similarity index 100% rename from e2sim/ASN1c/RSRPMRList.h rename to e2sim/previous/ASN1c/RSRPMRList.h diff --git a/e2sim/ASN1c/RSRPMeasurementResult.c b/e2sim/previous/ASN1c/RSRPMeasurementResult.c similarity index 100% rename from e2sim/ASN1c/RSRPMeasurementResult.c rename to e2sim/previous/ASN1c/RSRPMeasurementResult.c diff --git a/e2sim/ASN1c/RSRPMeasurementResult.h b/e2sim/previous/ASN1c/RSRPMeasurementResult.h similarity index 100% rename from e2sim/ASN1c/RSRPMeasurementResult.h rename to e2sim/previous/ASN1c/RSRPMeasurementResult.h diff --git a/e2sim/ASN1c/RadioResourceStatus.c b/e2sim/previous/ASN1c/RadioResourceStatus.c similarity index 100% rename from e2sim/ASN1c/RadioResourceStatus.c rename to e2sim/previous/ASN1c/RadioResourceStatus.c diff --git a/e2sim/ASN1c/RadioResourceStatus.h b/e2sim/previous/ASN1c/RadioResourceStatus.h similarity index 100% rename from e2sim/ASN1c/RadioResourceStatus.h rename to e2sim/previous/ASN1c/RadioResourceStatus.h diff --git a/e2sim/ASN1c/RadioframeAllocationOffset.c b/e2sim/previous/ASN1c/RadioframeAllocationOffset.c similarity index 100% rename from e2sim/ASN1c/RadioframeAllocationOffset.c rename to e2sim/previous/ASN1c/RadioframeAllocationOffset.c diff --git a/e2sim/ASN1c/RadioframeAllocationOffset.h b/e2sim/previous/ASN1c/RadioframeAllocationOffset.h similarity index 100% rename from e2sim/ASN1c/RadioframeAllocationOffset.h rename to e2sim/previous/ASN1c/RadioframeAllocationOffset.h diff --git a/e2sim/ASN1c/RadioframeAllocationPeriod.c b/e2sim/previous/ASN1c/RadioframeAllocationPeriod.c similarity index 100% rename from e2sim/ASN1c/RadioframeAllocationPeriod.c rename to e2sim/previous/ASN1c/RadioframeAllocationPeriod.c diff --git a/e2sim/ASN1c/RadioframeAllocationPeriod.h b/e2sim/previous/ASN1c/RadioframeAllocationPeriod.h similarity index 100% rename from e2sim/ASN1c/RadioframeAllocationPeriod.h rename to e2sim/previous/ASN1c/RadioframeAllocationPeriod.h diff --git a/e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c b/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c similarity index 100% rename from e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c rename to e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c diff --git a/e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h b/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h similarity index 100% rename from e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h rename to e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h diff --git a/e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c b/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c similarity index 100% rename from e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c rename to e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c diff --git a/e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h b/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h similarity index 100% rename from e2sim/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h rename to e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h diff --git a/e2sim/ASN1c/ReceiveStatusofULPDCPSDUs.c b/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.c similarity index 100% rename from e2sim/ASN1c/ReceiveStatusofULPDCPSDUs.c rename to e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.c diff --git a/e2sim/ASN1c/ReceiveStatusofULPDCPSDUs.h b/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.h similarity index 100% rename from e2sim/ASN1c/ReceiveStatusofULPDCPSDUs.h rename to e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.h diff --git a/e2sim/ASN1c/Reestablishment-Indication.c b/e2sim/previous/ASN1c/Reestablishment-Indication.c similarity index 100% rename from e2sim/ASN1c/Reestablishment-Indication.c rename to e2sim/previous/ASN1c/Reestablishment-Indication.c diff --git a/e2sim/ASN1c/Reestablishment-Indication.h b/e2sim/previous/ASN1c/Reestablishment-Indication.h similarity index 100% rename from e2sim/ASN1c/Reestablishment-Indication.h rename to e2sim/previous/ASN1c/Reestablishment-Indication.h diff --git a/e2sim/ASN1c/Registration-Request.c b/e2sim/previous/ASN1c/Registration-Request.c similarity index 100% rename from e2sim/ASN1c/Registration-Request.c rename to e2sim/previous/ASN1c/Registration-Request.c diff --git a/e2sim/ASN1c/Registration-Request.h b/e2sim/previous/ASN1c/Registration-Request.h similarity index 100% rename from e2sim/ASN1c/Registration-Request.h rename to e2sim/previous/ASN1c/Registration-Request.h diff --git a/e2sim/ASN1c/RelativeNarrowbandTxPower.c b/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.c similarity index 100% rename from e2sim/ASN1c/RelativeNarrowbandTxPower.c rename to e2sim/previous/ASN1c/RelativeNarrowbandTxPower.c diff --git a/e2sim/ASN1c/RelativeNarrowbandTxPower.h b/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.h similarity index 100% rename from e2sim/ASN1c/RelativeNarrowbandTxPower.h rename to e2sim/previous/ASN1c/RelativeNarrowbandTxPower.h diff --git a/e2sim/ASN1c/ReplacingCellsList-Item.c b/e2sim/previous/ASN1c/ReplacingCellsList-Item.c similarity index 100% rename from e2sim/ASN1c/ReplacingCellsList-Item.c rename to e2sim/previous/ASN1c/ReplacingCellsList-Item.c diff --git a/e2sim/ASN1c/ReplacingCellsList-Item.h b/e2sim/previous/ASN1c/ReplacingCellsList-Item.h similarity index 100% rename from e2sim/ASN1c/ReplacingCellsList-Item.h rename to e2sim/previous/ASN1c/ReplacingCellsList-Item.h diff --git a/e2sim/ASN1c/ReplacingCellsList.c b/e2sim/previous/ASN1c/ReplacingCellsList.c similarity index 100% rename from e2sim/ASN1c/ReplacingCellsList.c rename to e2sim/previous/ASN1c/ReplacingCellsList.c diff --git a/e2sim/ASN1c/ReplacingCellsList.h b/e2sim/previous/ASN1c/ReplacingCellsList.h similarity index 100% rename from e2sim/ASN1c/ReplacingCellsList.h rename to e2sim/previous/ASN1c/ReplacingCellsList.h diff --git a/e2sim/ASN1c/ReportAmountMDT.c b/e2sim/previous/ASN1c/ReportAmountMDT.c similarity index 100% rename from e2sim/ASN1c/ReportAmountMDT.c rename to e2sim/previous/ASN1c/ReportAmountMDT.c diff --git a/e2sim/ASN1c/ReportAmountMDT.h b/e2sim/previous/ASN1c/ReportAmountMDT.h similarity index 100% rename from e2sim/ASN1c/ReportAmountMDT.h rename to e2sim/previous/ASN1c/ReportAmountMDT.h diff --git a/e2sim/ASN1c/ReportArea.c b/e2sim/previous/ASN1c/ReportArea.c similarity index 100% rename from e2sim/ASN1c/ReportArea.c rename to e2sim/previous/ASN1c/ReportArea.c diff --git a/e2sim/ASN1c/ReportArea.h b/e2sim/previous/ASN1c/ReportArea.h similarity index 100% rename from e2sim/ASN1c/ReportArea.h rename to e2sim/previous/ASN1c/ReportArea.h diff --git a/e2sim/ASN1c/ReportCharacteristics.c b/e2sim/previous/ASN1c/ReportCharacteristics.c similarity index 100% rename from e2sim/ASN1c/ReportCharacteristics.c rename to e2sim/previous/ASN1c/ReportCharacteristics.c diff --git a/e2sim/ASN1c/ReportCharacteristics.h b/e2sim/previous/ASN1c/ReportCharacteristics.h similarity index 100% rename from e2sim/ASN1c/ReportCharacteristics.h rename to e2sim/previous/ASN1c/ReportCharacteristics.h diff --git a/e2sim/ASN1c/ReportIntervalMDT.c b/e2sim/previous/ASN1c/ReportIntervalMDT.c similarity index 100% rename from e2sim/ASN1c/ReportIntervalMDT.c rename to e2sim/previous/ASN1c/ReportIntervalMDT.c diff --git a/e2sim/ASN1c/ReportIntervalMDT.h b/e2sim/previous/ASN1c/ReportIntervalMDT.h similarity index 100% rename from e2sim/ASN1c/ReportIntervalMDT.h rename to e2sim/previous/ASN1c/ReportIntervalMDT.h diff --git a/e2sim/ASN1c/ReportingPeriodicity.c b/e2sim/previous/ASN1c/ReportingPeriodicity.c similarity index 100% rename from e2sim/ASN1c/ReportingPeriodicity.c rename to e2sim/previous/ASN1c/ReportingPeriodicity.c diff --git a/e2sim/ASN1c/ReportingPeriodicity.h b/e2sim/previous/ASN1c/ReportingPeriodicity.h similarity index 100% rename from e2sim/ASN1c/ReportingPeriodicity.h rename to e2sim/previous/ASN1c/ReportingPeriodicity.h diff --git a/e2sim/ASN1c/ReportingPeriodicityCSIR.c b/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.c similarity index 100% rename from e2sim/ASN1c/ReportingPeriodicityCSIR.c rename to e2sim/previous/ASN1c/ReportingPeriodicityCSIR.c diff --git a/e2sim/ASN1c/ReportingPeriodicityCSIR.h b/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.h similarity index 100% rename from e2sim/ASN1c/ReportingPeriodicityCSIR.h rename to e2sim/previous/ASN1c/ReportingPeriodicityCSIR.h diff --git a/e2sim/ASN1c/ReportingPeriodicityRSRPMR.c b/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.c similarity index 100% rename from e2sim/ASN1c/ReportingPeriodicityRSRPMR.c rename to e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.c diff --git a/e2sim/ASN1c/ReportingPeriodicityRSRPMR.h b/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.h similarity index 100% rename from e2sim/ASN1c/ReportingPeriodicityRSRPMR.h rename to e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.h diff --git a/e2sim/ASN1c/ReservedSubframePattern.c b/e2sim/previous/ASN1c/ReservedSubframePattern.c similarity index 100% rename from e2sim/ASN1c/ReservedSubframePattern.c rename to e2sim/previous/ASN1c/ReservedSubframePattern.c diff --git a/e2sim/ASN1c/ReservedSubframePattern.h b/e2sim/previous/ASN1c/ReservedSubframePattern.h similarity index 100% rename from e2sim/ASN1c/ReservedSubframePattern.h rename to e2sim/previous/ASN1c/ReservedSubframePattern.h diff --git a/e2sim/ASN1c/ResetRequest.c b/e2sim/previous/ASN1c/ResetRequest.c similarity index 100% rename from e2sim/ASN1c/ResetRequest.c rename to e2sim/previous/ASN1c/ResetRequest.c diff --git a/e2sim/ASN1c/ResetRequest.h b/e2sim/previous/ASN1c/ResetRequest.h similarity index 100% rename from e2sim/ASN1c/ResetRequest.h rename to e2sim/previous/ASN1c/ResetRequest.h diff --git a/e2sim/ASN1c/ResetResponse.c b/e2sim/previous/ASN1c/ResetResponse.c similarity index 100% rename from e2sim/ASN1c/ResetResponse.c rename to e2sim/previous/ASN1c/ResetResponse.c diff --git a/e2sim/ASN1c/ResetResponse.h b/e2sim/previous/ASN1c/ResetResponse.h similarity index 100% rename from e2sim/ASN1c/ResetResponse.h rename to e2sim/previous/ASN1c/ResetResponse.h diff --git a/e2sim/ASN1c/ResourceStatusFailure.c b/e2sim/previous/ASN1c/ResourceStatusFailure.c similarity index 100% rename from e2sim/ASN1c/ResourceStatusFailure.c rename to e2sim/previous/ASN1c/ResourceStatusFailure.c diff --git a/e2sim/ASN1c/ResourceStatusFailure.h b/e2sim/previous/ASN1c/ResourceStatusFailure.h similarity index 100% rename from e2sim/ASN1c/ResourceStatusFailure.h rename to e2sim/previous/ASN1c/ResourceStatusFailure.h diff --git a/e2sim/ASN1c/ResourceStatusRequest.c b/e2sim/previous/ASN1c/ResourceStatusRequest.c similarity index 100% rename from e2sim/ASN1c/ResourceStatusRequest.c rename to e2sim/previous/ASN1c/ResourceStatusRequest.c diff --git a/e2sim/ASN1c/ResourceStatusRequest.h b/e2sim/previous/ASN1c/ResourceStatusRequest.h similarity index 100% rename from e2sim/ASN1c/ResourceStatusRequest.h rename to e2sim/previous/ASN1c/ResourceStatusRequest.h diff --git a/e2sim/ASN1c/ResourceStatusResponse.c b/e2sim/previous/ASN1c/ResourceStatusResponse.c similarity index 100% rename from e2sim/ASN1c/ResourceStatusResponse.c rename to e2sim/previous/ASN1c/ResourceStatusResponse.c diff --git a/e2sim/ASN1c/ResourceStatusResponse.h b/e2sim/previous/ASN1c/ResourceStatusResponse.h similarity index 100% rename from e2sim/ASN1c/ResourceStatusResponse.h rename to e2sim/previous/ASN1c/ResourceStatusResponse.h diff --git a/e2sim/ASN1c/ResourceStatusUpdate.c b/e2sim/previous/ASN1c/ResourceStatusUpdate.c similarity index 100% rename from e2sim/ASN1c/ResourceStatusUpdate.c rename to e2sim/previous/ASN1c/ResourceStatusUpdate.c diff --git a/e2sim/ASN1c/ResourceStatusUpdate.h b/e2sim/previous/ASN1c/ResourceStatusUpdate.h similarity index 100% rename from e2sim/ASN1c/ResourceStatusUpdate.h rename to e2sim/previous/ASN1c/ResourceStatusUpdate.h diff --git a/e2sim/ASN1c/ResourceType.c b/e2sim/previous/ASN1c/ResourceType.c similarity index 100% rename from e2sim/ASN1c/ResourceType.c rename to e2sim/previous/ASN1c/ResourceType.c diff --git a/e2sim/ASN1c/ResourceType.h b/e2sim/previous/ASN1c/ResourceType.h similarity index 100% rename from e2sim/ASN1c/ResourceType.h rename to e2sim/previous/ASN1c/ResourceType.h diff --git a/e2sim/ASN1c/RespondingNodeType-EndcConfigUpdate.c b/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.c similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EndcConfigUpdate.c rename to e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.c diff --git a/e2sim/ASN1c/RespondingNodeType-EndcConfigUpdate.h b/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.h similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EndcConfigUpdate.h rename to e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.h diff --git a/e2sim/ASN1c/RespondingNodeType-EndcX2Removal.c b/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.c similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EndcX2Removal.c rename to e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.c diff --git a/e2sim/ASN1c/RespondingNodeType-EndcX2Removal.h b/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.h similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EndcX2Removal.h rename to e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.h diff --git a/e2sim/ASN1c/RespondingNodeType-EndcX2Setup.c b/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.c similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EndcX2Setup.c rename to e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.c diff --git a/e2sim/ASN1c/RespondingNodeType-EndcX2Setup.h b/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.h similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EndcX2Setup.h rename to e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.h diff --git a/e2sim/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c b/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c rename to e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c diff --git a/e2sim/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h b/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h similarity index 100% rename from e2sim/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h rename to e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h diff --git a/e2sim/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c b/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c similarity index 100% rename from e2sim/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c rename to e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c diff --git a/e2sim/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h b/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h similarity index 100% rename from e2sim/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h rename to e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h diff --git a/e2sim/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c b/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c similarity index 100% rename from e2sim/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c rename to e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c diff --git a/e2sim/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h b/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h similarity index 100% rename from e2sim/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h rename to e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h diff --git a/e2sim/ASN1c/ResponseInformationSeNBReconfComp.c b/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.c similarity index 100% rename from e2sim/ASN1c/ResponseInformationSeNBReconfComp.c rename to e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.c diff --git a/e2sim/ASN1c/ResponseInformationSeNBReconfComp.h b/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.h similarity index 100% rename from e2sim/ASN1c/ResponseInformationSeNBReconfComp.h rename to e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.h diff --git a/e2sim/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c b/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c similarity index 100% rename from e2sim/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c rename to e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c diff --git a/e2sim/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h b/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h similarity index 100% rename from e2sim/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h rename to e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h diff --git a/e2sim/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c b/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c similarity index 100% rename from e2sim/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c rename to e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c diff --git a/e2sim/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h b/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h similarity index 100% rename from e2sim/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h rename to e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h diff --git a/e2sim/ASN1c/ResponseInformationSgNBReconfComp.c b/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.c similarity index 100% rename from e2sim/ASN1c/ResponseInformationSgNBReconfComp.c rename to e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.c diff --git a/e2sim/ASN1c/ResponseInformationSgNBReconfComp.h b/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.h similarity index 100% rename from e2sim/ASN1c/ResponseInformationSgNBReconfComp.h rename to e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.h diff --git a/e2sim/ASN1c/ResumeID.c b/e2sim/previous/ASN1c/ResumeID.c similarity index 100% rename from e2sim/ASN1c/ResumeID.c rename to e2sim/previous/ASN1c/ResumeID.c diff --git a/e2sim/ASN1c/ResumeID.h b/e2sim/previous/ASN1c/ResumeID.h similarity index 100% rename from e2sim/ASN1c/ResumeID.h rename to e2sim/previous/ASN1c/ResumeID.h diff --git a/e2sim/ASN1c/RetrieveUEContextFailure.c b/e2sim/previous/ASN1c/RetrieveUEContextFailure.c similarity index 100% rename from e2sim/ASN1c/RetrieveUEContextFailure.c rename to e2sim/previous/ASN1c/RetrieveUEContextFailure.c diff --git a/e2sim/ASN1c/RetrieveUEContextFailure.h b/e2sim/previous/ASN1c/RetrieveUEContextFailure.h similarity index 100% rename from e2sim/ASN1c/RetrieveUEContextFailure.h rename to e2sim/previous/ASN1c/RetrieveUEContextFailure.h diff --git a/e2sim/ASN1c/RetrieveUEContextRequest.c b/e2sim/previous/ASN1c/RetrieveUEContextRequest.c similarity index 100% rename from e2sim/ASN1c/RetrieveUEContextRequest.c rename to e2sim/previous/ASN1c/RetrieveUEContextRequest.c diff --git a/e2sim/ASN1c/RetrieveUEContextRequest.h b/e2sim/previous/ASN1c/RetrieveUEContextRequest.h similarity index 100% rename from e2sim/ASN1c/RetrieveUEContextRequest.h rename to e2sim/previous/ASN1c/RetrieveUEContextRequest.h diff --git a/e2sim/ASN1c/RetrieveUEContextResponse.c b/e2sim/previous/ASN1c/RetrieveUEContextResponse.c similarity index 100% rename from e2sim/ASN1c/RetrieveUEContextResponse.c rename to e2sim/previous/ASN1c/RetrieveUEContextResponse.c diff --git a/e2sim/ASN1c/RetrieveUEContextResponse.h b/e2sim/previous/ASN1c/RetrieveUEContextResponse.h similarity index 100% rename from e2sim/ASN1c/RetrieveUEContextResponse.h rename to e2sim/previous/ASN1c/RetrieveUEContextResponse.h diff --git a/e2sim/ASN1c/S1TNLLoadIndicator.c b/e2sim/previous/ASN1c/S1TNLLoadIndicator.c similarity index 100% rename from e2sim/ASN1c/S1TNLLoadIndicator.c rename to e2sim/previous/ASN1c/S1TNLLoadIndicator.c diff --git a/e2sim/ASN1c/S1TNLLoadIndicator.h b/e2sim/previous/ASN1c/S1TNLLoadIndicator.h similarity index 100% rename from e2sim/ASN1c/S1TNLLoadIndicator.h rename to e2sim/previous/ASN1c/S1TNLLoadIndicator.h diff --git a/e2sim/ASN1c/SCGChangeIndication.c b/e2sim/previous/ASN1c/SCGChangeIndication.c similarity index 100% rename from e2sim/ASN1c/SCGChangeIndication.c rename to e2sim/previous/ASN1c/SCGChangeIndication.c diff --git a/e2sim/ASN1c/SCGChangeIndication.h b/e2sim/previous/ASN1c/SCGChangeIndication.h similarity index 100% rename from e2sim/ASN1c/SCGChangeIndication.h rename to e2sim/previous/ASN1c/SCGChangeIndication.h diff --git a/e2sim/ASN1c/SCGConfigurationQuery.c b/e2sim/previous/ASN1c/SCGConfigurationQuery.c similarity index 100% rename from e2sim/ASN1c/SCGConfigurationQuery.c rename to e2sim/previous/ASN1c/SCGConfigurationQuery.c diff --git a/e2sim/ASN1c/SCGConfigurationQuery.h b/e2sim/previous/ASN1c/SCGConfigurationQuery.h similarity index 100% rename from e2sim/ASN1c/SCGConfigurationQuery.h rename to e2sim/previous/ASN1c/SCGConfigurationQuery.h diff --git a/e2sim/ASN1c/SGNB-Addition-Trigger-Ind.c b/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.c similarity index 100% rename from e2sim/ASN1c/SGNB-Addition-Trigger-Ind.c rename to e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.c diff --git a/e2sim/ASN1c/SGNB-Addition-Trigger-Ind.h b/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.h similarity index 100% rename from e2sim/ASN1c/SGNB-Addition-Trigger-Ind.h rename to e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.h diff --git a/e2sim/ASN1c/SIPTOBearerDeactivationIndication.c b/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.c similarity index 100% rename from e2sim/ASN1c/SIPTOBearerDeactivationIndication.c rename to e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.c diff --git a/e2sim/ASN1c/SIPTOBearerDeactivationIndication.h b/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.h similarity index 100% rename from e2sim/ASN1c/SIPTOBearerDeactivationIndication.h rename to e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.h diff --git a/e2sim/ASN1c/SNStatusTransfer.c b/e2sim/previous/ASN1c/SNStatusTransfer.c similarity index 100% rename from e2sim/ASN1c/SNStatusTransfer.c rename to e2sim/previous/ASN1c/SNStatusTransfer.c diff --git a/e2sim/ASN1c/SNStatusTransfer.h b/e2sim/previous/ASN1c/SNStatusTransfer.h similarity index 100% rename from e2sim/ASN1c/SNStatusTransfer.h rename to e2sim/previous/ASN1c/SNStatusTransfer.h diff --git a/e2sim/ASN1c/SRBType.c b/e2sim/previous/ASN1c/SRBType.c similarity index 100% rename from e2sim/ASN1c/SRBType.c rename to e2sim/previous/ASN1c/SRBType.c diff --git a/e2sim/ASN1c/SRBType.h b/e2sim/previous/ASN1c/SRBType.h similarity index 100% rename from e2sim/ASN1c/SRBType.h rename to e2sim/previous/ASN1c/SRBType.h diff --git a/e2sim/ASN1c/SRVCCOperationPossible.c b/e2sim/previous/ASN1c/SRVCCOperationPossible.c similarity index 100% rename from e2sim/ASN1c/SRVCCOperationPossible.c rename to e2sim/previous/ASN1c/SRVCCOperationPossible.c diff --git a/e2sim/ASN1c/SRVCCOperationPossible.h b/e2sim/previous/ASN1c/SRVCCOperationPossible.h similarity index 100% rename from e2sim/ASN1c/SRVCCOperationPossible.h rename to e2sim/previous/ASN1c/SRVCCOperationPossible.h diff --git a/e2sim/ASN1c/SULInformation.c b/e2sim/previous/ASN1c/SULInformation.c similarity index 100% rename from e2sim/ASN1c/SULInformation.c rename to e2sim/previous/ASN1c/SULInformation.c diff --git a/e2sim/ASN1c/SULInformation.h b/e2sim/previous/ASN1c/SULInformation.h similarity index 100% rename from e2sim/ASN1c/SULInformation.h rename to e2sim/previous/ASN1c/SULInformation.h diff --git a/e2sim/ASN1c/ScheduledCommunicationTime.c b/e2sim/previous/ASN1c/ScheduledCommunicationTime.c similarity index 100% rename from e2sim/ASN1c/ScheduledCommunicationTime.c rename to e2sim/previous/ASN1c/ScheduledCommunicationTime.c diff --git a/e2sim/ASN1c/ScheduledCommunicationTime.h b/e2sim/previous/ASN1c/ScheduledCommunicationTime.h similarity index 100% rename from e2sim/ASN1c/ScheduledCommunicationTime.h rename to e2sim/previous/ASN1c/ScheduledCommunicationTime.h diff --git a/e2sim/ASN1c/SeNBAdditionRequest.c b/e2sim/previous/ASN1c/SeNBAdditionRequest.c similarity index 100% rename from e2sim/ASN1c/SeNBAdditionRequest.c rename to e2sim/previous/ASN1c/SeNBAdditionRequest.c diff --git a/e2sim/ASN1c/SeNBAdditionRequest.h b/e2sim/previous/ASN1c/SeNBAdditionRequest.h similarity index 100% rename from e2sim/ASN1c/SeNBAdditionRequest.h rename to e2sim/previous/ASN1c/SeNBAdditionRequest.h diff --git a/e2sim/ASN1c/SeNBAdditionRequestAcknowledge.c b/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.c similarity index 100% rename from e2sim/ASN1c/SeNBAdditionRequestAcknowledge.c rename to e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.c diff --git a/e2sim/ASN1c/SeNBAdditionRequestAcknowledge.h b/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.h similarity index 100% rename from e2sim/ASN1c/SeNBAdditionRequestAcknowledge.h rename to e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.h diff --git a/e2sim/ASN1c/SeNBAdditionRequestReject.c b/e2sim/previous/ASN1c/SeNBAdditionRequestReject.c similarity index 100% rename from e2sim/ASN1c/SeNBAdditionRequestReject.c rename to e2sim/previous/ASN1c/SeNBAdditionRequestReject.c diff --git a/e2sim/ASN1c/SeNBAdditionRequestReject.h b/e2sim/previous/ASN1c/SeNBAdditionRequestReject.h similarity index 100% rename from e2sim/ASN1c/SeNBAdditionRequestReject.h rename to e2sim/previous/ASN1c/SeNBAdditionRequestReject.h diff --git a/e2sim/ASN1c/SeNBCounterCheckRequest.c b/e2sim/previous/ASN1c/SeNBCounterCheckRequest.c similarity index 100% rename from e2sim/ASN1c/SeNBCounterCheckRequest.c rename to e2sim/previous/ASN1c/SeNBCounterCheckRequest.c diff --git a/e2sim/ASN1c/SeNBCounterCheckRequest.h b/e2sim/previous/ASN1c/SeNBCounterCheckRequest.h similarity index 100% rename from e2sim/ASN1c/SeNBCounterCheckRequest.h rename to e2sim/previous/ASN1c/SeNBCounterCheckRequest.h diff --git a/e2sim/ASN1c/SeNBModificationConfirm.c b/e2sim/previous/ASN1c/SeNBModificationConfirm.c similarity index 100% rename from e2sim/ASN1c/SeNBModificationConfirm.c rename to e2sim/previous/ASN1c/SeNBModificationConfirm.c diff --git a/e2sim/ASN1c/SeNBModificationConfirm.h b/e2sim/previous/ASN1c/SeNBModificationConfirm.h similarity index 100% rename from e2sim/ASN1c/SeNBModificationConfirm.h rename to e2sim/previous/ASN1c/SeNBModificationConfirm.h diff --git a/e2sim/ASN1c/SeNBModificationRefuse.c b/e2sim/previous/ASN1c/SeNBModificationRefuse.c similarity index 100% rename from e2sim/ASN1c/SeNBModificationRefuse.c rename to e2sim/previous/ASN1c/SeNBModificationRefuse.c diff --git a/e2sim/ASN1c/SeNBModificationRefuse.h b/e2sim/previous/ASN1c/SeNBModificationRefuse.h similarity index 100% rename from e2sim/ASN1c/SeNBModificationRefuse.h rename to e2sim/previous/ASN1c/SeNBModificationRefuse.h diff --git a/e2sim/ASN1c/SeNBModificationRequest.c b/e2sim/previous/ASN1c/SeNBModificationRequest.c similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequest.c rename to e2sim/previous/ASN1c/SeNBModificationRequest.c diff --git a/e2sim/ASN1c/SeNBModificationRequest.h b/e2sim/previous/ASN1c/SeNBModificationRequest.h similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequest.h rename to e2sim/previous/ASN1c/SeNBModificationRequest.h diff --git a/e2sim/ASN1c/SeNBModificationRequestAcknowledge.c b/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.c similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequestAcknowledge.c rename to e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.c diff --git a/e2sim/ASN1c/SeNBModificationRequestAcknowledge.h b/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.h similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequestAcknowledge.h rename to e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.h diff --git a/e2sim/ASN1c/SeNBModificationRequestReject.c b/e2sim/previous/ASN1c/SeNBModificationRequestReject.c similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequestReject.c rename to e2sim/previous/ASN1c/SeNBModificationRequestReject.c diff --git a/e2sim/ASN1c/SeNBModificationRequestReject.h b/e2sim/previous/ASN1c/SeNBModificationRequestReject.h similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequestReject.h rename to e2sim/previous/ASN1c/SeNBModificationRequestReject.h diff --git a/e2sim/ASN1c/SeNBModificationRequired.c b/e2sim/previous/ASN1c/SeNBModificationRequired.c similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequired.c rename to e2sim/previous/ASN1c/SeNBModificationRequired.c diff --git a/e2sim/ASN1c/SeNBModificationRequired.h b/e2sim/previous/ASN1c/SeNBModificationRequired.h similarity index 100% rename from e2sim/ASN1c/SeNBModificationRequired.h rename to e2sim/previous/ASN1c/SeNBModificationRequired.h diff --git a/e2sim/ASN1c/SeNBReconfigurationComplete.c b/e2sim/previous/ASN1c/SeNBReconfigurationComplete.c similarity index 100% rename from e2sim/ASN1c/SeNBReconfigurationComplete.c rename to e2sim/previous/ASN1c/SeNBReconfigurationComplete.c diff --git a/e2sim/ASN1c/SeNBReconfigurationComplete.h b/e2sim/previous/ASN1c/SeNBReconfigurationComplete.h similarity index 100% rename from e2sim/ASN1c/SeNBReconfigurationComplete.h rename to e2sim/previous/ASN1c/SeNBReconfigurationComplete.h diff --git a/e2sim/ASN1c/SeNBReleaseConfirm.c b/e2sim/previous/ASN1c/SeNBReleaseConfirm.c similarity index 100% rename from e2sim/ASN1c/SeNBReleaseConfirm.c rename to e2sim/previous/ASN1c/SeNBReleaseConfirm.c diff --git a/e2sim/ASN1c/SeNBReleaseConfirm.h b/e2sim/previous/ASN1c/SeNBReleaseConfirm.h similarity index 100% rename from e2sim/ASN1c/SeNBReleaseConfirm.h rename to e2sim/previous/ASN1c/SeNBReleaseConfirm.h diff --git a/e2sim/ASN1c/SeNBReleaseRequest.c b/e2sim/previous/ASN1c/SeNBReleaseRequest.c similarity index 100% rename from e2sim/ASN1c/SeNBReleaseRequest.c rename to e2sim/previous/ASN1c/SeNBReleaseRequest.c diff --git a/e2sim/ASN1c/SeNBReleaseRequest.h b/e2sim/previous/ASN1c/SeNBReleaseRequest.h similarity index 100% rename from e2sim/ASN1c/SeNBReleaseRequest.h rename to e2sim/previous/ASN1c/SeNBReleaseRequest.h diff --git a/e2sim/ASN1c/SeNBReleaseRequired.c b/e2sim/previous/ASN1c/SeNBReleaseRequired.c similarity index 100% rename from e2sim/ASN1c/SeNBReleaseRequired.c rename to e2sim/previous/ASN1c/SeNBReleaseRequired.c diff --git a/e2sim/ASN1c/SeNBReleaseRequired.h b/e2sim/previous/ASN1c/SeNBReleaseRequired.h similarity index 100% rename from e2sim/ASN1c/SeNBReleaseRequired.h rename to e2sim/previous/ASN1c/SeNBReleaseRequired.h diff --git a/e2sim/ASN1c/SeNBSecurityKey.c b/e2sim/previous/ASN1c/SeNBSecurityKey.c similarity index 100% rename from e2sim/ASN1c/SeNBSecurityKey.c rename to e2sim/previous/ASN1c/SeNBSecurityKey.c diff --git a/e2sim/ASN1c/SeNBSecurityKey.h b/e2sim/previous/ASN1c/SeNBSecurityKey.h similarity index 100% rename from e2sim/ASN1c/SeNBSecurityKey.h rename to e2sim/previous/ASN1c/SeNBSecurityKey.h diff --git a/e2sim/ASN1c/SeNBtoMeNBContainer.c b/e2sim/previous/ASN1c/SeNBtoMeNBContainer.c similarity index 100% rename from e2sim/ASN1c/SeNBtoMeNBContainer.c rename to e2sim/previous/ASN1c/SeNBtoMeNBContainer.c diff --git a/e2sim/ASN1c/SeNBtoMeNBContainer.h b/e2sim/previous/ASN1c/SeNBtoMeNBContainer.h similarity index 100% rename from e2sim/ASN1c/SeNBtoMeNBContainer.h rename to e2sim/previous/ASN1c/SeNBtoMeNBContainer.h diff --git a/e2sim/ASN1c/SecondaryRATDataUsageReport.c b/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.c similarity index 100% rename from e2sim/ASN1c/SecondaryRATDataUsageReport.c rename to e2sim/previous/ASN1c/SecondaryRATDataUsageReport.c diff --git a/e2sim/ASN1c/SecondaryRATDataUsageReport.h b/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.h similarity index 100% rename from e2sim/ASN1c/SecondaryRATDataUsageReport.h rename to e2sim/previous/ASN1c/SecondaryRATDataUsageReport.h diff --git a/e2sim/ASN1c/SecondaryRATUsageReport-Item.c b/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.c similarity index 100% rename from e2sim/ASN1c/SecondaryRATUsageReport-Item.c rename to e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.c diff --git a/e2sim/ASN1c/SecondaryRATUsageReport-Item.h b/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.h similarity index 100% rename from e2sim/ASN1c/SecondaryRATUsageReport-Item.h rename to e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.h diff --git a/e2sim/ASN1c/SecondaryRATUsageReportList.c b/e2sim/previous/ASN1c/SecondaryRATUsageReportList.c similarity index 100% rename from e2sim/ASN1c/SecondaryRATUsageReportList.c rename to e2sim/previous/ASN1c/SecondaryRATUsageReportList.c diff --git a/e2sim/ASN1c/SecondaryRATUsageReportList.h b/e2sim/previous/ASN1c/SecondaryRATUsageReportList.h similarity index 100% rename from e2sim/ASN1c/SecondaryRATUsageReportList.h rename to e2sim/previous/ASN1c/SecondaryRATUsageReportList.h diff --git a/e2sim/ASN1c/ServedCell-Information.c b/e2sim/previous/ASN1c/ServedCell-Information.c similarity index 100% rename from e2sim/ASN1c/ServedCell-Information.c rename to e2sim/previous/ASN1c/ServedCell-Information.c diff --git a/e2sim/ASN1c/ServedCell-Information.h b/e2sim/previous/ASN1c/ServedCell-Information.h similarity index 100% rename from e2sim/ASN1c/ServedCell-Information.h rename to e2sim/previous/ASN1c/ServedCell-Information.h diff --git a/e2sim/ASN1c/ServedCells.c b/e2sim/previous/ASN1c/ServedCells.c similarity index 100% rename from e2sim/ASN1c/ServedCells.c rename to e2sim/previous/ASN1c/ServedCells.c diff --git a/e2sim/ASN1c/ServedCells.h b/e2sim/previous/ASN1c/ServedCells.h similarity index 100% rename from e2sim/ASN1c/ServedCells.h rename to e2sim/previous/ASN1c/ServedCells.h diff --git a/e2sim/ASN1c/ServedCellsToActivate-Item.c b/e2sim/previous/ASN1c/ServedCellsToActivate-Item.c similarity index 100% rename from e2sim/ASN1c/ServedCellsToActivate-Item.c rename to e2sim/previous/ASN1c/ServedCellsToActivate-Item.c diff --git a/e2sim/ASN1c/ServedCellsToActivate-Item.h b/e2sim/previous/ASN1c/ServedCellsToActivate-Item.h similarity index 100% rename from e2sim/ASN1c/ServedCellsToActivate-Item.h rename to e2sim/previous/ASN1c/ServedCellsToActivate-Item.h diff --git a/e2sim/ASN1c/ServedCellsToActivate.c b/e2sim/previous/ASN1c/ServedCellsToActivate.c similarity index 100% rename from e2sim/ASN1c/ServedCellsToActivate.c rename to e2sim/previous/ASN1c/ServedCellsToActivate.c diff --git a/e2sim/ASN1c/ServedCellsToActivate.h b/e2sim/previous/ASN1c/ServedCellsToActivate.h similarity index 100% rename from e2sim/ASN1c/ServedCellsToActivate.h rename to e2sim/previous/ASN1c/ServedCellsToActivate.h diff --git a/e2sim/ASN1c/ServedCellsToModify-Item.c b/e2sim/previous/ASN1c/ServedCellsToModify-Item.c similarity index 100% rename from e2sim/ASN1c/ServedCellsToModify-Item.c rename to e2sim/previous/ASN1c/ServedCellsToModify-Item.c diff --git a/e2sim/ASN1c/ServedCellsToModify-Item.h b/e2sim/previous/ASN1c/ServedCellsToModify-Item.h similarity index 100% rename from e2sim/ASN1c/ServedCellsToModify-Item.h rename to e2sim/previous/ASN1c/ServedCellsToModify-Item.h diff --git a/e2sim/ASN1c/ServedCellsToModify.c b/e2sim/previous/ASN1c/ServedCellsToModify.c similarity index 100% rename from e2sim/ASN1c/ServedCellsToModify.c rename to e2sim/previous/ASN1c/ServedCellsToModify.c diff --git a/e2sim/ASN1c/ServedCellsToModify.h b/e2sim/previous/ASN1c/ServedCellsToModify.h similarity index 100% rename from e2sim/ASN1c/ServedCellsToModify.h rename to e2sim/previous/ASN1c/ServedCellsToModify.h diff --git a/e2sim/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c b/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c similarity index 100% rename from e2sim/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c rename to e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c diff --git a/e2sim/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h b/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h similarity index 100% rename from e2sim/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h rename to e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h diff --git a/e2sim/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c b/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c similarity index 100% rename from e2sim/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c rename to e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c diff --git a/e2sim/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h b/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h similarity index 100% rename from e2sim/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h rename to e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h diff --git a/e2sim/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c b/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c similarity index 100% rename from e2sim/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c rename to e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c diff --git a/e2sim/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h b/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h similarity index 100% rename from e2sim/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h rename to e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h diff --git a/e2sim/ASN1c/ServedNRCell-Information.c b/e2sim/previous/ASN1c/ServedNRCell-Information.c similarity index 100% rename from e2sim/ASN1c/ServedNRCell-Information.c rename to e2sim/previous/ASN1c/ServedNRCell-Information.c diff --git a/e2sim/ASN1c/ServedNRCell-Information.h b/e2sim/previous/ASN1c/ServedNRCell-Information.h similarity index 100% rename from e2sim/ASN1c/ServedNRCell-Information.h rename to e2sim/previous/ASN1c/ServedNRCell-Information.h diff --git a/e2sim/ASN1c/ServedNRCellsToActivate-Item.c b/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.c similarity index 100% rename from e2sim/ASN1c/ServedNRCellsToActivate-Item.c rename to e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.c diff --git a/e2sim/ASN1c/ServedNRCellsToActivate-Item.h b/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.h similarity index 100% rename from e2sim/ASN1c/ServedNRCellsToActivate-Item.h rename to e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.h diff --git a/e2sim/ASN1c/ServedNRCellsToActivate.c b/e2sim/previous/ASN1c/ServedNRCellsToActivate.c similarity index 100% rename from e2sim/ASN1c/ServedNRCellsToActivate.c rename to e2sim/previous/ASN1c/ServedNRCellsToActivate.c diff --git a/e2sim/ASN1c/ServedNRCellsToActivate.h b/e2sim/previous/ASN1c/ServedNRCellsToActivate.h similarity index 100% rename from e2sim/ASN1c/ServedNRCellsToActivate.h rename to e2sim/previous/ASN1c/ServedNRCellsToActivate.h diff --git a/e2sim/ASN1c/ServedNRCellsToModify-Item.c b/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.c similarity index 100% rename from e2sim/ASN1c/ServedNRCellsToModify-Item.c rename to e2sim/previous/ASN1c/ServedNRCellsToModify-Item.c diff --git a/e2sim/ASN1c/ServedNRCellsToModify-Item.h b/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.h similarity index 100% rename from e2sim/ASN1c/ServedNRCellsToModify-Item.h rename to e2sim/previous/ASN1c/ServedNRCellsToModify-Item.h diff --git a/e2sim/ASN1c/ServedNRcellsENDCX2ManagementList.c b/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.c similarity index 100% rename from e2sim/ASN1c/ServedNRcellsENDCX2ManagementList.c rename to e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.c diff --git a/e2sim/ASN1c/ServedNRcellsENDCX2ManagementList.h b/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.h similarity index 100% rename from e2sim/ASN1c/ServedNRcellsENDCX2ManagementList.h rename to e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.h diff --git a/e2sim/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c b/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c similarity index 100% rename from e2sim/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c rename to e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c diff --git a/e2sim/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h b/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h similarity index 100% rename from e2sim/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h rename to e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h diff --git a/e2sim/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c b/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c similarity index 100% rename from e2sim/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c rename to e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c diff --git a/e2sim/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h b/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h similarity index 100% rename from e2sim/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h rename to e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h diff --git a/e2sim/ASN1c/ServiceType.c b/e2sim/previous/ASN1c/ServiceType.c similarity index 100% rename from e2sim/ASN1c/ServiceType.c rename to e2sim/previous/ASN1c/ServiceType.c diff --git a/e2sim/ASN1c/ServiceType.h b/e2sim/previous/ASN1c/ServiceType.h similarity index 100% rename from e2sim/ASN1c/ServiceType.h rename to e2sim/previous/ASN1c/ServiceType.h diff --git a/e2sim/ASN1c/SgNB-UE-X2AP-ID.c b/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c similarity index 100% rename from e2sim/ASN1c/SgNB-UE-X2AP-ID.c rename to e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c diff --git a/e2sim/ASN1c/SgNB-UE-X2AP-ID.h b/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h similarity index 100% rename from e2sim/ASN1c/SgNB-UE-X2AP-ID.h rename to e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h diff --git a/e2sim/ASN1c/SgNBActivityNotification.c b/e2sim/previous/ASN1c/SgNBActivityNotification.c similarity index 100% rename from e2sim/ASN1c/SgNBActivityNotification.c rename to e2sim/previous/ASN1c/SgNBActivityNotification.c diff --git a/e2sim/ASN1c/SgNBActivityNotification.h b/e2sim/previous/ASN1c/SgNBActivityNotification.h similarity index 100% rename from e2sim/ASN1c/SgNBActivityNotification.h rename to e2sim/previous/ASN1c/SgNBActivityNotification.h diff --git a/e2sim/ASN1c/SgNBAdditionRequest.c b/e2sim/previous/ASN1c/SgNBAdditionRequest.c similarity index 100% rename from e2sim/ASN1c/SgNBAdditionRequest.c rename to e2sim/previous/ASN1c/SgNBAdditionRequest.c diff --git a/e2sim/ASN1c/SgNBAdditionRequest.h b/e2sim/previous/ASN1c/SgNBAdditionRequest.h similarity index 100% rename from e2sim/ASN1c/SgNBAdditionRequest.h rename to e2sim/previous/ASN1c/SgNBAdditionRequest.h diff --git a/e2sim/ASN1c/SgNBAdditionRequestAcknowledge.c b/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.c similarity index 100% rename from e2sim/ASN1c/SgNBAdditionRequestAcknowledge.c rename to e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.c diff --git a/e2sim/ASN1c/SgNBAdditionRequestAcknowledge.h b/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.h similarity index 100% rename from e2sim/ASN1c/SgNBAdditionRequestAcknowledge.h rename to e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.h diff --git a/e2sim/ASN1c/SgNBAdditionRequestReject.c b/e2sim/previous/ASN1c/SgNBAdditionRequestReject.c similarity index 100% rename from e2sim/ASN1c/SgNBAdditionRequestReject.c rename to e2sim/previous/ASN1c/SgNBAdditionRequestReject.c diff --git a/e2sim/ASN1c/SgNBAdditionRequestReject.h b/e2sim/previous/ASN1c/SgNBAdditionRequestReject.h similarity index 100% rename from e2sim/ASN1c/SgNBAdditionRequestReject.h rename to e2sim/previous/ASN1c/SgNBAdditionRequestReject.h diff --git a/e2sim/ASN1c/SgNBChangeConfirm.c b/e2sim/previous/ASN1c/SgNBChangeConfirm.c similarity index 100% rename from e2sim/ASN1c/SgNBChangeConfirm.c rename to e2sim/previous/ASN1c/SgNBChangeConfirm.c diff --git a/e2sim/ASN1c/SgNBChangeConfirm.h b/e2sim/previous/ASN1c/SgNBChangeConfirm.h similarity index 100% rename from e2sim/ASN1c/SgNBChangeConfirm.h rename to e2sim/previous/ASN1c/SgNBChangeConfirm.h diff --git a/e2sim/ASN1c/SgNBChangeRefuse.c b/e2sim/previous/ASN1c/SgNBChangeRefuse.c similarity index 100% rename from e2sim/ASN1c/SgNBChangeRefuse.c rename to e2sim/previous/ASN1c/SgNBChangeRefuse.c diff --git a/e2sim/ASN1c/SgNBChangeRefuse.h b/e2sim/previous/ASN1c/SgNBChangeRefuse.h similarity index 100% rename from e2sim/ASN1c/SgNBChangeRefuse.h rename to e2sim/previous/ASN1c/SgNBChangeRefuse.h diff --git a/e2sim/ASN1c/SgNBChangeRequired.c b/e2sim/previous/ASN1c/SgNBChangeRequired.c similarity index 100% rename from e2sim/ASN1c/SgNBChangeRequired.c rename to e2sim/previous/ASN1c/SgNBChangeRequired.c diff --git a/e2sim/ASN1c/SgNBChangeRequired.h b/e2sim/previous/ASN1c/SgNBChangeRequired.h similarity index 100% rename from e2sim/ASN1c/SgNBChangeRequired.h rename to e2sim/previous/ASN1c/SgNBChangeRequired.h diff --git a/e2sim/ASN1c/SgNBCoordinationAssistanceInformation.c b/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.c similarity index 100% rename from e2sim/ASN1c/SgNBCoordinationAssistanceInformation.c rename to e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.c diff --git a/e2sim/ASN1c/SgNBCoordinationAssistanceInformation.h b/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.h similarity index 100% rename from e2sim/ASN1c/SgNBCoordinationAssistanceInformation.h rename to e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.h diff --git a/e2sim/ASN1c/SgNBCounterCheckRequest.c b/e2sim/previous/ASN1c/SgNBCounterCheckRequest.c similarity index 100% rename from e2sim/ASN1c/SgNBCounterCheckRequest.c rename to e2sim/previous/ASN1c/SgNBCounterCheckRequest.c diff --git a/e2sim/ASN1c/SgNBCounterCheckRequest.h b/e2sim/previous/ASN1c/SgNBCounterCheckRequest.h similarity index 100% rename from e2sim/ASN1c/SgNBCounterCheckRequest.h rename to e2sim/previous/ASN1c/SgNBCounterCheckRequest.h diff --git a/e2sim/ASN1c/SgNBModificationConfirm.c b/e2sim/previous/ASN1c/SgNBModificationConfirm.c similarity index 100% rename from e2sim/ASN1c/SgNBModificationConfirm.c rename to e2sim/previous/ASN1c/SgNBModificationConfirm.c diff --git a/e2sim/ASN1c/SgNBModificationConfirm.h b/e2sim/previous/ASN1c/SgNBModificationConfirm.h similarity index 100% rename from e2sim/ASN1c/SgNBModificationConfirm.h rename to e2sim/previous/ASN1c/SgNBModificationConfirm.h diff --git a/e2sim/ASN1c/SgNBModificationRefuse.c b/e2sim/previous/ASN1c/SgNBModificationRefuse.c similarity index 100% rename from e2sim/ASN1c/SgNBModificationRefuse.c rename to e2sim/previous/ASN1c/SgNBModificationRefuse.c diff --git a/e2sim/ASN1c/SgNBModificationRefuse.h b/e2sim/previous/ASN1c/SgNBModificationRefuse.h similarity index 100% rename from e2sim/ASN1c/SgNBModificationRefuse.h rename to e2sim/previous/ASN1c/SgNBModificationRefuse.h diff --git a/e2sim/ASN1c/SgNBModificationRequest.c b/e2sim/previous/ASN1c/SgNBModificationRequest.c similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequest.c rename to e2sim/previous/ASN1c/SgNBModificationRequest.c diff --git a/e2sim/ASN1c/SgNBModificationRequest.h b/e2sim/previous/ASN1c/SgNBModificationRequest.h similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequest.h rename to e2sim/previous/ASN1c/SgNBModificationRequest.h diff --git a/e2sim/ASN1c/SgNBModificationRequestAcknowledge.c b/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.c similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequestAcknowledge.c rename to e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.c diff --git a/e2sim/ASN1c/SgNBModificationRequestAcknowledge.h b/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.h similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequestAcknowledge.h rename to e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.h diff --git a/e2sim/ASN1c/SgNBModificationRequestReject.c b/e2sim/previous/ASN1c/SgNBModificationRequestReject.c similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequestReject.c rename to e2sim/previous/ASN1c/SgNBModificationRequestReject.c diff --git a/e2sim/ASN1c/SgNBModificationRequestReject.h b/e2sim/previous/ASN1c/SgNBModificationRequestReject.h similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequestReject.h rename to e2sim/previous/ASN1c/SgNBModificationRequestReject.h diff --git a/e2sim/ASN1c/SgNBModificationRequired.c b/e2sim/previous/ASN1c/SgNBModificationRequired.c similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequired.c rename to e2sim/previous/ASN1c/SgNBModificationRequired.c diff --git a/e2sim/ASN1c/SgNBModificationRequired.h b/e2sim/previous/ASN1c/SgNBModificationRequired.h similarity index 100% rename from e2sim/ASN1c/SgNBModificationRequired.h rename to e2sim/previous/ASN1c/SgNBModificationRequired.h diff --git a/e2sim/ASN1c/SgNBReconfigurationComplete.c b/e2sim/previous/ASN1c/SgNBReconfigurationComplete.c similarity index 100% rename from e2sim/ASN1c/SgNBReconfigurationComplete.c rename to e2sim/previous/ASN1c/SgNBReconfigurationComplete.c diff --git a/e2sim/ASN1c/SgNBReconfigurationComplete.h b/e2sim/previous/ASN1c/SgNBReconfigurationComplete.h similarity index 100% rename from e2sim/ASN1c/SgNBReconfigurationComplete.h rename to e2sim/previous/ASN1c/SgNBReconfigurationComplete.h diff --git a/e2sim/ASN1c/SgNBReleaseConfirm.c b/e2sim/previous/ASN1c/SgNBReleaseConfirm.c similarity index 100% rename from e2sim/ASN1c/SgNBReleaseConfirm.c rename to e2sim/previous/ASN1c/SgNBReleaseConfirm.c diff --git a/e2sim/ASN1c/SgNBReleaseConfirm.h b/e2sim/previous/ASN1c/SgNBReleaseConfirm.h similarity index 100% rename from e2sim/ASN1c/SgNBReleaseConfirm.h rename to e2sim/previous/ASN1c/SgNBReleaseConfirm.h diff --git a/e2sim/ASN1c/SgNBReleaseRequest.c b/e2sim/previous/ASN1c/SgNBReleaseRequest.c similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequest.c rename to e2sim/previous/ASN1c/SgNBReleaseRequest.c diff --git a/e2sim/ASN1c/SgNBReleaseRequest.h b/e2sim/previous/ASN1c/SgNBReleaseRequest.h similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequest.h rename to e2sim/previous/ASN1c/SgNBReleaseRequest.h diff --git a/e2sim/ASN1c/SgNBReleaseRequestAcknowledge.c b/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.c similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequestAcknowledge.c rename to e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.c diff --git a/e2sim/ASN1c/SgNBReleaseRequestAcknowledge.h b/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.h similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequestAcknowledge.h rename to e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.h diff --git a/e2sim/ASN1c/SgNBReleaseRequestReject.c b/e2sim/previous/ASN1c/SgNBReleaseRequestReject.c similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequestReject.c rename to e2sim/previous/ASN1c/SgNBReleaseRequestReject.c diff --git a/e2sim/ASN1c/SgNBReleaseRequestReject.h b/e2sim/previous/ASN1c/SgNBReleaseRequestReject.h similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequestReject.h rename to e2sim/previous/ASN1c/SgNBReleaseRequestReject.h diff --git a/e2sim/ASN1c/SgNBReleaseRequired.c b/e2sim/previous/ASN1c/SgNBReleaseRequired.c similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequired.c rename to e2sim/previous/ASN1c/SgNBReleaseRequired.c diff --git a/e2sim/ASN1c/SgNBReleaseRequired.h b/e2sim/previous/ASN1c/SgNBReleaseRequired.h similarity index 100% rename from e2sim/ASN1c/SgNBReleaseRequired.h rename to e2sim/previous/ASN1c/SgNBReleaseRequired.h diff --git a/e2sim/ASN1c/SgNBResourceCoordinationInformation.c b/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.c similarity index 100% rename from e2sim/ASN1c/SgNBResourceCoordinationInformation.c rename to e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.c diff --git a/e2sim/ASN1c/SgNBResourceCoordinationInformation.h b/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.h similarity index 100% rename from e2sim/ASN1c/SgNBResourceCoordinationInformation.h rename to e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.h diff --git a/e2sim/ASN1c/SgNBSecurityKey.c b/e2sim/previous/ASN1c/SgNBSecurityKey.c similarity index 100% rename from e2sim/ASN1c/SgNBSecurityKey.c rename to e2sim/previous/ASN1c/SgNBSecurityKey.c diff --git a/e2sim/ASN1c/SgNBSecurityKey.h b/e2sim/previous/ASN1c/SgNBSecurityKey.h similarity index 100% rename from e2sim/ASN1c/SgNBSecurityKey.h rename to e2sim/previous/ASN1c/SgNBSecurityKey.h diff --git a/e2sim/ASN1c/SgNBtoMeNBContainer.c b/e2sim/previous/ASN1c/SgNBtoMeNBContainer.c similarity index 100% rename from e2sim/ASN1c/SgNBtoMeNBContainer.c rename to e2sim/previous/ASN1c/SgNBtoMeNBContainer.c diff --git a/e2sim/ASN1c/SgNBtoMeNBContainer.h b/e2sim/previous/ASN1c/SgNBtoMeNBContainer.h similarity index 100% rename from e2sim/ASN1c/SgNBtoMeNBContainer.h rename to e2sim/previous/ASN1c/SgNBtoMeNBContainer.h diff --git a/e2sim/ASN1c/SharedResourceType.c b/e2sim/previous/ASN1c/SharedResourceType.c similarity index 100% rename from e2sim/ASN1c/SharedResourceType.c rename to e2sim/previous/ASN1c/SharedResourceType.c diff --git a/e2sim/ASN1c/SharedResourceType.h b/e2sim/previous/ASN1c/SharedResourceType.h similarity index 100% rename from e2sim/ASN1c/SharedResourceType.h rename to e2sim/previous/ASN1c/SharedResourceType.h diff --git a/e2sim/ASN1c/ShortMAC-I.c b/e2sim/previous/ASN1c/ShortMAC-I.c similarity index 100% rename from e2sim/ASN1c/ShortMAC-I.c rename to e2sim/previous/ASN1c/ShortMAC-I.c diff --git a/e2sim/ASN1c/ShortMAC-I.h b/e2sim/previous/ASN1c/ShortMAC-I.h similarity index 100% rename from e2sim/ASN1c/ShortMAC-I.h rename to e2sim/previous/ASN1c/ShortMAC-I.h diff --git a/e2sim/ASN1c/SourceOfUEActivityBehaviourInformation.c b/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.c similarity index 100% rename from e2sim/ASN1c/SourceOfUEActivityBehaviourInformation.c rename to e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.c diff --git a/e2sim/ASN1c/SourceOfUEActivityBehaviourInformation.h b/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.h similarity index 100% rename from e2sim/ASN1c/SourceOfUEActivityBehaviourInformation.h rename to e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.h diff --git a/e2sim/ASN1c/SpecialSubframe-Info.c b/e2sim/previous/ASN1c/SpecialSubframe-Info.c similarity index 100% rename from e2sim/ASN1c/SpecialSubframe-Info.c rename to e2sim/previous/ASN1c/SpecialSubframe-Info.c diff --git a/e2sim/ASN1c/SpecialSubframe-Info.h b/e2sim/previous/ASN1c/SpecialSubframe-Info.h similarity index 100% rename from e2sim/ASN1c/SpecialSubframe-Info.h rename to e2sim/previous/ASN1c/SpecialSubframe-Info.h diff --git a/e2sim/ASN1c/SpecialSubframePatterns.c b/e2sim/previous/ASN1c/SpecialSubframePatterns.c similarity index 100% rename from e2sim/ASN1c/SpecialSubframePatterns.c rename to e2sim/previous/ASN1c/SpecialSubframePatterns.c diff --git a/e2sim/ASN1c/SpecialSubframePatterns.h b/e2sim/previous/ASN1c/SpecialSubframePatterns.h similarity index 100% rename from e2sim/ASN1c/SpecialSubframePatterns.h rename to e2sim/previous/ASN1c/SpecialSubframePatterns.h diff --git a/e2sim/ASN1c/SpectrumSharingGroupID.c b/e2sim/previous/ASN1c/SpectrumSharingGroupID.c similarity index 100% rename from e2sim/ASN1c/SpectrumSharingGroupID.c rename to e2sim/previous/ASN1c/SpectrumSharingGroupID.c diff --git a/e2sim/ASN1c/SpectrumSharingGroupID.h b/e2sim/previous/ASN1c/SpectrumSharingGroupID.h similarity index 100% rename from e2sim/ASN1c/SpectrumSharingGroupID.h rename to e2sim/previous/ASN1c/SpectrumSharingGroupID.h diff --git a/e2sim/ASN1c/SplitSRB.c b/e2sim/previous/ASN1c/SplitSRB.c similarity index 100% rename from e2sim/ASN1c/SplitSRB.c rename to e2sim/previous/ASN1c/SplitSRB.c diff --git a/e2sim/ASN1c/SplitSRB.h b/e2sim/previous/ASN1c/SplitSRB.h similarity index 100% rename from e2sim/ASN1c/SplitSRB.h rename to e2sim/previous/ASN1c/SplitSRB.h diff --git a/e2sim/ASN1c/SplitSRBs.c b/e2sim/previous/ASN1c/SplitSRBs.c similarity index 100% rename from e2sim/ASN1c/SplitSRBs.c rename to e2sim/previous/ASN1c/SplitSRBs.c diff --git a/e2sim/ASN1c/SplitSRBs.h b/e2sim/previous/ASN1c/SplitSRBs.h similarity index 100% rename from e2sim/ASN1c/SplitSRBs.h rename to e2sim/previous/ASN1c/SplitSRBs.h diff --git a/e2sim/ASN1c/Style-ID.c b/e2sim/previous/ASN1c/Style-ID.c similarity index 100% rename from e2sim/ASN1c/Style-ID.c rename to e2sim/previous/ASN1c/Style-ID.c diff --git a/e2sim/ASN1c/Style-ID.h b/e2sim/previous/ASN1c/Style-ID.h similarity index 100% rename from e2sim/ASN1c/Style-ID.h rename to e2sim/previous/ASN1c/Style-ID.h diff --git a/e2sim/ASN1c/SubbandCQI.c b/e2sim/previous/ASN1c/SubbandCQI.c similarity index 100% rename from e2sim/ASN1c/SubbandCQI.c rename to e2sim/previous/ASN1c/SubbandCQI.c diff --git a/e2sim/ASN1c/SubbandCQI.h b/e2sim/previous/ASN1c/SubbandCQI.h similarity index 100% rename from e2sim/ASN1c/SubbandCQI.h rename to e2sim/previous/ASN1c/SubbandCQI.h diff --git a/e2sim/ASN1c/SubbandCQICodeword0.c b/e2sim/previous/ASN1c/SubbandCQICodeword0.c similarity index 100% rename from e2sim/ASN1c/SubbandCQICodeword0.c rename to e2sim/previous/ASN1c/SubbandCQICodeword0.c diff --git a/e2sim/ASN1c/SubbandCQICodeword0.h b/e2sim/previous/ASN1c/SubbandCQICodeword0.h similarity index 100% rename from e2sim/ASN1c/SubbandCQICodeword0.h rename to e2sim/previous/ASN1c/SubbandCQICodeword0.h diff --git a/e2sim/ASN1c/SubbandCQICodeword1.c b/e2sim/previous/ASN1c/SubbandCQICodeword1.c similarity index 100% rename from e2sim/ASN1c/SubbandCQICodeword1.c rename to e2sim/previous/ASN1c/SubbandCQICodeword1.c diff --git a/e2sim/ASN1c/SubbandCQICodeword1.h b/e2sim/previous/ASN1c/SubbandCQICodeword1.h similarity index 100% rename from e2sim/ASN1c/SubbandCQICodeword1.h rename to e2sim/previous/ASN1c/SubbandCQICodeword1.h diff --git a/e2sim/ASN1c/SubbandCQIItem.c b/e2sim/previous/ASN1c/SubbandCQIItem.c similarity index 100% rename from e2sim/ASN1c/SubbandCQIItem.c rename to e2sim/previous/ASN1c/SubbandCQIItem.c diff --git a/e2sim/ASN1c/SubbandCQIItem.h b/e2sim/previous/ASN1c/SubbandCQIItem.h similarity index 100% rename from e2sim/ASN1c/SubbandCQIItem.h rename to e2sim/previous/ASN1c/SubbandCQIItem.h diff --git a/e2sim/ASN1c/SubbandCQIList.c b/e2sim/previous/ASN1c/SubbandCQIList.c similarity index 100% rename from e2sim/ASN1c/SubbandCQIList.c rename to e2sim/previous/ASN1c/SubbandCQIList.c diff --git a/e2sim/ASN1c/SubbandCQIList.h b/e2sim/previous/ASN1c/SubbandCQIList.h similarity index 100% rename from e2sim/ASN1c/SubbandCQIList.h rename to e2sim/previous/ASN1c/SubbandCQIList.h diff --git a/e2sim/ASN1c/SubbandSize.c b/e2sim/previous/ASN1c/SubbandSize.c similarity index 100% rename from e2sim/ASN1c/SubbandSize.c rename to e2sim/previous/ASN1c/SubbandSize.c diff --git a/e2sim/ASN1c/SubbandSize.h b/e2sim/previous/ASN1c/SubbandSize.h similarity index 100% rename from e2sim/ASN1c/SubbandSize.h rename to e2sim/previous/ASN1c/SubbandSize.h diff --git a/e2sim/ASN1c/SubframeAllocation.c b/e2sim/previous/ASN1c/SubframeAllocation.c similarity index 100% rename from e2sim/ASN1c/SubframeAllocation.c rename to e2sim/previous/ASN1c/SubframeAllocation.c diff --git a/e2sim/ASN1c/SubframeAllocation.h b/e2sim/previous/ASN1c/SubframeAllocation.h similarity index 100% rename from e2sim/ASN1c/SubframeAllocation.h rename to e2sim/previous/ASN1c/SubframeAllocation.h diff --git a/e2sim/ASN1c/SubframeAssignment.c b/e2sim/previous/ASN1c/SubframeAssignment.c similarity index 100% rename from e2sim/ASN1c/SubframeAssignment.c rename to e2sim/previous/ASN1c/SubframeAssignment.c diff --git a/e2sim/ASN1c/SubframeAssignment.h b/e2sim/previous/ASN1c/SubframeAssignment.h similarity index 100% rename from e2sim/ASN1c/SubframeAssignment.h rename to e2sim/previous/ASN1c/SubframeAssignment.h diff --git a/e2sim/ASN1c/SubframeType.c b/e2sim/previous/ASN1c/SubframeType.c similarity index 100% rename from e2sim/ASN1c/SubframeType.c rename to e2sim/previous/ASN1c/SubframeType.c diff --git a/e2sim/ASN1c/SubframeType.h b/e2sim/previous/ASN1c/SubframeType.h similarity index 100% rename from e2sim/ASN1c/SubframeType.h rename to e2sim/previous/ASN1c/SubframeType.h diff --git a/e2sim/ASN1c/SubscriberProfileIDforRFP.c b/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.c similarity index 100% rename from e2sim/ASN1c/SubscriberProfileIDforRFP.c rename to e2sim/previous/ASN1c/SubscriberProfileIDforRFP.c diff --git a/e2sim/ASN1c/SubscriberProfileIDforRFP.h b/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.h similarity index 100% rename from e2sim/ASN1c/SubscriberProfileIDforRFP.h rename to e2sim/previous/ASN1c/SubscriberProfileIDforRFP.h diff --git a/e2sim/ASN1c/Subscription-Based-UE-DifferentiationInfo.c b/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.c similarity index 100% rename from e2sim/ASN1c/Subscription-Based-UE-DifferentiationInfo.c rename to e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.c diff --git a/e2sim/ASN1c/Subscription-Based-UE-DifferentiationInfo.h b/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.h similarity index 100% rename from e2sim/ASN1c/Subscription-Based-UE-DifferentiationInfo.h rename to e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.h diff --git a/e2sim/ASN1c/SuccessfulOutcome.c b/e2sim/previous/ASN1c/SuccessfulOutcome.c similarity index 100% rename from e2sim/ASN1c/SuccessfulOutcome.c rename to e2sim/previous/ASN1c/SuccessfulOutcome.c diff --git a/e2sim/ASN1c/SuccessfulOutcome.h b/e2sim/previous/ASN1c/SuccessfulOutcome.h similarity index 100% rename from e2sim/ASN1c/SuccessfulOutcome.h rename to e2sim/previous/ASN1c/SuccessfulOutcome.h diff --git a/e2sim/ASN1c/SupportedSULFreqBandItem.c b/e2sim/previous/ASN1c/SupportedSULFreqBandItem.c similarity index 100% rename from e2sim/ASN1c/SupportedSULFreqBandItem.c rename to e2sim/previous/ASN1c/SupportedSULFreqBandItem.c diff --git a/e2sim/ASN1c/SupportedSULFreqBandItem.h b/e2sim/previous/ASN1c/SupportedSULFreqBandItem.h similarity index 100% rename from e2sim/ASN1c/SupportedSULFreqBandItem.h rename to e2sim/previous/ASN1c/SupportedSULFreqBandItem.h diff --git a/e2sim/ASN1c/TABasedMDT.c b/e2sim/previous/ASN1c/TABasedMDT.c similarity index 100% rename from e2sim/ASN1c/TABasedMDT.c rename to e2sim/previous/ASN1c/TABasedMDT.c diff --git a/e2sim/ASN1c/TABasedMDT.h b/e2sim/previous/ASN1c/TABasedMDT.h similarity index 100% rename from e2sim/ASN1c/TABasedMDT.h rename to e2sim/previous/ASN1c/TABasedMDT.h diff --git a/e2sim/ASN1c/TABasedQMC.c b/e2sim/previous/ASN1c/TABasedQMC.c similarity index 100% rename from e2sim/ASN1c/TABasedQMC.c rename to e2sim/previous/ASN1c/TABasedQMC.c diff --git a/e2sim/ASN1c/TABasedQMC.h b/e2sim/previous/ASN1c/TABasedQMC.h similarity index 100% rename from e2sim/ASN1c/TABasedQMC.h rename to e2sim/previous/ASN1c/TABasedQMC.h diff --git a/e2sim/ASN1c/TAC.c b/e2sim/previous/ASN1c/TAC.c similarity index 100% rename from e2sim/ASN1c/TAC.c rename to e2sim/previous/ASN1c/TAC.c diff --git a/e2sim/ASN1c/TAC.h b/e2sim/previous/ASN1c/TAC.h similarity index 100% rename from e2sim/ASN1c/TAC.h rename to e2sim/previous/ASN1c/TAC.h diff --git a/e2sim/ASN1c/TAI-Item.c b/e2sim/previous/ASN1c/TAI-Item.c similarity index 100% rename from e2sim/ASN1c/TAI-Item.c rename to e2sim/previous/ASN1c/TAI-Item.c diff --git a/e2sim/ASN1c/TAI-Item.h b/e2sim/previous/ASN1c/TAI-Item.h similarity index 100% rename from e2sim/ASN1c/TAI-Item.h rename to e2sim/previous/ASN1c/TAI-Item.h diff --git a/e2sim/ASN1c/TAIBasedMDT.c b/e2sim/previous/ASN1c/TAIBasedMDT.c similarity index 100% rename from e2sim/ASN1c/TAIBasedMDT.c rename to e2sim/previous/ASN1c/TAIBasedMDT.c diff --git a/e2sim/ASN1c/TAIBasedMDT.h b/e2sim/previous/ASN1c/TAIBasedMDT.h similarity index 100% rename from e2sim/ASN1c/TAIBasedMDT.h rename to e2sim/previous/ASN1c/TAIBasedMDT.h diff --git a/e2sim/ASN1c/TAIBasedQMC.c b/e2sim/previous/ASN1c/TAIBasedQMC.c similarity index 100% rename from e2sim/ASN1c/TAIBasedQMC.c rename to e2sim/previous/ASN1c/TAIBasedQMC.c diff --git a/e2sim/ASN1c/TAIBasedQMC.h b/e2sim/previous/ASN1c/TAIBasedQMC.h similarity index 100% rename from e2sim/ASN1c/TAIBasedQMC.h rename to e2sim/previous/ASN1c/TAIBasedQMC.h diff --git a/e2sim/ASN1c/TAIListforMDT.c b/e2sim/previous/ASN1c/TAIListforMDT.c similarity index 100% rename from e2sim/ASN1c/TAIListforMDT.c rename to e2sim/previous/ASN1c/TAIListforMDT.c diff --git a/e2sim/ASN1c/TAIListforMDT.h b/e2sim/previous/ASN1c/TAIListforMDT.h similarity index 100% rename from e2sim/ASN1c/TAIListforMDT.h rename to e2sim/previous/ASN1c/TAIListforMDT.h diff --git a/e2sim/ASN1c/TAIListforQMC.c b/e2sim/previous/ASN1c/TAIListforQMC.c similarity index 100% rename from e2sim/ASN1c/TAIListforQMC.c rename to e2sim/previous/ASN1c/TAIListforQMC.c diff --git a/e2sim/ASN1c/TAIListforQMC.h b/e2sim/previous/ASN1c/TAIListforQMC.h similarity index 100% rename from e2sim/ASN1c/TAIListforQMC.h rename to e2sim/previous/ASN1c/TAIListforQMC.h diff --git a/e2sim/ASN1c/TAListforMDT.c b/e2sim/previous/ASN1c/TAListforMDT.c similarity index 100% rename from e2sim/ASN1c/TAListforMDT.c rename to e2sim/previous/ASN1c/TAListforMDT.c diff --git a/e2sim/ASN1c/TAListforMDT.h b/e2sim/previous/ASN1c/TAListforMDT.h similarity index 100% rename from e2sim/ASN1c/TAListforMDT.h rename to e2sim/previous/ASN1c/TAListforMDT.h diff --git a/e2sim/ASN1c/TAListforQMC.c b/e2sim/previous/ASN1c/TAListforQMC.c similarity index 100% rename from e2sim/ASN1c/TAListforQMC.c rename to e2sim/previous/ASN1c/TAListforQMC.c diff --git a/e2sim/ASN1c/TAListforQMC.h b/e2sim/previous/ASN1c/TAListforQMC.h similarity index 100% rename from e2sim/ASN1c/TAListforQMC.h rename to e2sim/previous/ASN1c/TAListforQMC.h diff --git a/e2sim/ASN1c/TDD-Info.c b/e2sim/previous/ASN1c/TDD-Info.c similarity index 100% rename from e2sim/ASN1c/TDD-Info.c rename to e2sim/previous/ASN1c/TDD-Info.c diff --git a/e2sim/ASN1c/TDD-Info.h b/e2sim/previous/ASN1c/TDD-Info.h similarity index 100% rename from e2sim/ASN1c/TDD-Info.h rename to e2sim/previous/ASN1c/TDD-Info.h diff --git a/e2sim/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c b/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c similarity index 100% rename from e2sim/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c rename to e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c diff --git a/e2sim/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h b/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h similarity index 100% rename from e2sim/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h rename to e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h diff --git a/e2sim/ASN1c/TDD-InfoServedNRCell-Information.c b/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.c similarity index 100% rename from e2sim/ASN1c/TDD-InfoServedNRCell-Information.c rename to e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.c diff --git a/e2sim/ASN1c/TDD-InfoServedNRCell-Information.h b/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.h similarity index 100% rename from e2sim/ASN1c/TDD-InfoServedNRCell-Information.h rename to e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.h diff --git a/e2sim/ASN1c/TargetCellInUTRAN.c b/e2sim/previous/ASN1c/TargetCellInUTRAN.c similarity index 100% rename from e2sim/ASN1c/TargetCellInUTRAN.c rename to e2sim/previous/ASN1c/TargetCellInUTRAN.c diff --git a/e2sim/ASN1c/TargetCellInUTRAN.h b/e2sim/previous/ASN1c/TargetCellInUTRAN.h similarity index 100% rename from e2sim/ASN1c/TargetCellInUTRAN.h rename to e2sim/previous/ASN1c/TargetCellInUTRAN.h diff --git a/e2sim/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c b/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c similarity index 100% rename from e2sim/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c rename to e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c diff --git a/e2sim/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h b/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h similarity index 100% rename from e2sim/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h rename to e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h diff --git a/e2sim/ASN1c/Threshold-RSRP.c b/e2sim/previous/ASN1c/Threshold-RSRP.c similarity index 100% rename from e2sim/ASN1c/Threshold-RSRP.c rename to e2sim/previous/ASN1c/Threshold-RSRP.c diff --git a/e2sim/ASN1c/Threshold-RSRP.h b/e2sim/previous/ASN1c/Threshold-RSRP.h similarity index 100% rename from e2sim/ASN1c/Threshold-RSRP.h rename to e2sim/previous/ASN1c/Threshold-RSRP.h diff --git a/e2sim/ASN1c/Threshold-RSRQ.c b/e2sim/previous/ASN1c/Threshold-RSRQ.c similarity index 100% rename from e2sim/ASN1c/Threshold-RSRQ.c rename to e2sim/previous/ASN1c/Threshold-RSRQ.c diff --git a/e2sim/ASN1c/Threshold-RSRQ.h b/e2sim/previous/ASN1c/Threshold-RSRQ.h similarity index 100% rename from e2sim/ASN1c/Threshold-RSRQ.h rename to e2sim/previous/ASN1c/Threshold-RSRQ.h diff --git a/e2sim/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c b/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c similarity index 100% rename from e2sim/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c rename to e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c diff --git a/e2sim/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h b/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h similarity index 100% rename from e2sim/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h rename to e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h diff --git a/e2sim/ASN1c/Time-UE-StayedInCell.c b/e2sim/previous/ASN1c/Time-UE-StayedInCell.c similarity index 100% rename from e2sim/ASN1c/Time-UE-StayedInCell.c rename to e2sim/previous/ASN1c/Time-UE-StayedInCell.c diff --git a/e2sim/ASN1c/Time-UE-StayedInCell.h b/e2sim/previous/ASN1c/Time-UE-StayedInCell.h similarity index 100% rename from e2sim/ASN1c/Time-UE-StayedInCell.h rename to e2sim/previous/ASN1c/Time-UE-StayedInCell.h diff --git a/e2sim/ASN1c/TimeStamp.c b/e2sim/previous/ASN1c/TimeStamp.c similarity index 100% rename from e2sim/ASN1c/TimeStamp.c rename to e2sim/previous/ASN1c/TimeStamp.c diff --git a/e2sim/ASN1c/TimeStamp.h b/e2sim/previous/ASN1c/TimeStamp.h similarity index 100% rename from e2sim/ASN1c/TimeStamp.h rename to e2sim/previous/ASN1c/TimeStamp.h diff --git a/e2sim/ASN1c/TimeToWait.c b/e2sim/previous/ASN1c/TimeToWait.c similarity index 100% rename from e2sim/ASN1c/TimeToWait.c rename to e2sim/previous/ASN1c/TimeToWait.c diff --git a/e2sim/ASN1c/TimeToWait.h b/e2sim/previous/ASN1c/TimeToWait.h similarity index 100% rename from e2sim/ASN1c/TimeToWait.h rename to e2sim/previous/ASN1c/TimeToWait.h diff --git a/e2sim/ASN1c/TraceActivation.c b/e2sim/previous/ASN1c/TraceActivation.c similarity index 100% rename from e2sim/ASN1c/TraceActivation.c rename to e2sim/previous/ASN1c/TraceActivation.c diff --git a/e2sim/ASN1c/TraceActivation.h b/e2sim/previous/ASN1c/TraceActivation.h similarity index 100% rename from e2sim/ASN1c/TraceActivation.h rename to e2sim/previous/ASN1c/TraceActivation.h diff --git a/e2sim/ASN1c/TraceCollectionEntityIPAddress.c b/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.c similarity index 100% rename from e2sim/ASN1c/TraceCollectionEntityIPAddress.c rename to e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.c diff --git a/e2sim/ASN1c/TraceCollectionEntityIPAddress.h b/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.h similarity index 100% rename from e2sim/ASN1c/TraceCollectionEntityIPAddress.h rename to e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.h diff --git a/e2sim/ASN1c/TraceDepth.c b/e2sim/previous/ASN1c/TraceDepth.c similarity index 100% rename from e2sim/ASN1c/TraceDepth.c rename to e2sim/previous/ASN1c/TraceDepth.c diff --git a/e2sim/ASN1c/TraceDepth.h b/e2sim/previous/ASN1c/TraceDepth.h similarity index 100% rename from e2sim/ASN1c/TraceDepth.h rename to e2sim/previous/ASN1c/TraceDepth.h diff --git a/e2sim/ASN1c/Transmission-Bandwidth.c b/e2sim/previous/ASN1c/Transmission-Bandwidth.c similarity index 100% rename from e2sim/ASN1c/Transmission-Bandwidth.c rename to e2sim/previous/ASN1c/Transmission-Bandwidth.c diff --git a/e2sim/ASN1c/Transmission-Bandwidth.h b/e2sim/previous/ASN1c/Transmission-Bandwidth.h similarity index 100% rename from e2sim/ASN1c/Transmission-Bandwidth.h rename to e2sim/previous/ASN1c/Transmission-Bandwidth.h diff --git a/e2sim/ASN1c/TransportLayerAddress.c b/e2sim/previous/ASN1c/TransportLayerAddress.c similarity index 100% rename from e2sim/ASN1c/TransportLayerAddress.c rename to e2sim/previous/ASN1c/TransportLayerAddress.c diff --git a/e2sim/ASN1c/TransportLayerAddress.h b/e2sim/previous/ASN1c/TransportLayerAddress.h similarity index 100% rename from e2sim/ASN1c/TransportLayerAddress.h rename to e2sim/previous/ASN1c/TransportLayerAddress.h diff --git a/e2sim/ASN1c/TriggeringMessage.c b/e2sim/previous/ASN1c/TriggeringMessage.c similarity index 100% rename from e2sim/ASN1c/TriggeringMessage.c rename to e2sim/previous/ASN1c/TriggeringMessage.c diff --git a/e2sim/ASN1c/TriggeringMessage.h b/e2sim/previous/ASN1c/TriggeringMessage.h similarity index 100% rename from e2sim/ASN1c/TriggeringMessage.h rename to e2sim/previous/ASN1c/TriggeringMessage.h diff --git a/e2sim/ASN1c/TunnelInformation.c b/e2sim/previous/ASN1c/TunnelInformation.c similarity index 100% rename from e2sim/ASN1c/TunnelInformation.c rename to e2sim/previous/ASN1c/TunnelInformation.c diff --git a/e2sim/ASN1c/TunnelInformation.h b/e2sim/previous/ASN1c/TunnelInformation.h similarity index 100% rename from e2sim/ASN1c/TunnelInformation.h rename to e2sim/previous/ASN1c/TunnelInformation.h diff --git a/e2sim/ASN1c/TypeOfError.c b/e2sim/previous/ASN1c/TypeOfError.c similarity index 100% rename from e2sim/ASN1c/TypeOfError.c rename to e2sim/previous/ASN1c/TypeOfError.c diff --git a/e2sim/ASN1c/TypeOfError.h b/e2sim/previous/ASN1c/TypeOfError.h similarity index 100% rename from e2sim/ASN1c/TypeOfError.h rename to e2sim/previous/ASN1c/TypeOfError.h diff --git a/e2sim/ASN1c/TypeOfMessage.c b/e2sim/previous/ASN1c/TypeOfMessage.c similarity index 100% rename from e2sim/ASN1c/TypeOfMessage.c rename to e2sim/previous/ASN1c/TypeOfMessage.c diff --git a/e2sim/ASN1c/TypeOfMessage.h b/e2sim/previous/ASN1c/TypeOfMessage.h similarity index 100% rename from e2sim/ASN1c/TypeOfMessage.h rename to e2sim/previous/ASN1c/TypeOfMessage.h diff --git a/e2sim/ASN1c/UE-ContextInformation-SgNBModReq.c b/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.c similarity index 100% rename from e2sim/ASN1c/UE-ContextInformation-SgNBModReq.c rename to e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.c diff --git a/e2sim/ASN1c/UE-ContextInformation-SgNBModReq.h b/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.h similarity index 100% rename from e2sim/ASN1c/UE-ContextInformation-SgNBModReq.h rename to e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.h diff --git a/e2sim/ASN1c/UE-ContextInformation.c b/e2sim/previous/ASN1c/UE-ContextInformation.c similarity index 100% rename from e2sim/ASN1c/UE-ContextInformation.c rename to e2sim/previous/ASN1c/UE-ContextInformation.c diff --git a/e2sim/ASN1c/UE-ContextInformation.h b/e2sim/previous/ASN1c/UE-ContextInformation.h similarity index 100% rename from e2sim/ASN1c/UE-ContextInformation.h rename to e2sim/previous/ASN1c/UE-ContextInformation.h diff --git a/e2sim/ASN1c/UE-ContextInformationRetrieve.c b/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.c similarity index 100% rename from e2sim/ASN1c/UE-ContextInformationRetrieve.c rename to e2sim/previous/ASN1c/UE-ContextInformationRetrieve.c diff --git a/e2sim/ASN1c/UE-ContextInformationRetrieve.h b/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.h similarity index 100% rename from e2sim/ASN1c/UE-ContextInformationRetrieve.h rename to e2sim/previous/ASN1c/UE-ContextInformationRetrieve.h diff --git a/e2sim/ASN1c/UE-ContextInformationSeNBModReq.c b/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.c similarity index 100% rename from e2sim/ASN1c/UE-ContextInformationSeNBModReq.c rename to e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.c diff --git a/e2sim/ASN1c/UE-ContextInformationSeNBModReq.h b/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.h similarity index 100% rename from e2sim/ASN1c/UE-ContextInformationSeNBModReq.h rename to e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.h diff --git a/e2sim/ASN1c/UE-ContextKeptIndicator.c b/e2sim/previous/ASN1c/UE-ContextKeptIndicator.c similarity index 100% rename from e2sim/ASN1c/UE-ContextKeptIndicator.c rename to e2sim/previous/ASN1c/UE-ContextKeptIndicator.c diff --git a/e2sim/ASN1c/UE-ContextKeptIndicator.h b/e2sim/previous/ASN1c/UE-ContextKeptIndicator.h similarity index 100% rename from e2sim/ASN1c/UE-ContextKeptIndicator.h rename to e2sim/previous/ASN1c/UE-ContextKeptIndicator.h diff --git a/e2sim/ASN1c/UE-ContextReferenceAtSeNB.c b/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.c similarity index 100% rename from e2sim/ASN1c/UE-ContextReferenceAtSeNB.c rename to e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.c diff --git a/e2sim/ASN1c/UE-ContextReferenceAtSeNB.h b/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.h similarity index 100% rename from e2sim/ASN1c/UE-ContextReferenceAtSeNB.h rename to e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.h diff --git a/e2sim/ASN1c/UE-ContextReferenceAtSgNB.c b/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.c similarity index 100% rename from e2sim/ASN1c/UE-ContextReferenceAtSgNB.c rename to e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.c diff --git a/e2sim/ASN1c/UE-ContextReferenceAtSgNB.h b/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.h similarity index 100% rename from e2sim/ASN1c/UE-ContextReferenceAtSgNB.h rename to e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.h diff --git a/e2sim/ASN1c/UE-ContextReferenceAtWT.c b/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c similarity index 100% rename from e2sim/ASN1c/UE-ContextReferenceAtWT.c rename to e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c diff --git a/e2sim/ASN1c/UE-ContextReferenceAtWT.h b/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h similarity index 100% rename from e2sim/ASN1c/UE-ContextReferenceAtWT.h rename to e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h diff --git a/e2sim/ASN1c/UE-HistoryInformation.c b/e2sim/previous/ASN1c/UE-HistoryInformation.c similarity index 100% rename from e2sim/ASN1c/UE-HistoryInformation.c rename to e2sim/previous/ASN1c/UE-HistoryInformation.c diff --git a/e2sim/ASN1c/UE-HistoryInformation.h b/e2sim/previous/ASN1c/UE-HistoryInformation.h similarity index 100% rename from e2sim/ASN1c/UE-HistoryInformation.h rename to e2sim/previous/ASN1c/UE-HistoryInformation.h diff --git a/e2sim/ASN1c/UE-HistoryInformationFromTheUE.c b/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.c similarity index 100% rename from e2sim/ASN1c/UE-HistoryInformationFromTheUE.c rename to e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.c diff --git a/e2sim/ASN1c/UE-HistoryInformationFromTheUE.h b/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.h similarity index 100% rename from e2sim/ASN1c/UE-HistoryInformationFromTheUE.h rename to e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.h diff --git a/e2sim/ASN1c/UE-RLF-Report-Container-for-extended-bands.c b/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.c similarity index 100% rename from e2sim/ASN1c/UE-RLF-Report-Container-for-extended-bands.c rename to e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.c diff --git a/e2sim/ASN1c/UE-RLF-Report-Container-for-extended-bands.h b/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.h similarity index 100% rename from e2sim/ASN1c/UE-RLF-Report-Container-for-extended-bands.h rename to e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.h diff --git a/e2sim/ASN1c/UE-RLF-Report-Container.c b/e2sim/previous/ASN1c/UE-RLF-Report-Container.c similarity index 100% rename from e2sim/ASN1c/UE-RLF-Report-Container.c rename to e2sim/previous/ASN1c/UE-RLF-Report-Container.c diff --git a/e2sim/ASN1c/UE-RLF-Report-Container.h b/e2sim/previous/ASN1c/UE-RLF-Report-Container.h similarity index 100% rename from e2sim/ASN1c/UE-RLF-Report-Container.h rename to e2sim/previous/ASN1c/UE-RLF-Report-Container.h diff --git a/e2sim/ASN1c/UE-S1AP-ID.c b/e2sim/previous/ASN1c/UE-S1AP-ID.c similarity index 100% rename from e2sim/ASN1c/UE-S1AP-ID.c rename to e2sim/previous/ASN1c/UE-S1AP-ID.c diff --git a/e2sim/ASN1c/UE-S1AP-ID.h b/e2sim/previous/ASN1c/UE-S1AP-ID.h similarity index 100% rename from e2sim/ASN1c/UE-S1AP-ID.h rename to e2sim/previous/ASN1c/UE-S1AP-ID.h diff --git a/e2sim/ASN1c/UE-X2AP-ID-Extension.c b/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c similarity index 100% rename from e2sim/ASN1c/UE-X2AP-ID-Extension.c rename to e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c diff --git a/e2sim/ASN1c/UE-X2AP-ID-Extension.h b/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h similarity index 100% rename from e2sim/ASN1c/UE-X2AP-ID-Extension.h rename to e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h diff --git a/e2sim/ASN1c/UE-X2AP-ID.c b/e2sim/previous/ASN1c/UE-X2AP-ID.c similarity index 100% rename from e2sim/ASN1c/UE-X2AP-ID.c rename to e2sim/previous/ASN1c/UE-X2AP-ID.c diff --git a/e2sim/ASN1c/UE-X2AP-ID.h b/e2sim/previous/ASN1c/UE-X2AP-ID.h similarity index 100% rename from e2sim/ASN1c/UE-X2AP-ID.h rename to e2sim/previous/ASN1c/UE-X2AP-ID.h diff --git a/e2sim/ASN1c/UEAggregateMaximumBitRate.c b/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.c similarity index 100% rename from e2sim/ASN1c/UEAggregateMaximumBitRate.c rename to e2sim/previous/ASN1c/UEAggregateMaximumBitRate.c diff --git a/e2sim/ASN1c/UEAggregateMaximumBitRate.h b/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.h similarity index 100% rename from e2sim/ASN1c/UEAggregateMaximumBitRate.h rename to e2sim/previous/ASN1c/UEAggregateMaximumBitRate.h diff --git a/e2sim/ASN1c/UEAppLayerMeasConfig.c b/e2sim/previous/ASN1c/UEAppLayerMeasConfig.c similarity index 100% rename from e2sim/ASN1c/UEAppLayerMeasConfig.c rename to e2sim/previous/ASN1c/UEAppLayerMeasConfig.c diff --git a/e2sim/ASN1c/UEAppLayerMeasConfig.h b/e2sim/previous/ASN1c/UEAppLayerMeasConfig.h similarity index 100% rename from e2sim/ASN1c/UEAppLayerMeasConfig.h rename to e2sim/previous/ASN1c/UEAppLayerMeasConfig.h diff --git a/e2sim/ASN1c/UEContextRelease.c b/e2sim/previous/ASN1c/UEContextRelease.c similarity index 100% rename from e2sim/ASN1c/UEContextRelease.c rename to e2sim/previous/ASN1c/UEContextRelease.c diff --git a/e2sim/ASN1c/UEContextRelease.h b/e2sim/previous/ASN1c/UEContextRelease.h similarity index 100% rename from e2sim/ASN1c/UEContextRelease.h rename to e2sim/previous/ASN1c/UEContextRelease.h diff --git a/e2sim/ASN1c/UEID.c b/e2sim/previous/ASN1c/UEID.c similarity index 100% rename from e2sim/ASN1c/UEID.c rename to e2sim/previous/ASN1c/UEID.c diff --git a/e2sim/ASN1c/UEID.h b/e2sim/previous/ASN1c/UEID.h similarity index 100% rename from e2sim/ASN1c/UEID.h rename to e2sim/previous/ASN1c/UEID.h diff --git a/e2sim/ASN1c/UENRMeasurement.c b/e2sim/previous/ASN1c/UENRMeasurement.c similarity index 100% rename from e2sim/ASN1c/UENRMeasurement.c rename to e2sim/previous/ASN1c/UENRMeasurement.c diff --git a/e2sim/ASN1c/UENRMeasurement.h b/e2sim/previous/ASN1c/UENRMeasurement.h similarity index 100% rename from e2sim/ASN1c/UENRMeasurement.h rename to e2sim/previous/ASN1c/UENRMeasurement.h diff --git a/e2sim/ASN1c/UESecurityCapabilities.c b/e2sim/previous/ASN1c/UESecurityCapabilities.c similarity index 100% rename from e2sim/ASN1c/UESecurityCapabilities.c rename to e2sim/previous/ASN1c/UESecurityCapabilities.c diff --git a/e2sim/ASN1c/UESecurityCapabilities.h b/e2sim/previous/ASN1c/UESecurityCapabilities.h similarity index 100% rename from e2sim/ASN1c/UESecurityCapabilities.h rename to e2sim/previous/ASN1c/UESecurityCapabilities.h diff --git a/e2sim/ASN1c/UESidelinkAggregateMaximumBitRate.c b/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.c similarity index 100% rename from e2sim/ASN1c/UESidelinkAggregateMaximumBitRate.c rename to e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.c diff --git a/e2sim/ASN1c/UESidelinkAggregateMaximumBitRate.h b/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.h similarity index 100% rename from e2sim/ASN1c/UESidelinkAggregateMaximumBitRate.h rename to e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.h diff --git a/e2sim/ASN1c/UEsToBeResetList-Item.c b/e2sim/previous/ASN1c/UEsToBeResetList-Item.c similarity index 100% rename from e2sim/ASN1c/UEsToBeResetList-Item.c rename to e2sim/previous/ASN1c/UEsToBeResetList-Item.c diff --git a/e2sim/ASN1c/UEsToBeResetList-Item.h b/e2sim/previous/ASN1c/UEsToBeResetList-Item.h similarity index 100% rename from e2sim/ASN1c/UEsToBeResetList-Item.h rename to e2sim/previous/ASN1c/UEsToBeResetList-Item.h diff --git a/e2sim/ASN1c/UEsToBeResetList.c b/e2sim/previous/ASN1c/UEsToBeResetList.c similarity index 100% rename from e2sim/ASN1c/UEsToBeResetList.c rename to e2sim/previous/ASN1c/UEsToBeResetList.c diff --git a/e2sim/ASN1c/UEsToBeResetList.h b/e2sim/previous/ASN1c/UEsToBeResetList.h similarity index 100% rename from e2sim/ASN1c/UEsToBeResetList.h rename to e2sim/previous/ASN1c/UEsToBeResetList.h diff --git a/e2sim/ASN1c/UL-GBR-PRB-usage.c b/e2sim/previous/ASN1c/UL-GBR-PRB-usage.c similarity index 100% rename from e2sim/ASN1c/UL-GBR-PRB-usage.c rename to e2sim/previous/ASN1c/UL-GBR-PRB-usage.c diff --git a/e2sim/ASN1c/UL-GBR-PRB-usage.h b/e2sim/previous/ASN1c/UL-GBR-PRB-usage.h similarity index 100% rename from e2sim/ASN1c/UL-GBR-PRB-usage.h rename to e2sim/previous/ASN1c/UL-GBR-PRB-usage.h diff --git a/e2sim/ASN1c/UL-HighInterferenceIndication.c b/e2sim/previous/ASN1c/UL-HighInterferenceIndication.c similarity index 100% rename from e2sim/ASN1c/UL-HighInterferenceIndication.c rename to e2sim/previous/ASN1c/UL-HighInterferenceIndication.c diff --git a/e2sim/ASN1c/UL-HighInterferenceIndication.h b/e2sim/previous/ASN1c/UL-HighInterferenceIndication.h similarity index 100% rename from e2sim/ASN1c/UL-HighInterferenceIndication.h rename to e2sim/previous/ASN1c/UL-HighInterferenceIndication.h diff --git a/e2sim/ASN1c/UL-HighInterferenceIndicationInfo-Item.c b/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.c similarity index 100% rename from e2sim/ASN1c/UL-HighInterferenceIndicationInfo-Item.c rename to e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.c diff --git a/e2sim/ASN1c/UL-HighInterferenceIndicationInfo-Item.h b/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.h similarity index 100% rename from e2sim/ASN1c/UL-HighInterferenceIndicationInfo-Item.h rename to e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.h diff --git a/e2sim/ASN1c/UL-HighInterferenceIndicationInfo.c b/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.c similarity index 100% rename from e2sim/ASN1c/UL-HighInterferenceIndicationInfo.c rename to e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.c diff --git a/e2sim/ASN1c/UL-HighInterferenceIndicationInfo.h b/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.h similarity index 100% rename from e2sim/ASN1c/UL-HighInterferenceIndicationInfo.h rename to e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.h diff --git a/e2sim/ASN1c/UL-InterferenceOverloadIndication-Item.c b/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.c similarity index 100% rename from e2sim/ASN1c/UL-InterferenceOverloadIndication-Item.c rename to e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.c diff --git a/e2sim/ASN1c/UL-InterferenceOverloadIndication-Item.h b/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.h similarity index 100% rename from e2sim/ASN1c/UL-InterferenceOverloadIndication-Item.h rename to e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.h diff --git a/e2sim/ASN1c/UL-InterferenceOverloadIndication.c b/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.c similarity index 100% rename from e2sim/ASN1c/UL-InterferenceOverloadIndication.c rename to e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.c diff --git a/e2sim/ASN1c/UL-InterferenceOverloadIndication.h b/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.h similarity index 100% rename from e2sim/ASN1c/UL-InterferenceOverloadIndication.h rename to e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.h diff --git a/e2sim/ASN1c/UL-Total-PRB-usage.c b/e2sim/previous/ASN1c/UL-Total-PRB-usage.c similarity index 100% rename from e2sim/ASN1c/UL-Total-PRB-usage.c rename to e2sim/previous/ASN1c/UL-Total-PRB-usage.c diff --git a/e2sim/ASN1c/UL-Total-PRB-usage.h b/e2sim/previous/ASN1c/UL-Total-PRB-usage.h similarity index 100% rename from e2sim/ASN1c/UL-Total-PRB-usage.h rename to e2sim/previous/ASN1c/UL-Total-PRB-usage.h diff --git a/e2sim/ASN1c/UL-UE-Configuration.c b/e2sim/previous/ASN1c/UL-UE-Configuration.c similarity index 100% rename from e2sim/ASN1c/UL-UE-Configuration.c rename to e2sim/previous/ASN1c/UL-UE-Configuration.c diff --git a/e2sim/ASN1c/UL-UE-Configuration.h b/e2sim/previous/ASN1c/UL-UE-Configuration.h similarity index 100% rename from e2sim/ASN1c/UL-UE-Configuration.h rename to e2sim/previous/ASN1c/UL-UE-Configuration.h diff --git a/e2sim/ASN1c/UL-non-GBR-PRB-usage.c b/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c similarity index 100% rename from e2sim/ASN1c/UL-non-GBR-PRB-usage.c rename to e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c diff --git a/e2sim/ASN1c/UL-non-GBR-PRB-usage.h b/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h similarity index 100% rename from e2sim/ASN1c/UL-non-GBR-PRB-usage.h rename to e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h diff --git a/e2sim/ASN1c/UL-scheduling-PDCCH-CCE-usage.c b/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c similarity index 100% rename from e2sim/ASN1c/UL-scheduling-PDCCH-CCE-usage.c rename to e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c diff --git a/e2sim/ASN1c/UL-scheduling-PDCCH-CCE-usage.h b/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h similarity index 100% rename from e2sim/ASN1c/UL-scheduling-PDCCH-CCE-usage.h rename to e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h diff --git a/e2sim/ASN1c/ULConfiguration.c b/e2sim/previous/ASN1c/ULConfiguration.c similarity index 100% rename from e2sim/ASN1c/ULConfiguration.c rename to e2sim/previous/ASN1c/ULConfiguration.c diff --git a/e2sim/ASN1c/ULConfiguration.h b/e2sim/previous/ASN1c/ULConfiguration.h similarity index 100% rename from e2sim/ASN1c/ULConfiguration.h rename to e2sim/previous/ASN1c/ULConfiguration.h diff --git a/e2sim/ASN1c/ULOnlySharing.c b/e2sim/previous/ASN1c/ULOnlySharing.c similarity index 100% rename from e2sim/ASN1c/ULOnlySharing.c rename to e2sim/previous/ASN1c/ULOnlySharing.c diff --git a/e2sim/ASN1c/ULOnlySharing.h b/e2sim/previous/ASN1c/ULOnlySharing.h similarity index 100% rename from e2sim/ASN1c/ULOnlySharing.h rename to e2sim/previous/ASN1c/ULOnlySharing.h diff --git a/e2sim/ASN1c/ULResourceBitmapULandDLSharing.c b/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.c similarity index 100% rename from e2sim/ASN1c/ULResourceBitmapULandDLSharing.c rename to e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.c diff --git a/e2sim/ASN1c/ULResourceBitmapULandDLSharing.h b/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.h similarity index 100% rename from e2sim/ASN1c/ULResourceBitmapULandDLSharing.h rename to e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.h diff --git a/e2sim/ASN1c/ULResourcesULandDLSharing.c b/e2sim/previous/ASN1c/ULResourcesULandDLSharing.c similarity index 100% rename from e2sim/ASN1c/ULResourcesULandDLSharing.c rename to e2sim/previous/ASN1c/ULResourcesULandDLSharing.c diff --git a/e2sim/ASN1c/ULResourcesULandDLSharing.h b/e2sim/previous/ASN1c/ULResourcesULandDLSharing.h similarity index 100% rename from e2sim/ASN1c/ULResourcesULandDLSharing.h rename to e2sim/previous/ASN1c/ULResourcesULandDLSharing.h diff --git a/e2sim/ASN1c/ULandDLSharing.c b/e2sim/previous/ASN1c/ULandDLSharing.c similarity index 100% rename from e2sim/ASN1c/ULandDLSharing.c rename to e2sim/previous/ASN1c/ULandDLSharing.c diff --git a/e2sim/ASN1c/ULandDLSharing.h b/e2sim/previous/ASN1c/ULandDLSharing.h similarity index 100% rename from e2sim/ASN1c/ULandDLSharing.h rename to e2sim/previous/ASN1c/ULandDLSharing.h diff --git a/e2sim/ASN1c/UnsuccessfulOutcome.c b/e2sim/previous/ASN1c/UnsuccessfulOutcome.c similarity index 100% rename from e2sim/ASN1c/UnsuccessfulOutcome.c rename to e2sim/previous/ASN1c/UnsuccessfulOutcome.c diff --git a/e2sim/ASN1c/UnsuccessfulOutcome.h b/e2sim/previous/ASN1c/UnsuccessfulOutcome.h similarity index 100% rename from e2sim/ASN1c/UnsuccessfulOutcome.h rename to e2sim/previous/ASN1c/UnsuccessfulOutcome.h diff --git a/e2sim/ASN1c/UsableABSInformation.c b/e2sim/previous/ASN1c/UsableABSInformation.c similarity index 100% rename from e2sim/ASN1c/UsableABSInformation.c rename to e2sim/previous/ASN1c/UsableABSInformation.c diff --git a/e2sim/ASN1c/UsableABSInformation.h b/e2sim/previous/ASN1c/UsableABSInformation.h similarity index 100% rename from e2sim/ASN1c/UsableABSInformation.h rename to e2sim/previous/ASN1c/UsableABSInformation.h diff --git a/e2sim/ASN1c/UsableABSInformationFDD.c b/e2sim/previous/ASN1c/UsableABSInformationFDD.c similarity index 100% rename from e2sim/ASN1c/UsableABSInformationFDD.c rename to e2sim/previous/ASN1c/UsableABSInformationFDD.c diff --git a/e2sim/ASN1c/UsableABSInformationFDD.h b/e2sim/previous/ASN1c/UsableABSInformationFDD.h similarity index 100% rename from e2sim/ASN1c/UsableABSInformationFDD.h rename to e2sim/previous/ASN1c/UsableABSInformationFDD.h diff --git a/e2sim/ASN1c/UsableABSInformationTDD.c b/e2sim/previous/ASN1c/UsableABSInformationTDD.c similarity index 100% rename from e2sim/ASN1c/UsableABSInformationTDD.c rename to e2sim/previous/ASN1c/UsableABSInformationTDD.c diff --git a/e2sim/ASN1c/UsableABSInformationTDD.h b/e2sim/previous/ASN1c/UsableABSInformationTDD.h similarity index 100% rename from e2sim/ASN1c/UsableABSInformationTDD.h rename to e2sim/previous/ASN1c/UsableABSInformationTDD.h diff --git a/e2sim/ASN1c/UserPlaneTrafficActivityReport.c b/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.c similarity index 100% rename from e2sim/ASN1c/UserPlaneTrafficActivityReport.c rename to e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.c diff --git a/e2sim/ASN1c/UserPlaneTrafficActivityReport.h b/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.h similarity index 100% rename from e2sim/ASN1c/UserPlaneTrafficActivityReport.h rename to e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.h diff --git a/e2sim/ASN1c/V2XServicesAuthorized.c b/e2sim/previous/ASN1c/V2XServicesAuthorized.c similarity index 100% rename from e2sim/ASN1c/V2XServicesAuthorized.c rename to e2sim/previous/ASN1c/V2XServicesAuthorized.c diff --git a/e2sim/ASN1c/V2XServicesAuthorized.h b/e2sim/previous/ASN1c/V2XServicesAuthorized.h similarity index 100% rename from e2sim/ASN1c/V2XServicesAuthorized.h rename to e2sim/previous/ASN1c/V2XServicesAuthorized.h diff --git a/e2sim/ASN1c/VehicleUE.c b/e2sim/previous/ASN1c/VehicleUE.c similarity index 100% rename from e2sim/ASN1c/VehicleUE.c rename to e2sim/previous/ASN1c/VehicleUE.c diff --git a/e2sim/ASN1c/VehicleUE.h b/e2sim/previous/ASN1c/VehicleUE.h similarity index 100% rename from e2sim/ASN1c/VehicleUE.h rename to e2sim/previous/ASN1c/VehicleUE.h diff --git a/e2sim/ASN1c/WLANMeasConfig.c b/e2sim/previous/ASN1c/WLANMeasConfig.c similarity index 100% rename from e2sim/ASN1c/WLANMeasConfig.c rename to e2sim/previous/ASN1c/WLANMeasConfig.c diff --git a/e2sim/ASN1c/WLANMeasConfig.h b/e2sim/previous/ASN1c/WLANMeasConfig.h similarity index 100% rename from e2sim/ASN1c/WLANMeasConfig.h rename to e2sim/previous/ASN1c/WLANMeasConfig.h diff --git a/e2sim/ASN1c/WLANMeasConfigNameList.c b/e2sim/previous/ASN1c/WLANMeasConfigNameList.c similarity index 100% rename from e2sim/ASN1c/WLANMeasConfigNameList.c rename to e2sim/previous/ASN1c/WLANMeasConfigNameList.c diff --git a/e2sim/ASN1c/WLANMeasConfigNameList.h b/e2sim/previous/ASN1c/WLANMeasConfigNameList.h similarity index 100% rename from e2sim/ASN1c/WLANMeasConfigNameList.h rename to e2sim/previous/ASN1c/WLANMeasConfigNameList.h diff --git a/e2sim/ASN1c/WLANMeasurementConfiguration.c b/e2sim/previous/ASN1c/WLANMeasurementConfiguration.c similarity index 100% rename from e2sim/ASN1c/WLANMeasurementConfiguration.c rename to e2sim/previous/ASN1c/WLANMeasurementConfiguration.c diff --git a/e2sim/ASN1c/WLANMeasurementConfiguration.h b/e2sim/previous/ASN1c/WLANMeasurementConfiguration.h similarity index 100% rename from e2sim/ASN1c/WLANMeasurementConfiguration.h rename to e2sim/previous/ASN1c/WLANMeasurementConfiguration.h diff --git a/e2sim/ASN1c/WLANName.c b/e2sim/previous/ASN1c/WLANName.c similarity index 100% rename from e2sim/ASN1c/WLANName.c rename to e2sim/previous/ASN1c/WLANName.c diff --git a/e2sim/ASN1c/WLANName.h b/e2sim/previous/ASN1c/WLANName.h similarity index 100% rename from e2sim/ASN1c/WLANName.h rename to e2sim/previous/ASN1c/WLANName.h diff --git a/e2sim/ASN1c/WT-UE-XwAP-ID.c b/e2sim/previous/ASN1c/WT-UE-XwAP-ID.c similarity index 100% rename from e2sim/ASN1c/WT-UE-XwAP-ID.c rename to e2sim/previous/ASN1c/WT-UE-XwAP-ID.c diff --git a/e2sim/ASN1c/WT-UE-XwAP-ID.h b/e2sim/previous/ASN1c/WT-UE-XwAP-ID.h similarity index 100% rename from e2sim/ASN1c/WT-UE-XwAP-ID.h rename to e2sim/previous/ASN1c/WT-UE-XwAP-ID.h diff --git a/e2sim/ASN1c/WTID-Long-Type2.c b/e2sim/previous/ASN1c/WTID-Long-Type2.c similarity index 100% rename from e2sim/ASN1c/WTID-Long-Type2.c rename to e2sim/previous/ASN1c/WTID-Long-Type2.c diff --git a/e2sim/ASN1c/WTID-Long-Type2.h b/e2sim/previous/ASN1c/WTID-Long-Type2.h similarity index 100% rename from e2sim/ASN1c/WTID-Long-Type2.h rename to e2sim/previous/ASN1c/WTID-Long-Type2.h diff --git a/e2sim/ASN1c/WTID-Type1.c b/e2sim/previous/ASN1c/WTID-Type1.c similarity index 100% rename from e2sim/ASN1c/WTID-Type1.c rename to e2sim/previous/ASN1c/WTID-Type1.c diff --git a/e2sim/ASN1c/WTID-Type1.h b/e2sim/previous/ASN1c/WTID-Type1.h similarity index 100% rename from e2sim/ASN1c/WTID-Type1.h rename to e2sim/previous/ASN1c/WTID-Type1.h diff --git a/e2sim/ASN1c/WTID.c b/e2sim/previous/ASN1c/WTID.c similarity index 100% rename from e2sim/ASN1c/WTID.c rename to e2sim/previous/ASN1c/WTID.c diff --git a/e2sim/ASN1c/WTID.h b/e2sim/previous/ASN1c/WTID.h similarity index 100% rename from e2sim/ASN1c/WTID.h rename to e2sim/previous/ASN1c/WTID.h diff --git a/e2sim/ASN1c/WidebandCQI.c b/e2sim/previous/ASN1c/WidebandCQI.c similarity index 100% rename from e2sim/ASN1c/WidebandCQI.c rename to e2sim/previous/ASN1c/WidebandCQI.c diff --git a/e2sim/ASN1c/WidebandCQI.h b/e2sim/previous/ASN1c/WidebandCQI.h similarity index 100% rename from e2sim/ASN1c/WidebandCQI.h rename to e2sim/previous/ASN1c/WidebandCQI.h diff --git a/e2sim/ASN1c/WidebandCQICodeword1.c b/e2sim/previous/ASN1c/WidebandCQICodeword1.c similarity index 100% rename from e2sim/ASN1c/WidebandCQICodeword1.c rename to e2sim/previous/ASN1c/WidebandCQICodeword1.c diff --git a/e2sim/ASN1c/WidebandCQICodeword1.h b/e2sim/previous/ASN1c/WidebandCQICodeword1.h similarity index 100% rename from e2sim/ASN1c/WidebandCQICodeword1.h rename to e2sim/previous/ASN1c/WidebandCQICodeword1.h diff --git a/e2sim/ASN1c/X2AP-Message.c b/e2sim/previous/ASN1c/X2AP-Message.c similarity index 100% rename from e2sim/ASN1c/X2AP-Message.c rename to e2sim/previous/ASN1c/X2AP-Message.c diff --git a/e2sim/ASN1c/X2AP-Message.h b/e2sim/previous/ASN1c/X2AP-Message.h similarity index 100% rename from e2sim/ASN1c/X2AP-Message.h rename to e2sim/previous/ASN1c/X2AP-Message.h diff --git a/e2sim/ASN1c/X2APMessageTransfer.c b/e2sim/previous/ASN1c/X2APMessageTransfer.c similarity index 100% rename from e2sim/ASN1c/X2APMessageTransfer.c rename to e2sim/previous/ASN1c/X2APMessageTransfer.c diff --git a/e2sim/ASN1c/X2APMessageTransfer.h b/e2sim/previous/ASN1c/X2APMessageTransfer.h similarity index 100% rename from e2sim/ASN1c/X2APMessageTransfer.h rename to e2sim/previous/ASN1c/X2APMessageTransfer.h diff --git a/e2sim/ASN1c/X2BenefitValue.c b/e2sim/previous/ASN1c/X2BenefitValue.c similarity index 100% rename from e2sim/ASN1c/X2BenefitValue.c rename to e2sim/previous/ASN1c/X2BenefitValue.c diff --git a/e2sim/ASN1c/X2BenefitValue.h b/e2sim/previous/ASN1c/X2BenefitValue.h similarity index 100% rename from e2sim/ASN1c/X2BenefitValue.h rename to e2sim/previous/ASN1c/X2BenefitValue.h diff --git a/e2sim/ASN1c/X2Release.c b/e2sim/previous/ASN1c/X2Release.c similarity index 100% rename from e2sim/ASN1c/X2Release.c rename to e2sim/previous/ASN1c/X2Release.c diff --git a/e2sim/ASN1c/X2Release.h b/e2sim/previous/ASN1c/X2Release.h similarity index 100% rename from e2sim/ASN1c/X2Release.h rename to e2sim/previous/ASN1c/X2Release.h diff --git a/e2sim/ASN1c/X2RemovalFailure.c b/e2sim/previous/ASN1c/X2RemovalFailure.c similarity index 100% rename from e2sim/ASN1c/X2RemovalFailure.c rename to e2sim/previous/ASN1c/X2RemovalFailure.c diff --git a/e2sim/ASN1c/X2RemovalFailure.h b/e2sim/previous/ASN1c/X2RemovalFailure.h similarity index 100% rename from e2sim/ASN1c/X2RemovalFailure.h rename to e2sim/previous/ASN1c/X2RemovalFailure.h diff --git a/e2sim/ASN1c/X2RemovalRequest.c b/e2sim/previous/ASN1c/X2RemovalRequest.c similarity index 100% rename from e2sim/ASN1c/X2RemovalRequest.c rename to e2sim/previous/ASN1c/X2RemovalRequest.c diff --git a/e2sim/ASN1c/X2RemovalRequest.h b/e2sim/previous/ASN1c/X2RemovalRequest.h similarity index 100% rename from e2sim/ASN1c/X2RemovalRequest.h rename to e2sim/previous/ASN1c/X2RemovalRequest.h diff --git a/e2sim/ASN1c/X2RemovalResponse.c b/e2sim/previous/ASN1c/X2RemovalResponse.c similarity index 100% rename from e2sim/ASN1c/X2RemovalResponse.c rename to e2sim/previous/ASN1c/X2RemovalResponse.c diff --git a/e2sim/ASN1c/X2RemovalResponse.h b/e2sim/previous/ASN1c/X2RemovalResponse.h similarity index 100% rename from e2sim/ASN1c/X2RemovalResponse.h rename to e2sim/previous/ASN1c/X2RemovalResponse.h diff --git a/e2sim/ASN1c/X2SetupFailure.c b/e2sim/previous/ASN1c/X2SetupFailure.c similarity index 100% rename from e2sim/ASN1c/X2SetupFailure.c rename to e2sim/previous/ASN1c/X2SetupFailure.c diff --git a/e2sim/ASN1c/X2SetupFailure.h b/e2sim/previous/ASN1c/X2SetupFailure.h similarity index 100% rename from e2sim/ASN1c/X2SetupFailure.h rename to e2sim/previous/ASN1c/X2SetupFailure.h diff --git a/e2sim/ASN1c/X2SetupRequest.c b/e2sim/previous/ASN1c/X2SetupRequest.c similarity index 100% rename from e2sim/ASN1c/X2SetupRequest.c rename to e2sim/previous/ASN1c/X2SetupRequest.c diff --git a/e2sim/ASN1c/X2SetupRequest.h b/e2sim/previous/ASN1c/X2SetupRequest.h similarity index 100% rename from e2sim/ASN1c/X2SetupRequest.h rename to e2sim/previous/ASN1c/X2SetupRequest.h diff --git a/e2sim/ASN1c/X2SetupResponse.c b/e2sim/previous/ASN1c/X2SetupResponse.c similarity index 100% rename from e2sim/ASN1c/X2SetupResponse.c rename to e2sim/previous/ASN1c/X2SetupResponse.c diff --git a/e2sim/ASN1c/X2SetupResponse.h b/e2sim/previous/ASN1c/X2SetupResponse.h similarity index 100% rename from e2sim/ASN1c/X2SetupResponse.h rename to e2sim/previous/ASN1c/X2SetupResponse.h diff --git a/e2sim/ASN1c/asn_SEQUENCE_OF.c b/e2sim/previous/ASN1c/asn_SEQUENCE_OF.c similarity index 100% rename from e2sim/ASN1c/asn_SEQUENCE_OF.c rename to e2sim/previous/ASN1c/asn_SEQUENCE_OF.c diff --git a/e2sim/ASN1c/asn_SEQUENCE_OF.h b/e2sim/previous/ASN1c/asn_SEQUENCE_OF.h similarity index 100% rename from e2sim/ASN1c/asn_SEQUENCE_OF.h rename to e2sim/previous/ASN1c/asn_SEQUENCE_OF.h diff --git a/e2sim/ASN1c/asn_SET_OF.c b/e2sim/previous/ASN1c/asn_SET_OF.c similarity index 100% rename from e2sim/ASN1c/asn_SET_OF.c rename to e2sim/previous/ASN1c/asn_SET_OF.c diff --git a/e2sim/ASN1c/asn_SET_OF.h b/e2sim/previous/ASN1c/asn_SET_OF.h similarity index 100% rename from e2sim/ASN1c/asn_SET_OF.h rename to e2sim/previous/ASN1c/asn_SET_OF.h diff --git a/e2sim/ASN1c/asn_application.c b/e2sim/previous/ASN1c/asn_application.c similarity index 100% rename from e2sim/ASN1c/asn_application.c rename to e2sim/previous/ASN1c/asn_application.c diff --git a/e2sim/ASN1c/asn_application.h b/e2sim/previous/ASN1c/asn_application.h similarity index 100% rename from e2sim/ASN1c/asn_application.h rename to e2sim/previous/ASN1c/asn_application.h diff --git a/e2sim/ASN1c/asn_bit_data.c b/e2sim/previous/ASN1c/asn_bit_data.c similarity index 100% rename from e2sim/ASN1c/asn_bit_data.c rename to e2sim/previous/ASN1c/asn_bit_data.c diff --git a/e2sim/ASN1c/asn_bit_data.h b/e2sim/previous/ASN1c/asn_bit_data.h similarity index 100% rename from e2sim/ASN1c/asn_bit_data.h rename to e2sim/previous/ASN1c/asn_bit_data.h diff --git a/e2sim/ASN1c/asn_codecs.h b/e2sim/previous/ASN1c/asn_codecs.h similarity index 100% rename from e2sim/ASN1c/asn_codecs.h rename to e2sim/previous/ASN1c/asn_codecs.h diff --git a/e2sim/ASN1c/asn_codecs_prim.c b/e2sim/previous/ASN1c/asn_codecs_prim.c similarity index 100% rename from e2sim/ASN1c/asn_codecs_prim.c rename to e2sim/previous/ASN1c/asn_codecs_prim.c diff --git a/e2sim/ASN1c/asn_codecs_prim.h b/e2sim/previous/ASN1c/asn_codecs_prim.h similarity index 100% rename from e2sim/ASN1c/asn_codecs_prim.h rename to e2sim/previous/ASN1c/asn_codecs_prim.h diff --git a/e2sim/ASN1c/asn_constant.h b/e2sim/previous/ASN1c/asn_constant.h similarity index 100% rename from e2sim/ASN1c/asn_constant.h rename to e2sim/previous/ASN1c/asn_constant.h diff --git a/e2sim/ASN1c/asn_internal.c b/e2sim/previous/ASN1c/asn_internal.c similarity index 100% rename from e2sim/ASN1c/asn_internal.c rename to e2sim/previous/ASN1c/asn_internal.c diff --git a/e2sim/ASN1c/asn_internal.h b/e2sim/previous/ASN1c/asn_internal.h similarity index 100% rename from e2sim/ASN1c/asn_internal.h rename to e2sim/previous/ASN1c/asn_internal.h diff --git a/e2sim/ASN1c/asn_ioc.h b/e2sim/previous/ASN1c/asn_ioc.h similarity index 100% rename from e2sim/ASN1c/asn_ioc.h rename to e2sim/previous/ASN1c/asn_ioc.h diff --git a/e2sim/ASN1c/asn_random_fill.c b/e2sim/previous/ASN1c/asn_random_fill.c similarity index 100% rename from e2sim/ASN1c/asn_random_fill.c rename to e2sim/previous/ASN1c/asn_random_fill.c diff --git a/e2sim/ASN1c/asn_random_fill.h b/e2sim/previous/ASN1c/asn_random_fill.h similarity index 100% rename from e2sim/ASN1c/asn_random_fill.h rename to e2sim/previous/ASN1c/asn_random_fill.h diff --git a/e2sim/ASN1c/asn_system.h b/e2sim/previous/ASN1c/asn_system.h similarity index 100% rename from e2sim/ASN1c/asn_system.h rename to e2sim/previous/ASN1c/asn_system.h diff --git a/e2sim/ASN1c/ber_decoder.c b/e2sim/previous/ASN1c/ber_decoder.c similarity index 100% rename from e2sim/ASN1c/ber_decoder.c rename to e2sim/previous/ASN1c/ber_decoder.c diff --git a/e2sim/ASN1c/ber_decoder.h b/e2sim/previous/ASN1c/ber_decoder.h similarity index 100% rename from e2sim/ASN1c/ber_decoder.h rename to e2sim/previous/ASN1c/ber_decoder.h diff --git a/e2sim/ASN1c/ber_tlv_length.c b/e2sim/previous/ASN1c/ber_tlv_length.c similarity index 100% rename from e2sim/ASN1c/ber_tlv_length.c rename to e2sim/previous/ASN1c/ber_tlv_length.c diff --git a/e2sim/ASN1c/ber_tlv_length.h b/e2sim/previous/ASN1c/ber_tlv_length.h similarity index 100% rename from e2sim/ASN1c/ber_tlv_length.h rename to e2sim/previous/ASN1c/ber_tlv_length.h diff --git a/e2sim/ASN1c/ber_tlv_tag.c b/e2sim/previous/ASN1c/ber_tlv_tag.c similarity index 100% rename from e2sim/ASN1c/ber_tlv_tag.c rename to e2sim/previous/ASN1c/ber_tlv_tag.c diff --git a/e2sim/ASN1c/ber_tlv_tag.h b/e2sim/previous/ASN1c/ber_tlv_tag.h similarity index 100% rename from e2sim/ASN1c/ber_tlv_tag.h rename to e2sim/previous/ASN1c/ber_tlv_tag.h diff --git a/e2sim/ASN1c/constr_CHOICE.c b/e2sim/previous/ASN1c/constr_CHOICE.c similarity index 100% rename from e2sim/ASN1c/constr_CHOICE.c rename to e2sim/previous/ASN1c/constr_CHOICE.c diff --git a/e2sim/ASN1c/constr_CHOICE.h b/e2sim/previous/ASN1c/constr_CHOICE.h similarity index 100% rename from e2sim/ASN1c/constr_CHOICE.h rename to e2sim/previous/ASN1c/constr_CHOICE.h diff --git a/e2sim/ASN1c/constr_SEQUENCE.c b/e2sim/previous/ASN1c/constr_SEQUENCE.c similarity index 100% rename from e2sim/ASN1c/constr_SEQUENCE.c rename to e2sim/previous/ASN1c/constr_SEQUENCE.c diff --git a/e2sim/ASN1c/constr_SEQUENCE.h b/e2sim/previous/ASN1c/constr_SEQUENCE.h similarity index 100% rename from e2sim/ASN1c/constr_SEQUENCE.h rename to e2sim/previous/ASN1c/constr_SEQUENCE.h diff --git a/e2sim/ASN1c/constr_SEQUENCE_OF.c b/e2sim/previous/ASN1c/constr_SEQUENCE_OF.c similarity index 100% rename from e2sim/ASN1c/constr_SEQUENCE_OF.c rename to e2sim/previous/ASN1c/constr_SEQUENCE_OF.c diff --git a/e2sim/ASN1c/constr_SEQUENCE_OF.h b/e2sim/previous/ASN1c/constr_SEQUENCE_OF.h similarity index 100% rename from e2sim/ASN1c/constr_SEQUENCE_OF.h rename to e2sim/previous/ASN1c/constr_SEQUENCE_OF.h diff --git a/e2sim/ASN1c/constr_SET_OF.c b/e2sim/previous/ASN1c/constr_SET_OF.c similarity index 100% rename from e2sim/ASN1c/constr_SET_OF.c rename to e2sim/previous/ASN1c/constr_SET_OF.c diff --git a/e2sim/ASN1c/constr_SET_OF.h b/e2sim/previous/ASN1c/constr_SET_OF.h similarity index 100% rename from e2sim/ASN1c/constr_SET_OF.h rename to e2sim/previous/ASN1c/constr_SET_OF.h diff --git a/e2sim/ASN1c/constr_TYPE.c b/e2sim/previous/ASN1c/constr_TYPE.c similarity index 100% rename from e2sim/ASN1c/constr_TYPE.c rename to e2sim/previous/ASN1c/constr_TYPE.c diff --git a/e2sim/ASN1c/constr_TYPE.h b/e2sim/previous/ASN1c/constr_TYPE.h similarity index 100% rename from e2sim/ASN1c/constr_TYPE.h rename to e2sim/previous/ASN1c/constr_TYPE.h diff --git a/e2sim/ASN1c/constraints.c b/e2sim/previous/ASN1c/constraints.c similarity index 100% rename from e2sim/ASN1c/constraints.c rename to e2sim/previous/ASN1c/constraints.c diff --git a/e2sim/ASN1c/constraints.h b/e2sim/previous/ASN1c/constraints.h similarity index 100% rename from e2sim/ASN1c/constraints.h rename to e2sim/previous/ASN1c/constraints.h diff --git a/e2sim/ASN1c/converter-example.mk b/e2sim/previous/ASN1c/converter-example.mk similarity index 100% rename from e2sim/ASN1c/converter-example.mk rename to e2sim/previous/ASN1c/converter-example.mk diff --git a/e2sim/ASN1c/der_encoder.c b/e2sim/previous/ASN1c/der_encoder.c similarity index 100% rename from e2sim/ASN1c/der_encoder.c rename to e2sim/previous/ASN1c/der_encoder.c diff --git a/e2sim/ASN1c/der_encoder.h b/e2sim/previous/ASN1c/der_encoder.h similarity index 100% rename from e2sim/ASN1c/der_encoder.h rename to e2sim/previous/ASN1c/der_encoder.h diff --git a/e2sim/ASN1c/pdu_collection.c b/e2sim/previous/ASN1c/pdu_collection.c similarity index 100% rename from e2sim/ASN1c/pdu_collection.c rename to e2sim/previous/ASN1c/pdu_collection.c diff --git a/e2sim/ASN1c/per_decoder.c b/e2sim/previous/ASN1c/per_decoder.c similarity index 100% rename from e2sim/ASN1c/per_decoder.c rename to e2sim/previous/ASN1c/per_decoder.c diff --git a/e2sim/ASN1c/per_decoder.h b/e2sim/previous/ASN1c/per_decoder.h similarity index 100% rename from e2sim/ASN1c/per_decoder.h rename to e2sim/previous/ASN1c/per_decoder.h diff --git a/e2sim/ASN1c/per_encoder.c b/e2sim/previous/ASN1c/per_encoder.c similarity index 100% rename from e2sim/ASN1c/per_encoder.c rename to e2sim/previous/ASN1c/per_encoder.c diff --git a/e2sim/ASN1c/per_encoder.h b/e2sim/previous/ASN1c/per_encoder.h similarity index 100% rename from e2sim/ASN1c/per_encoder.h rename to e2sim/previous/ASN1c/per_encoder.h diff --git a/e2sim/ASN1c/per_opentype.c b/e2sim/previous/ASN1c/per_opentype.c similarity index 100% rename from e2sim/ASN1c/per_opentype.c rename to e2sim/previous/ASN1c/per_opentype.c diff --git a/e2sim/ASN1c/per_opentype.h b/e2sim/previous/ASN1c/per_opentype.h similarity index 100% rename from e2sim/ASN1c/per_opentype.h rename to e2sim/previous/ASN1c/per_opentype.h diff --git a/e2sim/ASN1c/per_support.c b/e2sim/previous/ASN1c/per_support.c similarity index 100% rename from e2sim/ASN1c/per_support.c rename to e2sim/previous/ASN1c/per_support.c diff --git a/e2sim/ASN1c/per_support.h b/e2sim/previous/ASN1c/per_support.h similarity index 100% rename from e2sim/ASN1c/per_support.h rename to e2sim/previous/ASN1c/per_support.h diff --git a/e2sim/ASN1c/xer_decoder.c b/e2sim/previous/ASN1c/xer_decoder.c similarity index 100% rename from e2sim/ASN1c/xer_decoder.c rename to e2sim/previous/ASN1c/xer_decoder.c diff --git a/e2sim/ASN1c/xer_decoder.h b/e2sim/previous/ASN1c/xer_decoder.h similarity index 100% rename from e2sim/ASN1c/xer_decoder.h rename to e2sim/previous/ASN1c/xer_decoder.h diff --git a/e2sim/ASN1c/xer_encoder.c b/e2sim/previous/ASN1c/xer_encoder.c similarity index 100% rename from e2sim/ASN1c/xer_encoder.c rename to e2sim/previous/ASN1c/xer_encoder.c diff --git a/e2sim/ASN1c/xer_encoder.h b/e2sim/previous/ASN1c/xer_encoder.h similarity index 100% rename from e2sim/ASN1c/xer_encoder.h rename to e2sim/previous/ASN1c/xer_encoder.h diff --git a/e2sim/ASN1c/xer_support.c b/e2sim/previous/ASN1c/xer_support.c similarity index 100% rename from e2sim/ASN1c/xer_support.c rename to e2sim/previous/ASN1c/xer_support.c diff --git a/e2sim/ASN1c/xer_support.h b/e2sim/previous/ASN1c/xer_support.h similarity index 100% rename from e2sim/ASN1c/xer_support.h rename to e2sim/previous/ASN1c/xer_support.h diff --git a/e2sim/previous/CMakeLists.txt b/e2sim/previous/CMakeLists.txt new file mode 100644 index 0000000..c4e867a --- /dev/null +++ b/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/e2sim/previous/README.md b/e2sim/previous/README.md new file mode 100644 index 0000000..ed260c3 --- /dev/null +++ b/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/e2sim/build_e2sim b/e2sim/previous/build_e2sim similarity index 100% rename from e2sim/build_e2sim rename to e2sim/previous/build_e2sim diff --git a/e2sim/e2apv1sim/docker/Dockerfile b/e2sim/previous/docker/Dockerfile similarity index 100% rename from e2sim/e2apv1sim/docker/Dockerfile rename to e2sim/previous/docker/Dockerfile diff --git a/e2sim/e2apv1sim/docker/container-tag.yaml b/e2sim/previous/docker/container-tag.yaml similarity index 100% rename from e2sim/e2apv1sim/docker/container-tag.yaml rename to e2sim/previous/docker/container-tag.yaml diff --git a/e2sim/docker/old/DockerFile_old b/e2sim/previous/docker/old/DockerFile_old similarity index 100% rename from e2sim/docker/old/DockerFile_old rename to e2sim/previous/docker/old/DockerFile_old diff --git a/e2sim/docker/old/Dockerfile b/e2sim/previous/docker/old/Dockerfile similarity index 100% rename from e2sim/docker/old/Dockerfile rename to e2sim/previous/docker/old/Dockerfile diff --git a/e2sim/docker/old/Dockerfile_base b/e2sim/previous/docker/old/Dockerfile_base similarity index 100% rename from e2sim/docker/old/Dockerfile_base rename to e2sim/previous/docker/old/Dockerfile_base diff --git a/e2sim/docker/old/configure_rmr b/e2sim/previous/docker/old/configure_rmr similarity index 100% rename from e2sim/docker/old/configure_rmr rename to e2sim/previous/docker/old/configure_rmr diff --git a/e2sim/docker/old/empty.rt b/e2sim/previous/docker/old/empty.rt similarity index 100% rename from e2sim/docker/old/empty.rt rename to e2sim/previous/docker/old/empty.rt diff --git a/e2sim/docker/old/install_asn1c b/e2sim/previous/docker/old/install_asn1c similarity index 100% rename from e2sim/docker/old/install_asn1c rename to e2sim/previous/docker/old/install_asn1c diff --git a/e2sim/docker/old/install_rmr b/e2sim/previous/docker/old/install_rmr similarity index 100% rename from e2sim/docker/old/install_rmr rename to e2sim/previous/docker/old/install_rmr diff --git a/e2sim/docker/old/local.rt b/e2sim/previous/docker/old/local.rt similarity index 100% rename from e2sim/docker/old/local.rt rename to e2sim/previous/docker/old/local.rt diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ANY.c b/e2sim/previous/e2apv1sim/ASN1c/ANY.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ANY.c rename to e2sim/previous/e2apv1sim/ASN1c/ANY.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ANY.h b/e2sim/previous/e2apv1sim/ASN1c/ANY.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ANY.h rename to e2sim/previous/e2apv1sim/ASN1c/ANY.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/BIT_STRING.c b/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/BIT_STRING.c rename to e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/BIT_STRING.h b/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/BIT_STRING.h rename to e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c b/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/BIT_STRING_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/C-RNTI.c b/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/C-RNTI.c rename to e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/C-RNTI.h b/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/C-RNTI.h rename to e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c rename to e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h rename to e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c rename to e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h rename to e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c rename to e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h rename to e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c rename to e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h rename to e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c rename to e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h rename to e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c rename to e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h rename to e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c b/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h b/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Cause.c b/e2sim/previous/e2apv1sim/ASN1c/Cause.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Cause.c rename to e2sim/previous/e2apv1sim/ASN1c/Cause.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Cause.h b/e2sim/previous/e2apv1sim/ASN1c/Cause.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Cause.h rename to e2sim/previous/e2apv1sim/ASN1c/Cause.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseMisc.c b/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseMisc.c rename to e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseMisc.h b/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseMisc.h rename to e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseProtocol.c b/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseProtocol.c rename to e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseProtocol.h b/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseProtocol.h rename to e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseRIC.c b/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseRIC.c rename to e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseRIC.h b/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseRIC.h rename to e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseRICservice.c b/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseRICservice.c rename to e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseRICservice.h b/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseRICservice.h rename to e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseTransport.c b/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseTransport.c rename to e2sim/previous/e2apv1sim/ASN1c/CauseTransport.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CauseTransport.h b/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CauseTransport.h rename to e2sim/previous/e2apv1sim/ASN1c/CauseTransport.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c b/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h b/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Criticality.c b/e2sim/previous/e2apv1sim/ASN1c/Criticality.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Criticality.c rename to e2sim/previous/e2apv1sim/ASN1c/Criticality.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Criticality.h b/e2sim/previous/e2apv1sim/ASN1c/Criticality.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Criticality.h rename to e2sim/previous/e2apv1sim/ASN1c/Criticality.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c rename to e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h rename to e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c b/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c rename to e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h b/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h rename to e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c rename to e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h rename to e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c rename to e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h rename to e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c rename to e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h rename to e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c b/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c rename to e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h b/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h rename to e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h b/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h rename to e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2setupFailure.c b/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2setupFailure.c rename to e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2setupFailure.h b/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2setupFailure.h rename to e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2setupRequest.c b/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2setupRequest.c rename to e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2setupRequest.h b/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2setupRequest.h rename to e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2setupResponse.c b/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2setupResponse.c rename to e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/E2setupResponse.h b/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/E2setupResponse.h rename to e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c b/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c rename to e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h b/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h rename to e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ENB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c b/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c rename to e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h b/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h rename to e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c b/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h b/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ErrorIndication.c b/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ErrorIndication.c rename to e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ErrorIndication.h b/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ErrorIndication.h rename to e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c b/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c rename to e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h b/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h rename to e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c b/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h b/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-Name.c b/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-Name.c rename to e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-Name.h b/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-Name.h rename to e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c b/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h b/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/INTEGER.c b/e2sim/previous/e2apv1sim/ASN1c/INTEGER.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/INTEGER.c rename to e2sim/previous/e2apv1sim/ASN1c/INTEGER.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/INTEGER.h b/e2sim/previous/e2apv1sim/ASN1c/INTEGER.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/INTEGER.h rename to e2sim/previous/e2apv1sim/ASN1c/INTEGER.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c b/e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c b/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c rename to e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h b/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h rename to e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert b/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.asn1convert similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert rename to e2sim/previous/e2apv1sim/ASN1c/Makefile.am.asn1convert diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec b/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.libasncodec similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec rename to e2sim/previous/e2apv1sim/ASN1c/Makefile.am.libasncodec diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NI-Type.c b/e2sim/previous/e2apv1sim/ASN1c/NI-Type.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NI-Type.c rename to e2sim/previous/e2apv1sim/ASN1c/NI-Type.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NI-Type.h b/e2sim/previous/e2apv1sim/ASN1c/NI-Type.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NI-Type.h rename to e2sim/previous/e2apv1sim/ASN1c/NI-Type.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NRCGI.c b/e2sim/previous/e2apv1sim/ASN1c/NRCGI.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NRCGI.c rename to e2sim/previous/e2apv1sim/ASN1c/NRCGI.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NRCGI.h b/e2sim/previous/e2apv1sim/ASN1c/NRCGI.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NRCGI.h rename to e2sim/previous/e2apv1sim/ASN1c/NRCGI.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c b/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c rename to e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h b/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h rename to e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c b/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c rename to e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h b/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h rename to e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c b/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NativeInteger.c b/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NativeInteger.c rename to e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NativeInteger.h b/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NativeInteger.h rename to e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c b/e2sim/previous/e2apv1sim/ASN1c/NativeInteger_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/NativeInteger_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c b/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c rename to e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h b/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h rename to e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c b/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c b/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h b/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c b/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h b/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c b/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h b/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c b/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c rename to e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h b/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h rename to e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c b/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PF-Container.c b/e2sim/previous/e2apv1sim/ASN1c/PF-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PF-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/PF-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PF-Container.h b/e2sim/previous/e2apv1sim/ASN1c/PF-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PF-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/PF-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c b/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h b/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c b/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c rename to e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h b/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h rename to e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c b/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c rename to e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h b/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h rename to e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c b/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h b/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c b/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c rename to e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h b/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h rename to e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PlmnID-List.c b/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PlmnID-List.c rename to e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PlmnID-List.h b/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PlmnID-List.h rename to e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Presence.c b/e2sim/previous/e2apv1sim/ASN1c/Presence.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Presence.c rename to e2sim/previous/e2apv1sim/ASN1c/Presence.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/Presence.h b/e2sim/previous/e2apv1sim/ASN1c/Presence.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/Presence.h rename to e2sim/previous/e2apv1sim/ASN1c/Presence.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PrintableString.c b/e2sim/previous/e2apv1sim/ASN1c/PrintableString.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PrintableString.c rename to e2sim/previous/e2apv1sim/ASN1c/PrintableString.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PrintableString.h b/e2sim/previous/e2apv1sim/ASN1c/PrintableString.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PrintableString.h rename to e2sim/previous/e2apv1sim/ASN1c/PrintableString.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProcedureCode.c b/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProcedureCode.c rename to e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProcedureCode.h b/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProcedureCode.h rename to e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h rename to e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RAN-Container.c b/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RAN-Container.c rename to e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RAN-Container.h b/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RAN-Container.h rename to e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c b/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c rename to e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h b/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h rename to e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionID.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h b/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c b/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h b/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c b/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c rename to e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h b/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h rename to e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c b/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h b/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c b/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c rename to e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h b/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h rename to e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c b/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c rename to e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h b/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h rename to e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c b/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h b/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c b/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h b/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c b/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c rename to e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h b/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h rename to e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactionID.c b/e2sim/previous/e2apv1sim/ASN1c/RICactionID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactionID.c rename to e2sim/previous/e2apv1sim/ASN1c/RICactionID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactionID.h b/e2sim/previous/e2apv1sim/ASN1c/RICactionID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactionID.h rename to e2sim/previous/e2apv1sim/ASN1c/RICactionID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactionType.c b/e2sim/previous/e2apv1sim/ASN1c/RICactionType.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactionType.c rename to e2sim/previous/e2apv1sim/ASN1c/RICactionType.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactionType.h b/e2sim/previous/e2apv1sim/ASN1c/RICactionType.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactionType.h rename to e2sim/previous/e2apv1sim/ASN1c/RICactionType.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c rename to e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h rename to e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c b/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h b/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h b/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h rename to e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c b/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c rename to e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h b/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h rename to e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindication.c b/e2sim/previous/e2apv1sim/ASN1c/RICindication.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindication.c rename to e2sim/previous/e2apv1sim/ASN1c/RICindication.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindication.h b/e2sim/previous/e2apv1sim/ASN1c/RICindication.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindication.h rename to e2sim/previous/e2apv1sim/ASN1c/RICindication.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c b/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h b/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c b/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h b/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationSN.c b/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationSN.c rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationSN.h b/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationSN.h rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationType.c b/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationType.c rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationType.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICindicationType.h b/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICindicationType.h rename to e2sim/previous/e2apv1sim/ASN1c/RICindicationType.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICrequestID.c b/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICrequestID.c rename to e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICrequestID.h b/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICrequestID.h rename to e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c b/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h b/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c b/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h b/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c b/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h b/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h rename to e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c b/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c rename to e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h b/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h rename to e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c b/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c rename to e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h b/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h rename to e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c b/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c rename to e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h b/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h rename to e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ResetRequest.c b/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ResetRequest.c rename to e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ResetRequest.h b/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ResetRequest.h rename to e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ResetResponse.c b/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ResetResponse.c rename to e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/ResetResponse.h b/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/ResetResponse.h rename to e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SNSSAI.c b/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SNSSAI.c rename to e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SNSSAI.h b/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SNSSAI.h rename to e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c b/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c rename to e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h b/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h rename to e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c b/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c rename to e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h b/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h rename to e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/TimeToWait.c b/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/TimeToWait.c rename to e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/TimeToWait.h b/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/TimeToWait.h rename to e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Timestamp.c b/e2sim/previous/e2apv1sim/ASN1c/Timestamp.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Timestamp.c rename to e2sim/previous/e2apv1sim/ASN1c/Timestamp.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Timestamp.h b/e2sim/previous/e2apv1sim/ASN1c/Timestamp.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Timestamp.h rename to e2sim/previous/e2apv1sim/ASN1c/Timestamp.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c b/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c rename to e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h b/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h rename to e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c b/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c rename to e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h b/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h rename to e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/TypeOfError.c b/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/TypeOfError.c rename to e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/TypeOfError.h b/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/TypeOfError.h rename to e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c b/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c rename to e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h b/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h rename to e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c b/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c rename to e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h b/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h rename to e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c b/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h b/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c b/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h b/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_application.c b/e2sim/previous/e2apv1sim/ASN1c/asn_application.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_application.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_application.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_application.h b/e2sim/previous/e2apv1sim/ASN1c/asn_application.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_application.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_application.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_bit_data.c b/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_bit_data.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_bit_data.h b/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_bit_data.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_codecs.h b/e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_codecs.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c b/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h b/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/asn_constant.h b/e2sim/previous/e2apv1sim/ASN1c/asn_constant.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/asn_constant.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_constant.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_internal.c b/e2sim/previous/e2apv1sim/ASN1c/asn_internal.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_internal.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_internal.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_internal.h b/e2sim/previous/e2apv1sim/ASN1c/asn_internal.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_internal.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_internal.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_ioc.h b/e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_ioc.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_random_fill.c b/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_random_fill.c rename to e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_random_fill.h b/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_random_fill.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/asn_system.h b/e2sim/previous/e2apv1sim/ASN1c/asn_system.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_system.h rename to e2sim/previous/e2apv1sim/ASN1c/asn_system.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ber_decoder.c b/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ber_decoder.c rename to e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ber_decoder.h b/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ber_decoder.h rename to e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c b/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c rename to e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h b/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h rename to e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c b/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c rename to e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h b/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h rename to e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c b/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h b/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h rename to e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c b/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c b/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h b/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h rename to e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c b/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h b/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h rename to e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c b/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c b/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h b/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h rename to e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c b/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_TYPE.c b/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_TYPE.c rename to e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constr_TYPE.h b/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constr_TYPE.h rename to e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constraints.c b/e2sim/previous/e2apv1sim/ASN1c/constraints.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constraints.c rename to e2sim/previous/e2apv1sim/ASN1c/constraints.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/constraints.h b/e2sim/previous/e2apv1sim/ASN1c/constraints.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/constraints.h rename to e2sim/previous/e2apv1sim/ASN1c/constraints.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/converter-example.mk b/e2sim/previous/e2apv1sim/ASN1c/converter-example.mk similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/converter-example.mk rename to e2sim/previous/e2apv1sim/ASN1c/converter-example.mk diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/der_encoder.c b/e2sim/previous/e2apv1sim/ASN1c/der_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/der_encoder.c rename to e2sim/previous/e2apv1sim/ASN1c/der_encoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/der_encoder.h b/e2sim/previous/e2apv1sim/ASN1c/der_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/der_encoder.h rename to e2sim/previous/e2apv1sim/ASN1c/der_encoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/oer_decoder.c b/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/oer_decoder.c rename to e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/oer_decoder.h b/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/oer_decoder.h rename to e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/oer_encoder.c b/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/oer_encoder.c rename to e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/oer_encoder.h b/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/oer_encoder.h rename to e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/oer_support.c b/e2sim/previous/e2apv1sim/ASN1c/oer_support.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/oer_support.c rename to e2sim/previous/e2apv1sim/ASN1c/oer_support.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/oer_support.h b/e2sim/previous/e2apv1sim/ASN1c/oer_support.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/oer_support.h rename to e2sim/previous/e2apv1sim/ASN1c/oer_support.h diff --git a/e2sim/e2apv1sim/e2sim/ASN1c/pdu_collection.c b/e2sim/previous/e2apv1sim/ASN1c/pdu_collection.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/ASN1c/pdu_collection.c rename to e2sim/previous/e2apv1sim/ASN1c/pdu_collection.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_decoder.c b/e2sim/previous/e2apv1sim/ASN1c/per_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_decoder.c rename to e2sim/previous/e2apv1sim/ASN1c/per_decoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_decoder.h b/e2sim/previous/e2apv1sim/ASN1c/per_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_decoder.h rename to e2sim/previous/e2apv1sim/ASN1c/per_decoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_encoder.c b/e2sim/previous/e2apv1sim/ASN1c/per_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_encoder.c rename to e2sim/previous/e2apv1sim/ASN1c/per_encoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_encoder.h b/e2sim/previous/e2apv1sim/ASN1c/per_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_encoder.h rename to e2sim/previous/e2apv1sim/ASN1c/per_encoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_opentype.c b/e2sim/previous/e2apv1sim/ASN1c/per_opentype.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_opentype.c rename to e2sim/previous/e2apv1sim/ASN1c/per_opentype.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_opentype.h b/e2sim/previous/e2apv1sim/ASN1c/per_opentype.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_opentype.h rename to e2sim/previous/e2apv1sim/ASN1c/per_opentype.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_support.c b/e2sim/previous/e2apv1sim/ASN1c/per_support.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_support.c rename to e2sim/previous/e2apv1sim/ASN1c/per_support.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/per_support.h b/e2sim/previous/e2apv1sim/ASN1c/per_support.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/per_support.h rename to e2sim/previous/e2apv1sim/ASN1c/per_support.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/xer_decoder.c b/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/xer_decoder.c rename to e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/xer_decoder.h b/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/xer_decoder.h rename to e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/xer_encoder.c b/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/xer_encoder.c rename to e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/xer_encoder.h b/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/xer_encoder.h rename to e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/xer_support.c b/e2sim/previous/e2apv1sim/ASN1c/xer_support.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/xer_support.c rename to e2sim/previous/e2apv1sim/ASN1c/xer_support.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/xer_support.h b/e2sim/previous/e2apv1sim/ASN1c/xer_support.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/xer_support.h rename to e2sim/previous/e2apv1sim/ASN1c/xer_support.h diff --git a/e2sim/e2apv1sim/CMakeLists.txt b/e2sim/previous/e2apv1sim/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/CMakeLists.txt rename to e2sim/previous/e2apv1sim/CMakeLists.txt diff --git a/e2sim/e2apv1sim/Dockerfile b/e2sim/previous/e2apv1sim/Dockerfile similarity index 100% rename from e2sim/e2apv1sim/Dockerfile rename to e2sim/previous/e2apv1sim/Dockerfile diff --git a/e2sim/e2apv1sim/README.md b/e2sim/previous/e2apv1sim/README.md similarity index 100% rename from e2sim/e2apv1sim/README.md rename to e2sim/previous/e2apv1sim/README.md diff --git a/e2sim/e2apv1sim/build_e2sim b/e2sim/previous/e2apv1sim/build_e2sim similarity index 100% rename from e2sim/e2apv1sim/build_e2sim rename to e2sim/previous/e2apv1sim/build_e2sim diff --git a/e2sim/e2apv1sim/e2sim/cellMeasReport.txt b/e2sim/previous/e2apv1sim/cellMeasReport.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/cellMeasReport.txt rename to e2sim/previous/e2apv1sim/cellMeasReport.txt diff --git a/e2sim/e2apv1sim/e2sim/docker/Dockerfile b/e2sim/previous/e2apv1sim/docker/Dockerfile similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/Dockerfile rename to e2sim/previous/e2apv1sim/docker/Dockerfile diff --git a/e2sim/e2apv1sim/e2sim/docker/container-tag.yaml b/e2sim/previous/e2apv1sim/docker/container-tag.yaml similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/container-tag.yaml rename to e2sim/previous/e2apv1sim/docker/container-tag.yaml diff --git a/e2sim/e2apv1sim/docker/old/DockerFile_old b/e2sim/previous/e2apv1sim/docker/old/DockerFile_old similarity index 100% rename from e2sim/e2apv1sim/docker/old/DockerFile_old rename to e2sim/previous/e2apv1sim/docker/old/DockerFile_old diff --git a/e2sim/e2apv1sim/docker/old/Dockerfile b/e2sim/previous/e2apv1sim/docker/old/Dockerfile similarity index 100% rename from e2sim/e2apv1sim/docker/old/Dockerfile rename to e2sim/previous/e2apv1sim/docker/old/Dockerfile diff --git a/e2sim/e2apv1sim/docker/old/Dockerfile_base b/e2sim/previous/e2apv1sim/docker/old/Dockerfile_base similarity index 100% rename from e2sim/e2apv1sim/docker/old/Dockerfile_base rename to e2sim/previous/e2apv1sim/docker/old/Dockerfile_base diff --git a/e2sim/e2apv1sim/docker/old/configure_rmr b/e2sim/previous/e2apv1sim/docker/old/configure_rmr similarity index 100% rename from e2sim/e2apv1sim/docker/old/configure_rmr rename to e2sim/previous/e2apv1sim/docker/old/configure_rmr diff --git a/e2sim/e2apv1sim/docker/old/empty.rt b/e2sim/previous/e2apv1sim/docker/old/empty.rt similarity index 100% rename from e2sim/e2apv1sim/docker/old/empty.rt rename to e2sim/previous/e2apv1sim/docker/old/empty.rt diff --git a/e2sim/e2apv1sim/docker/old/install_asn1c b/e2sim/previous/e2apv1sim/docker/old/install_asn1c similarity index 100% rename from e2sim/e2apv1sim/docker/old/install_asn1c rename to e2sim/previous/e2apv1sim/docker/old/install_asn1c diff --git a/e2sim/e2apv1sim/docker/old/install_rmr b/e2sim/previous/e2apv1sim/docker/old/install_rmr similarity index 100% rename from e2sim/e2apv1sim/docker/old/install_rmr rename to e2sim/previous/e2apv1sim/docker/old/install_rmr diff --git a/e2sim/e2apv1sim/docker/old/local.rt b/e2sim/previous/e2apv1sim/docker/old/local.rt similarity index 100% rename from e2sim/e2apv1sim/docker/old/local.rt rename to e2sim/previous/e2apv1sim/docker/old/local.rt diff --git a/e2sim/e2apv1sim/e2sim.cpp b/e2sim/previous/e2apv1sim/e2sim.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim.cpp rename to e2sim/previous/e2apv1sim/e2sim.cpp diff --git a/e2sim/e2apv1sim/e2sim.hpp b/e2sim/previous/e2apv1sim/e2sim.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim.hpp rename to e2sim/previous/e2apv1sim/e2sim.hpp diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/Cause.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Cause.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Cause.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Cause.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseMisc.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseMisc.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseMisc.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseMisc.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseProtocol.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseProtocol.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseProtocol.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseProtocol.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseRIC.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseRIC.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseRIC.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseRIC.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseRICservice.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseRICservice.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseRICservice.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseRICservice.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseTransport.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseTransport.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CauseTransport.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CauseTransport.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/Criticality.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Criticality.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Criticality.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Criticality.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/E2setupFailure.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2setupFailure.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2setupFailure.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2setupFailure.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2setupRequest.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2setupRequest.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2setupRequest.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2setupRequest.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2setupResponse.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2setupResponse.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/E2setupResponse.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/E2setupResponse.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ENB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/ErrorIndication.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ErrorIndication.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ErrorIndication.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ErrorIndication.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/Presence.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Presence.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/Presence.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/Presence.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/ProcedureCode.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProcedureCode.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProcedureCode.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProcedureCode.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactionID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactionID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactionID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactionID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactionType.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactionType.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactionType.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactionType.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindication.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindication.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindication.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindication.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationSN.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationSN.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationSN.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationSN.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationType.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationType.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICindicationType.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICindicationType.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICrequestID.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICrequestID.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICrequestID.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICrequestID.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/ResetRequest.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ResetRequest.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ResetRequest.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ResetRequest.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ResetResponse.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ResetResponse.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/ResetResponse.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/ResetResponse.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/TimeToWait.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/TimeToWait.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/TimeToWait.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/TimeToWait.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/TypeOfError.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/TypeOfError.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/TypeOfError.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/TypeOfError.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c diff --git a/e2sim/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/asn_constant.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_constant.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/asn_constant.h rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_constant.h diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/converter-example.mk b/e2sim/previous/e2apv1sim/e2sim/ASN1c/converter-example.mk similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/converter-example.mk rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/converter-example.mk diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/ASN1c/pdu_collection.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/pdu_collection.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/ASN1c/pdu_collection.c rename to e2sim/previous/e2apv1sim/e2sim/ASN1c/pdu_collection.c diff --git a/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c b/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h b/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/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/e2sim/e2apv1sim/e2sim/CMakeLists.txt b/e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/CMakeLists.txt rename to e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt diff --git a/e2sim/e2apv1sim/e2sim/Dockerfile b/e2sim/previous/e2apv1sim/e2sim/Dockerfile similarity index 100% rename from e2sim/e2apv1sim/e2sim/Dockerfile rename to e2sim/previous/e2apv1sim/e2sim/Dockerfile diff --git a/e2sim/e2apv1sim/e2sim/README.md b/e2sim/previous/e2apv1sim/e2sim/README.md similarity index 100% rename from e2sim/e2apv1sim/e2sim/README.md rename to e2sim/previous/e2apv1sim/e2sim/README.md diff --git a/e2sim/e2apv1sim/e2sim/build_e2sim b/e2sim/previous/e2apv1sim/e2sim/build_e2sim similarity index 100% rename from e2sim/e2apv1sim/e2sim/build_e2sim rename to e2sim/previous/e2apv1sim/e2sim/build_e2sim diff --git a/e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt b/e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt new file mode 100644 index 0000000..2c0890f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile b/e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile new file mode 100644 index 0000000..1233a12 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml b/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml new file mode 100644 index 0000000..5df0816 --- /dev/null +++ b/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml @@ -0,0 +1,2 @@ +--- +tag: 0.1.1 diff --git a/e2sim/e2apv1sim/e2sim/docker/old/DockerFile_old b/e2sim/previous/e2apv1sim/e2sim/docker/old/DockerFile_old similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/DockerFile_old rename to e2sim/previous/e2apv1sim/e2sim/docker/old/DockerFile_old diff --git a/e2sim/e2apv1sim/e2sim/docker/old/Dockerfile b/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/Dockerfile rename to e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile diff --git a/e2sim/e2apv1sim/e2sim/docker/old/Dockerfile_base b/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile_base similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/Dockerfile_base rename to e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile_base diff --git a/e2sim/e2apv1sim/e2sim/docker/old/configure_rmr b/e2sim/previous/e2apv1sim/e2sim/docker/old/configure_rmr similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/configure_rmr rename to e2sim/previous/e2apv1sim/e2sim/docker/old/configure_rmr diff --git a/e2sim/e2apv1sim/e2sim/docker/old/empty.rt b/e2sim/previous/e2apv1sim/e2sim/docker/old/empty.rt similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/empty.rt rename to e2sim/previous/e2apv1sim/e2sim/docker/old/empty.rt diff --git a/e2sim/e2apv1sim/e2sim/docker/old/install_asn1c b/e2sim/previous/e2apv1sim/e2sim/docker/old/install_asn1c similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/install_asn1c rename to e2sim/previous/e2apv1sim/e2sim/docker/old/install_asn1c diff --git a/e2sim/e2apv1sim/e2sim/docker/old/install_rmr b/e2sim/previous/e2apv1sim/e2sim/docker/old/install_rmr similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/install_rmr rename to e2sim/previous/e2apv1sim/e2sim/docker/old/install_rmr diff --git a/e2sim/e2apv1sim/e2sim/docker/old/local.rt b/e2sim/previous/e2apv1sim/e2sim/docker/old/local.rt similarity index 100% rename from e2sim/e2apv1sim/e2sim/docker/old/local.rt rename to e2sim/previous/e2apv1sim/e2sim/docker/old/local.rt diff --git a/e2sim/e2apv1sim/e2sim/e2sim.cpp b/e2sim/previous/e2apv1sim/e2sim/e2sim.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/e2sim.cpp rename to e2sim/previous/e2apv1sim/e2sim/e2sim.cpp diff --git a/e2sim/e2apv1sim/e2sim/e2sim.hpp b/e2sim/previous/e2apv1sim/e2sim/e2sim.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/e2sim.hpp rename to e2sim/previous/e2apv1sim/e2sim/e2sim.hpp diff --git a/e2sim/e2apv1sim/e2sim/encode_e2apv1.cpp b/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/encode_e2apv1.cpp rename to e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.cpp diff --git a/e2sim/e2apv1sim/e2sim/encode_e2apv1.hpp b/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/encode_e2apv1.hpp rename to e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.hpp diff --git a/e2sim/e2apv1sim/e2sim/encode_kpm.cpp b/e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/encode_kpm.cpp rename to e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp diff --git a/e2sim/e2apv1sim/e2sim/encode_kpm.hpp b/e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/encode_kpm.hpp rename to e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp diff --git a/e2sim/e2apv1sim/e2sim/extras/ricsim.cpp b/e2sim/previous/e2apv1sim/e2sim/extras/ricsim.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/extras/ricsim.cpp rename to e2sim/previous/e2apv1sim/e2sim/extras/ricsim.cpp diff --git a/e2sim/e2apv1sim/e2sim/helm/README.md b/e2sim/previous/e2apv1sim/e2sim/helm/README.md similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/README.md rename to e2sim/previous/e2apv1sim/e2sim/helm/README.md diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim/Chart.yaml b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim/Chart.yaml rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim/values.yaml b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/values.yaml similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim/values.yaml rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim/values.yaml diff --git a/e2sim/e2apv1sim/e2sim/helm/e2sim_install.sh b/e2sim/previous/e2apv1sim/e2sim/helm/e2sim_install.sh similarity index 100% rename from e2sim/e2apv1sim/e2sim/helm/e2sim_install.sh rename to e2sim/previous/e2apv1sim/e2sim/helm/e2sim_install.sh diff --git a/e2sim/e2apv1sim/e2sim/kpm_callbacks.cpp b/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/kpm_callbacks.cpp rename to e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.cpp diff --git a/e2sim/e2apv1sim/e2sim/kpm_callbacks.hpp b/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/kpm_callbacks.hpp rename to e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.hpp diff --git a/e2sim/e2apv1sim/simulation.txt b/e2sim/previous/e2apv1sim/e2sim/simulation.txt similarity index 100% rename from e2sim/e2apv1sim/simulation.txt rename to e2sim/previous/e2apv1sim/e2sim/simulation.txt diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/asn/version.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/version.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/asn/version.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/version.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp b/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/DEF/e2sim_defs.h b/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/DEF/e2sim_defs.h rename to e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp~ b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp~ similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp~ rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp~ diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp~ b/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp~ similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp~ rename to e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp~ diff --git a/e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c b/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c rename to e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c diff --git a/e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp b/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h b/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h rename to e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h diff --git a/e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp b/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h diff --git a/e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/e2sim/test/Misc/CMakeLists.txt b/e2sim/previous/e2apv1sim/e2sim/test/Misc/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Misc/CMakeLists.txt rename to e2sim/previous/e2apv1sim/e2sim/test/Misc/CMakeLists.txt diff --git a/e2sim/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp b/e2sim/previous/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 b/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 rename to e2sim/previous/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 diff --git a/e2sim/e2apv1sim/e2sim/test/WLG/CMakeLists.txt b/e2sim/previous/e2apv1sim/e2sim/test/WLG/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/WLG/CMakeLists.txt rename to e2sim/previous/e2apv1sim/e2sim/test/WLG/CMakeLists.txt diff --git a/e2sim/e2apv1sim/e2sim/test/WLG/build_wlg.sh b/e2sim/previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/WLG/build_wlg.sh rename to e2sim/previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh diff --git a/e2sim/e2apv1sim/e2sim/test/WLG/ric_perf.cpp b/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/WLG/ric_perf.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp b/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/X2/CMakeLists.txt b/e2sim/previous/e2apv1sim/e2sim/test/X2/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/X2/CMakeLists.txt rename to e2sim/previous/e2apv1sim/e2sim/test/X2/CMakeLists.txt diff --git a/e2sim/e2apv1sim/e2sim/test/X2/x2agent.cpp b/e2sim/previous/e2apv1sim/e2sim/test/X2/x2agent.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/X2/x2agent.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/X2/x2agent.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/X2/x2term.cpp b/e2sim/previous/e2apv1sim/e2sim/test/X2/x2term.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/X2/x2term.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/X2/x2term.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/X2/x2termination_test.cpp b/e2sim/previous/e2apv1sim/e2sim/test/X2/x2termination_test.cpp similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/X2/x2termination_test.cpp rename to e2sim/previous/e2apv1sim/e2sim/test/X2/x2termination_test.cpp diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/README b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/README similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/README rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/README diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c diff --git a/e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h b/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h similarity index 100% rename from e2sim/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h rename to e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h diff --git a/e2sim/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes b/e2sim/previous/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes similarity index 100% rename from e2sim/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes rename to e2sim/previous/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes diff --git a/e2sim/e2apv1sim/e2sim/tools/build_helper.bash b/e2sim/previous/e2apv1sim/e2sim/tools/build_helper.bash similarity index 100% rename from e2sim/e2apv1sim/e2sim/tools/build_helper.bash rename to e2sim/previous/e2apv1sim/e2sim/tools/build_helper.bash diff --git a/e2sim/e2apv1sim/e2sim/tools/install_asn1c b/e2sim/previous/e2apv1sim/e2sim/tools/install_asn1c similarity index 100% rename from e2sim/e2apv1sim/e2sim/tools/install_asn1c rename to e2sim/previous/e2apv1sim/e2sim/tools/install_asn1c diff --git a/e2sim/e2apv1sim/e2sim/tools/install_dependencies b/e2sim/previous/e2apv1sim/e2sim/tools/install_dependencies similarity index 100% rename from e2sim/e2apv1sim/e2sim/tools/install_dependencies rename to e2sim/previous/e2apv1sim/e2sim/tools/install_dependencies diff --git a/e2sim/e2apv1sim/ueMeasReport.txt b/e2sim/previous/e2apv1sim/e2sim/ueMeasReport.txt similarity index 100% rename from e2sim/e2apv1sim/ueMeasReport.txt rename to e2sim/previous/e2apv1sim/e2sim/ueMeasReport.txt diff --git a/e2sim/e2apv1sim/encode_e2apv1.cpp b/e2sim/previous/e2apv1sim/encode_e2apv1.cpp similarity index 100% rename from e2sim/e2apv1sim/encode_e2apv1.cpp rename to e2sim/previous/e2apv1sim/encode_e2apv1.cpp diff --git a/e2sim/e2apv1sim/encode_e2apv1.hpp b/e2sim/previous/e2apv1sim/encode_e2apv1.hpp similarity index 100% rename from e2sim/e2apv1sim/encode_e2apv1.hpp rename to e2sim/previous/e2apv1sim/encode_e2apv1.hpp diff --git a/e2sim/e2apv1sim/encode_kpm.cpp b/e2sim/previous/e2apv1sim/encode_kpm.cpp similarity index 100% rename from e2sim/e2apv1sim/encode_kpm.cpp rename to e2sim/previous/e2apv1sim/encode_kpm.cpp diff --git a/e2sim/e2apv1sim/encode_kpm.hpp b/e2sim/previous/e2apv1sim/encode_kpm.hpp similarity index 100% rename from e2sim/e2apv1sim/encode_kpm.hpp rename to e2sim/previous/e2apv1sim/encode_kpm.hpp diff --git a/e2sim/e2apv1sim/extras/ricsim.cpp b/e2sim/previous/e2apv1sim/extras/ricsim.cpp similarity index 100% rename from e2sim/e2apv1sim/extras/ricsim.cpp rename to e2sim/previous/e2apv1sim/extras/ricsim.cpp diff --git a/e2sim/e2apv1sim/helm/README.md b/e2sim/previous/e2apv1sim/helm/README.md similarity index 100% rename from e2sim/e2apv1sim/helm/README.md rename to e2sim/previous/e2apv1sim/helm/README.md diff --git a/e2sim/e2apv1sim/helm/e2sim/Chart.yaml b/e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim/Chart.yaml rename to e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml diff --git a/e2sim/e2apv1sim/helm/e2sim/templates/_helpers.tpl b/e2sim/previous/e2apv1sim/helm/e2sim/templates/_helpers.tpl similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim/templates/_helpers.tpl rename to e2sim/previous/e2apv1sim/helm/e2sim/templates/_helpers.tpl diff --git a/e2sim/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl b/e2sim/previous/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl rename to e2sim/previous/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl diff --git a/e2sim/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml b/e2sim/previous/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml rename to e2sim/previous/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml diff --git a/e2sim/e2apv1sim/helm/e2sim/templates/deployment.yaml b/e2sim/previous/e2apv1sim/helm/e2sim/templates/deployment.yaml similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim/templates/deployment.yaml rename to e2sim/previous/e2apv1sim/helm/e2sim/templates/deployment.yaml diff --git a/e2sim/e2apv1sim/helm/e2sim/values.yaml b/e2sim/previous/e2apv1sim/helm/e2sim/values.yaml similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim/values.yaml rename to e2sim/previous/e2apv1sim/helm/e2sim/values.yaml diff --git a/e2sim/e2apv1sim/helm/e2sim_install.sh b/e2sim/previous/e2apv1sim/helm/e2sim_install.sh similarity index 100% rename from e2sim/e2apv1sim/helm/e2sim_install.sh rename to e2sim/previous/e2apv1sim/helm/e2sim_install.sh diff --git a/e2sim/e2apv1sim/kpm_callbacks.cpp b/e2sim/previous/e2apv1sim/kpm_callbacks.cpp similarity index 100% rename from e2sim/e2apv1sim/kpm_callbacks.cpp rename to e2sim/previous/e2apv1sim/kpm_callbacks.cpp diff --git a/e2sim/e2apv1sim/kpm_callbacks.hpp b/e2sim/previous/e2apv1sim/kpm_callbacks.hpp similarity index 100% rename from e2sim/e2apv1sim/kpm_callbacks.hpp rename to e2sim/previous/e2apv1sim/kpm_callbacks.hpp diff --git a/e2sim/e2apv1sim/ricsim.cpp b/e2sim/previous/e2apv1sim/ricsim.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim.cpp rename to e2sim/previous/e2apv1sim/ricsim.cpp diff --git a/e2sim/e2apv1sim/ricsim.hpp b/e2sim/previous/e2apv1sim/ricsim.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim.hpp rename to e2sim/previous/e2apv1sim/ricsim.hpp diff --git a/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c new file mode 100644 index 0000000..1027911 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h new file mode 100644 index 0000000..1b829a6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c new file mode 100644 index 0000000..1709929 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h new file mode 100644 index 0000000..d175009 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..e5b11b0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..72329ac --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c new file mode 100644 index 0000000..11d9e4e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h new file mode 100644 index 0000000..417532f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..6773fd4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..4270eb3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c new file mode 100644 index 0000000..08a317d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f3fe969 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c new file mode 100644 index 0000000..217d8e5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h new file mode 100644 index 0000000..ab1ecf2 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..0306093 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..1222f03 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..502517f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..3f0d07b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..825808b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9cef6bf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..94650be --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..6f3f1c8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..49cae9b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..4dee64b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..cefa91b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..2b8b070 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..b607aa1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..ccec4bc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..824871d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..7e142ae --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c new file mode 100644 index 0000000..212c6fc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8af6b41 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..e8fc32f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..f97a53c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..e971c4f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..a209847 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..737a4f3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..e6b9c43 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..b43653e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..65e23da --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..81bc2b0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..cf5438c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..0b194e6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..339797e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..f31a018 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..6047414 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..2728634 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..0bae91d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..25f0346 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..2f36099 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..91e427b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..d6767bf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..58f3724 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..bd653ae --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..f113921 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..c1ab6be --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..07f8116 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..1e254a7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..bfcc098 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..e31846d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..d220e9a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..e8246ca --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..de67caf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..a8a01f6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..c1bec19 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..8abd4f1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..e3754f8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..6835400 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c new file mode 100644 index 0000000..4f55ae3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h new file mode 100644 index 0000000..8f93430 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..0e488d4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..a2e8fe8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4046387 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..5034a64 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c9d5808 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..3376410 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..ad1c8b8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..5b730c7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..f77445b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..1837ac8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..af5597c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..573edcf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..9c7e653 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..8193bd6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..9afe610 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..f6d2261 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..c516962 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..b17c298 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..f1554d0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..e7fd073 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..3d8697d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..4e54dde --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..7661a88 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..9b3be69 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..fc95705 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..f0a61a0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..985330a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..033ed53 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a0b271b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..58ec9ba --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..f55d0a1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..9e45736 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..c52b90c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..b8bd23c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..fb5c08d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..386c289 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..0b566bb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..d7f13c1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..692fd38 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..8eaf217 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..515679d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..48645e1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..51f45f4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..95bbadf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..2e8bc94 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..c3f5d07 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..dd1d941 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..e1eeca6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c new file mode 100644 index 0000000..ecd1ea7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h new file mode 100644 index 0000000..b21d3a8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c new file mode 100644 index 0000000..69f2101 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h new file mode 100644 index 0000000..b51809c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..c1445fd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..7acfeb4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..a7d682f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..d388b85 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..d69a24c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..73f9da7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..eb3d6d2 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..63dbb73 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..044706c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..919f11c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..2b0400b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..f26977c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..f3df4b1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..5cc6cc3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..c40874d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..94481fc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..2b54af3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..f35e61d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..8dc0c58 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..627ebaa --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..4c892e0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..f323980 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c new file mode 100644 index 0000000..be2a72a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h new file mode 100644 index 0000000..8a8173d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..31e2f7f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..0d1448d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..096f61d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..97ce63e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..74782d8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..30d8c55 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c new file mode 100644 index 0000000..81beabe --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h new file mode 100644 index 0000000..ae14d7a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dfe67b5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h new file mode 100644 index 0000000..24636d4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..a2c83c8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..7db0a4f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..8ec4465 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..f9353cb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..fe21337 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..ec27597 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..61334b4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..71e1e62 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..04b54c7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..1560efb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..4ff78c6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..f25c782 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..70a20c7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..9b93735 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..39475fd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..cd5b0f8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..f0a7a43 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..fb43397 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..dcc451e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..d6ed804 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..836322b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..64e2e45 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..1008fb1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..dae24c8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..c622986 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..18f61c7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..159b5e3 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..6bd2096 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c new file mode 100644 index 0000000..3f96a6d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h new file mode 100644 index 0000000..e7f6ec8 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c new file mode 100644 index 0000000..c8afcc4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h new file mode 100644 index 0000000..08a576e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..55bad07 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..fd04d94 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c new file mode 100644 index 0000000..c4eec34 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h new file mode 100644 index 0000000..6fad8ee --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..45dcd5f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..734cefa --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c new file mode 100644 index 0000000..76beba5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h new file mode 100644 index 0000000..9451b1e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..327134e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..7762209 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h new file mode 100644 index 0000000..af5a0fd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk b/e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk new file mode 100644 index 0000000..0109476 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c new file mode 100644 index 0000000..0d559a4 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c b/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/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/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h b/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/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/e2sim/e2apv1sim/ricsim/CMakeLists.txt b/e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/CMakeLists.txt rename to e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt diff --git a/e2sim/e2apv1sim/ricsim/CMakeLists.txt~ b/e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/CMakeLists.txt~ rename to e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt~ diff --git a/e2sim/e2apv1sim/ricsim/build_e2sim b/e2sim/previous/e2apv1sim/ricsim/build_e2sim similarity index 100% rename from e2sim/e2apv1sim/ricsim/build_e2sim rename to e2sim/previous/e2apv1sim/ricsim/build_e2sim diff --git a/e2sim/e2apv1sim/ricsim/encode_e2apv1.cpp b/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/encode_e2apv1.cpp rename to e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp diff --git a/e2sim/e2apv1sim/ricsim/encode_e2apv1.cpp~ b/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/encode_e2apv1.cpp~ rename to e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp~ diff --git a/e2sim/e2apv1sim/ricsim/encode_e2apv1.hpp b/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/encode_e2apv1.hpp rename to e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.hpp diff --git a/e2sim/e2apv1sim/ricsim/encode_kpm.cpp b/e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/encode_kpm.cpp rename to e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp diff --git a/e2sim/e2apv1sim/ricsim/encode_kpm.hpp b/e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/encode_kpm.hpp rename to e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp diff --git a/e2sim/e2apv1sim/ricsim/extras/ricsim.cpp b/e2sim/previous/e2apv1sim/ricsim/extras/ricsim.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/extras/ricsim.cpp rename to e2sim/previous/e2apv1sim/ricsim/extras/ricsim.cpp diff --git a/e2sim/e2apv1sim/ricsim/ricsim.cpp b/e2sim/previous/e2apv1sim/ricsim/ricsim.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/ricsim.cpp rename to e2sim/previous/e2apv1sim/ricsim/ricsim.cpp diff --git a/e2sim/e2apv1sim/ricsim/ricsim.hpp b/e2sim/previous/e2apv1sim/ricsim/ricsim.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/ricsim.hpp rename to e2sim/previous/e2apv1sim/ricsim/ricsim.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/asn/version.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/version.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/asn/version.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/version.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp b/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp b/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/DEF/e2sim_defs.h b/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/DEF/e2sim_defs.h rename to e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp~ b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp~ rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp~ diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp~ b/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp~ similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp~ rename to e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp~ diff --git a/e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c b/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c rename to e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c diff --git a/e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp b/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h b/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h rename to e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h diff --git a/e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp b/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h diff --git a/e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/ricsim/test/Misc/CMakeLists.txt b/e2sim/previous/e2apv1sim/ricsim/test/Misc/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Misc/CMakeLists.txt rename to e2sim/previous/e2apv1sim/ricsim/test/Misc/CMakeLists.txt diff --git a/e2sim/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp b/e2sim/previous/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 b/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 rename to e2sim/previous/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 diff --git a/e2sim/e2apv1sim/ricsim/test/WLG/CMakeLists.txt b/e2sim/previous/e2apv1sim/ricsim/test/WLG/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/WLG/CMakeLists.txt rename to e2sim/previous/e2apv1sim/ricsim/test/WLG/CMakeLists.txt diff --git a/e2sim/e2apv1sim/ricsim/test/WLG/build_wlg.sh b/e2sim/previous/e2apv1sim/ricsim/test/WLG/build_wlg.sh similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/WLG/build_wlg.sh rename to e2sim/previous/e2apv1sim/ricsim/test/WLG/build_wlg.sh diff --git a/e2sim/e2apv1sim/ricsim/test/WLG/ric_perf.cpp b/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_perf.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/WLG/ric_perf.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_perf.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp b/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/X2/CMakeLists.txt b/e2sim/previous/e2apv1sim/ricsim/test/X2/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/X2/CMakeLists.txt rename to e2sim/previous/e2apv1sim/ricsim/test/X2/CMakeLists.txt diff --git a/e2sim/e2apv1sim/ricsim/test/X2/x2agent.cpp b/e2sim/previous/e2apv1sim/ricsim/test/X2/x2agent.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/X2/x2agent.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/X2/x2agent.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/X2/x2term.cpp b/e2sim/previous/e2apv1sim/ricsim/test/X2/x2term.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/X2/x2term.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/X2/x2term.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/X2/x2termination_test.cpp b/e2sim/previous/e2apv1sim/ricsim/test/X2/x2termination_test.cpp similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/X2/x2termination_test.cpp rename to e2sim/previous/e2apv1sim/ricsim/test/X2/x2termination_test.cpp diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/README b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/README similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/README rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/README diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c diff --git a/e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h b/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h similarity index 100% rename from e2sim/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h rename to e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h diff --git a/e2sim/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes b/e2sim/previous/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes similarity index 100% rename from e2sim/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes rename to e2sim/previous/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes diff --git a/e2sim/e2apv1sim/ricsim/tools/build_helper.bash b/e2sim/previous/e2apv1sim/ricsim/tools/build_helper.bash similarity index 100% rename from e2sim/e2apv1sim/ricsim/tools/build_helper.bash rename to e2sim/previous/e2apv1sim/ricsim/tools/build_helper.bash diff --git a/e2sim/e2apv1sim/ricsim/tools/install_asn1c b/e2sim/previous/e2apv1sim/ricsim/tools/install_asn1c similarity index 100% rename from e2sim/e2apv1sim/ricsim/tools/install_asn1c rename to e2sim/previous/e2apv1sim/ricsim/tools/install_asn1c diff --git a/e2sim/e2apv1sim/ricsim/tools/install_dependencies b/e2sim/previous/e2apv1sim/ricsim/tools/install_dependencies similarity index 100% rename from e2sim/e2apv1sim/ricsim/tools/install_dependencies rename to e2sim/previous/e2apv1sim/ricsim/tools/install_dependencies diff --git a/e2sim/previous/e2apv1sim/simulation.txt b/e2sim/previous/e2apv1sim/simulation.txt new file mode 100644 index 0000000..c1eedb7 --- /dev/null +++ b/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/e2sim/e2apv1sim/src/ASN1/asn/asn.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/asn.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/codec.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/codec.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/common.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/common.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/common.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/common.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/context.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/context.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/context.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/context.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/length.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/length.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/length.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/length.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/opentype.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/opentype.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/opentype.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/opentype.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/tag.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/tag.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/tools.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/tools.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/ber/visitor.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/visitor.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/ber/visitor.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/ber/visitor.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/buffer.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/buffer.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/buffer.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/buffer.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/constraints.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/constraints.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/constraints.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/constraints.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/elements.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/elements.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/elements.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/elements.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/error_context.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/error_context.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/error_context.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/error_context.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/identifier.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/identifier.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/identifier.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/identifier.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/bstring.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/bstring.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/bstring.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/bstring.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/choice.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/choice.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/choice.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/choice.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/codec.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/codec.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/codec.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/codec.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/common.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/common.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/common.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/common.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/context.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/context.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/context.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/context.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/enumerated.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/enumerated.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/enumerated.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/enumerated.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/integer.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/integer.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/integer.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/integer.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/length.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/length.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/length.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/length.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/oid.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/oid.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/oid.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/oid.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/ostring.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/ostring.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/ostring.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/ostring.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/sequence.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/sequence.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/visitor.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/visitor.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/visitor.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/visitor.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/per/whole_number.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/per/whole_number.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/per/whole_number.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/per/whole_number.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/printer.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/printer.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/printer.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/printer.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/type_defs.h b/e2sim/previous/e2apv1sim/src/ASN1/asn/type_defs.h similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/type_defs.h rename to e2sim/previous/e2apv1sim/src/ASN1/asn/type_defs.h diff --git a/e2sim/e2apv1sim/src/ASN1/asn/utility.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/utility.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/utility.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/utility.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/value_traits.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/value_traits.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/value_traits.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/value_traits.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/variant.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/variant.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/variant.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/variant.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/asn/version.hpp b/e2sim/previous/e2apv1sim/src/ASN1/asn/version.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/asn/version.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/asn/version.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp diff --git a/e2sim/e2apv1sim/src/ASN1/lib/e2ap_config.hpp b/e2sim/previous/e2apv1sim/src/ASN1/lib/e2ap_config.hpp similarity index 100% rename from e2sim/e2apv1sim/src/ASN1/lib/e2ap_config.hpp rename to e2sim/previous/e2apv1sim/src/ASN1/lib/e2ap_config.hpp diff --git a/e2sim/e2apv1sim/src/DEF/e2sim_defs.cpp b/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.cpp similarity index 100% rename from e2sim/e2apv1sim/src/DEF/e2sim_defs.cpp rename to e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.cpp diff --git a/e2sim/e2apv1sim/src/DEF/e2sim_defs.h b/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h similarity index 100% rename from e2sim/e2apv1sim/src/DEF/e2sim_defs.h rename to e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h diff --git a/e2sim/e2apv1sim/src/E2AP/E2SM/e2sm.c b/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/E2SM/e2sm.c rename to e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c diff --git a/e2sim/e2apv1sim/src/E2AP/E2SM/e2sm.h b/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/E2SM/e2sm.h rename to e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml b/e2sim/previous/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml rename to e2sim/previous/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml diff --git a/e2sim/e2apv1sim/src/E2AP/XML/reference_constants.txt b/e2sim/previous/e2apv1sim/src/E2AP/XML/reference_constants.txt similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/XML/reference_constants.txt rename to e2sim/previous/e2apv1sim/src/E2AP/XML/reference_constants.txt diff --git a/e2sim/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c b/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c rename to e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c diff --git a/e2sim/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h b/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h rename to e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h diff --git a/e2sim/e2apv1sim/src/E2AP/e2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/e2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/src/E2AP/e2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/src/E2AP/e2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/src/SCTP/e2sim_sctp.c b/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c similarity index 100% rename from e2sim/e2apv1sim/src/SCTP/e2sim_sctp.c rename to e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c diff --git a/e2sim/e2apv1sim/src/SCTP/e2sim_sctp.cpp b/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp similarity index 100% rename from e2sim/e2apv1sim/src/SCTP/e2sim_sctp.cpp rename to e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp diff --git a/e2sim/e2apv1sim/src/SCTP/e2sim_sctp.h b/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h similarity index 100% rename from e2sim/e2apv1sim/src/SCTP/e2sim_sctp.h rename to e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h diff --git a/e2sim/e2apv1sim/src/SCTP/e2sim_sctp.hpp b/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp similarity index 100% rename from e2sim/e2apv1sim/src/SCTP/e2sim_sctp.hpp rename to e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp diff --git a/e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml rename to e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml diff --git a/e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml rename to e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml diff --git a/e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml rename to e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml diff --git a/e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml rename to e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml diff --git a/e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml rename to e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml diff --git a/e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml rename to e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.c b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.c rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.h b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.h rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_generate_messages.c b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.c similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_generate_messages.c rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.c diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_generate_messages.h b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.h similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_generate_messages.h rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.h diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.c b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.c similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.c rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.c diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.cpp b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.cpp similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.cpp rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.cpp diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.h b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.h similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.h rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.h diff --git a/e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.hpp b/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.hpp similarity index 100% rename from e2sim/e2apv1sim/src/X2AP/x2ap_message_handler.hpp rename to e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.hpp diff --git a/e2sim/e2apv1sim/test/Misc/CMakeLists.txt b/e2sim/previous/e2apv1sim/test/Misc/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/test/Misc/CMakeLists.txt rename to e2sim/previous/e2apv1sim/test/Misc/CMakeLists.txt diff --git a/e2sim/e2apv1sim/test/Misc/test_asn1c.cpp b/e2sim/previous/e2apv1sim/test/Misc/test_asn1c.cpp similarity index 100% rename from e2sim/e2apv1sim/test/Misc/test_asn1c.cpp rename to e2sim/previous/e2apv1sim/test/Misc/test_asn1c.cpp diff --git a/e2sim/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c b/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c rename to e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c diff --git a/e2sim/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h b/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h rename to e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h diff --git a/e2sim/e2apv1sim/test/Pendulum/Serial/adruino_serial.c b/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.c similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/Serial/adruino_serial.c rename to e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.c diff --git a/e2sim/e2apv1sim/test/Pendulum/Serial/adruino_serial.h b/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.h similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/Serial/adruino_serial.h rename to e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.h diff --git a/e2sim/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c b/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c rename to e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c diff --git a/e2sim/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h b/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h rename to e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h diff --git a/e2sim/e2apv1sim/test/Pendulum/demo_setup.txt b/e2sim/previous/e2apv1sim/test/Pendulum/demo_setup.txt similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/demo_setup.txt rename to e2sim/previous/e2apv1sim/test/Pendulum/demo_setup.txt diff --git a/e2sim/e2apv1sim/test/Pendulum/e2sim_closedloop.c b/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_closedloop.c similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/e2sim_closedloop.c rename to e2sim/previous/e2apv1sim/test/Pendulum/e2sim_closedloop.c diff --git a/e2sim/e2apv1sim/test/Pendulum/e2sim_serial.c b/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_serial.c similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/e2sim_serial.c rename to e2sim/previous/e2apv1sim/test/Pendulum/e2sim_serial.c diff --git a/e2sim/e2apv1sim/test/Pendulum/e2sim_test_client.c b/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_test_client.c similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/e2sim_test_client.c rename to e2sim/previous/e2apv1sim/test/Pendulum/e2sim_test_client.c diff --git a/e2sim/e2apv1sim/test/Pendulum/e2termination_test.cpp b/e2sim/previous/e2apv1sim/test/Pendulum/e2termination_test.cpp similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/e2termination_test.cpp rename to e2sim/previous/e2apv1sim/test/Pendulum/e2termination_test.cpp diff --git a/e2sim/e2apv1sim/test/Pendulum/pendulum.asn1 b/e2sim/previous/e2apv1sim/test/Pendulum/pendulum.asn1 similarity index 100% rename from e2sim/e2apv1sim/test/Pendulum/pendulum.asn1 rename to e2sim/previous/e2apv1sim/test/Pendulum/pendulum.asn1 diff --git a/e2sim/e2apv1sim/test/WLG/CMakeLists.txt b/e2sim/previous/e2apv1sim/test/WLG/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/test/WLG/CMakeLists.txt rename to e2sim/previous/e2apv1sim/test/WLG/CMakeLists.txt diff --git a/e2sim/e2apv1sim/test/WLG/build_wlg.sh b/e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh similarity index 100% rename from e2sim/e2apv1sim/test/WLG/build_wlg.sh rename to e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh diff --git a/e2sim/e2apv1sim/test/WLG/ric_perf.cpp b/e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp similarity index 100% rename from e2sim/e2apv1sim/test/WLG/ric_perf.cpp rename to e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp diff --git a/e2sim/e2apv1sim/test/WLG/ric_wlg.cpp b/e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp similarity index 100% rename from e2sim/e2apv1sim/test/WLG/ric_wlg.cpp rename to e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp diff --git a/e2sim/e2apv1sim/test/X2/CMakeLists.txt b/e2sim/previous/e2apv1sim/test/X2/CMakeLists.txt similarity index 100% rename from e2sim/e2apv1sim/test/X2/CMakeLists.txt rename to e2sim/previous/e2apv1sim/test/X2/CMakeLists.txt diff --git a/e2sim/e2apv1sim/test/X2/x2agent.cpp b/e2sim/previous/e2apv1sim/test/X2/x2agent.cpp similarity index 100% rename from e2sim/e2apv1sim/test/X2/x2agent.cpp rename to e2sim/previous/e2apv1sim/test/X2/x2agent.cpp diff --git a/e2sim/e2apv1sim/test/X2/x2term.cpp b/e2sim/previous/e2apv1sim/test/X2/x2term.cpp similarity index 100% rename from e2sim/e2apv1sim/test/X2/x2term.cpp rename to e2sim/previous/e2apv1sim/test/X2/x2term.cpp diff --git a/e2sim/e2apv1sim/test/X2/x2termination_test.cpp b/e2sim/previous/e2apv1sim/test/X2/x2termination_test.cpp similarity index 100% rename from e2sim/e2apv1sim/test/X2/x2termination_test.cpp rename to e2sim/previous/e2apv1sim/test/X2/x2termination_test.cpp diff --git a/e2sim/e2apv1sim/test/rmr_interface/README b/e2sim/previous/e2apv1sim/test/rmr_interface/README similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/README rename to e2sim/previous/e2apv1sim/test/rmr_interface/README diff --git a/e2sim/e2apv1sim/test/rmr_interface/rmr_install.sh b/e2sim/previous/e2apv1sim/test/rmr_interface/rmr_install.sh similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/rmr_install.sh rename to e2sim/previous/e2apv1sim/test/rmr_interface/rmr_install.sh diff --git a/e2sim/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh rename to e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh diff --git a/e2sim/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c rename to e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c diff --git a/e2sim/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh rename to e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh diff --git a/e2sim/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c b/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c rename to e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c diff --git a/e2sim/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h b/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h similarity index 100% rename from e2sim/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h rename to e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h diff --git a/e2sim/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes b/e2sim/previous/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes similarity index 100% rename from e2sim/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes rename to e2sim/previous/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes diff --git a/e2sim/e2apv1sim/tools/build_helper.bash b/e2sim/previous/e2apv1sim/tools/build_helper.bash similarity index 100% rename from e2sim/e2apv1sim/tools/build_helper.bash rename to e2sim/previous/e2apv1sim/tools/build_helper.bash diff --git a/e2sim/e2apv1sim/tools/install_asn1c b/e2sim/previous/e2apv1sim/tools/install_asn1c similarity index 100% rename from e2sim/e2apv1sim/tools/install_asn1c rename to e2sim/previous/e2apv1sim/tools/install_asn1c diff --git a/e2sim/e2apv1sim/tools/install_dependencies b/e2sim/previous/e2apv1sim/tools/install_dependencies similarity index 100% rename from e2sim/e2apv1sim/tools/install_dependencies rename to e2sim/previous/e2apv1sim/tools/install_dependencies diff --git a/e2sim/previous/e2apv1sim/ueMeasReport.txt b/e2sim/previous/e2apv1sim/ueMeasReport.txt new file mode 100644 index 0000000..32bf4d4 --- /dev/null +++ b/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/e2sim/e2sim.cpp b/e2sim/previous/e2sim.cpp similarity index 100% rename from e2sim/e2sim.cpp rename to e2sim/previous/e2sim.cpp diff --git a/e2sim/helm/README.md b/e2sim/previous/helm/README.md similarity index 100% rename from e2sim/helm/README.md rename to e2sim/previous/helm/README.md diff --git a/e2sim/helm/e2sim/Chart.yaml b/e2sim/previous/helm/e2sim/Chart.yaml similarity index 100% rename from e2sim/helm/e2sim/Chart.yaml rename to e2sim/previous/helm/e2sim/Chart.yaml diff --git a/e2sim/helm/e2sim/templates/_helpers.tpl b/e2sim/previous/helm/e2sim/templates/_helpers.tpl similarity index 100% rename from e2sim/helm/e2sim/templates/_helpers.tpl rename to e2sim/previous/helm/e2sim/templates/_helpers.tpl diff --git a/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl b/e2sim/previous/helm/e2sim/templates/bin/_e2sim-run.sh.tpl similarity index 100% rename from e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl rename to e2sim/previous/helm/e2sim/templates/bin/_e2sim-run.sh.tpl diff --git a/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml b/e2sim/previous/helm/e2sim/templates/configmap-e2sim-bin.yaml similarity index 100% rename from e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml rename to e2sim/previous/helm/e2sim/templates/configmap-e2sim-bin.yaml diff --git a/e2sim/helm/e2sim/templates/deployment.yaml b/e2sim/previous/helm/e2sim/templates/deployment.yaml similarity index 100% rename from e2sim/helm/e2sim/templates/deployment.yaml rename to e2sim/previous/helm/e2sim/templates/deployment.yaml diff --git a/e2sim/helm/e2sim/values.yaml b/e2sim/previous/helm/e2sim/values.yaml similarity index 100% rename from e2sim/helm/e2sim/values.yaml rename to e2sim/previous/helm/e2sim/values.yaml diff --git a/e2sim/helm/e2sim_install.sh b/e2sim/previous/helm/e2sim_install.sh similarity index 100% rename from e2sim/helm/e2sim_install.sh rename to e2sim/previous/helm/e2sim_install.sh diff --git a/e2sim/ricsim.cpp b/e2sim/previous/ricsim.cpp similarity index 100% rename from e2sim/ricsim.cpp rename to e2sim/previous/ricsim.cpp diff --git a/e2sim/src/ASN1/asn/asn.hpp b/e2sim/previous/src/ASN1/asn/asn.hpp similarity index 100% rename from e2sim/src/ASN1/asn/asn.hpp rename to e2sim/previous/src/ASN1/asn/asn.hpp diff --git a/e2sim/src/ASN1/asn/ber/codec.hpp b/e2sim/previous/src/ASN1/asn/ber/codec.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/codec.hpp rename to e2sim/previous/src/ASN1/asn/ber/codec.hpp diff --git a/e2sim/src/ASN1/asn/ber/common.hpp b/e2sim/previous/src/ASN1/asn/ber/common.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/common.hpp rename to e2sim/previous/src/ASN1/asn/ber/common.hpp diff --git a/e2sim/src/ASN1/asn/ber/context.hpp b/e2sim/previous/src/ASN1/asn/ber/context.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/context.hpp rename to e2sim/previous/src/ASN1/asn/ber/context.hpp diff --git a/e2sim/src/ASN1/asn/ber/length.hpp b/e2sim/previous/src/ASN1/asn/ber/length.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/length.hpp rename to e2sim/previous/src/ASN1/asn/ber/length.hpp diff --git a/e2sim/src/ASN1/asn/ber/opentype.hpp b/e2sim/previous/src/ASN1/asn/ber/opentype.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/opentype.hpp rename to e2sim/previous/src/ASN1/asn/ber/opentype.hpp diff --git a/e2sim/src/ASN1/asn/ber/tag.hpp b/e2sim/previous/src/ASN1/asn/ber/tag.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/tag.hpp rename to e2sim/previous/src/ASN1/asn/ber/tag.hpp diff --git a/e2sim/src/ASN1/asn/ber/tools.hpp b/e2sim/previous/src/ASN1/asn/ber/tools.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/tools.hpp rename to e2sim/previous/src/ASN1/asn/ber/tools.hpp diff --git a/e2sim/src/ASN1/asn/ber/visitor.hpp b/e2sim/previous/src/ASN1/asn/ber/visitor.hpp similarity index 100% rename from e2sim/src/ASN1/asn/ber/visitor.hpp rename to e2sim/previous/src/ASN1/asn/ber/visitor.hpp diff --git a/e2sim/src/ASN1/asn/buffer.hpp b/e2sim/previous/src/ASN1/asn/buffer.hpp similarity index 100% rename from e2sim/src/ASN1/asn/buffer.hpp rename to e2sim/previous/src/ASN1/asn/buffer.hpp diff --git a/e2sim/src/ASN1/asn/chunked_allocator.hpp b/e2sim/previous/src/ASN1/asn/chunked_allocator.hpp similarity index 100% rename from e2sim/src/ASN1/asn/chunked_allocator.hpp rename to e2sim/previous/src/ASN1/asn/chunked_allocator.hpp diff --git a/e2sim/src/ASN1/asn/constraints.hpp b/e2sim/previous/src/ASN1/asn/constraints.hpp similarity index 100% rename from e2sim/src/ASN1/asn/constraints.hpp rename to e2sim/previous/src/ASN1/asn/constraints.hpp diff --git a/e2sim/src/ASN1/asn/elements.hpp b/e2sim/previous/src/ASN1/asn/elements.hpp similarity index 100% rename from e2sim/src/ASN1/asn/elements.hpp rename to e2sim/previous/src/ASN1/asn/elements.hpp diff --git a/e2sim/src/ASN1/asn/error_context.hpp b/e2sim/previous/src/ASN1/asn/error_context.hpp similarity index 100% rename from e2sim/src/ASN1/asn/error_context.hpp rename to e2sim/previous/src/ASN1/asn/error_context.hpp diff --git a/e2sim/src/ASN1/asn/identifier.hpp b/e2sim/previous/src/ASN1/asn/identifier.hpp similarity index 100% rename from e2sim/src/ASN1/asn/identifier.hpp rename to e2sim/previous/src/ASN1/asn/identifier.hpp diff --git a/e2sim/src/ASN1/asn/per/binary_integer.hpp b/e2sim/previous/src/ASN1/asn/per/binary_integer.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/binary_integer.hpp rename to e2sim/previous/src/ASN1/asn/per/binary_integer.hpp diff --git a/e2sim/src/ASN1/asn/per/bstring.hpp b/e2sim/previous/src/ASN1/asn/per/bstring.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/bstring.hpp rename to e2sim/previous/src/ASN1/asn/per/bstring.hpp diff --git a/e2sim/src/ASN1/asn/per/choice.hpp b/e2sim/previous/src/ASN1/asn/per/choice.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/choice.hpp rename to e2sim/previous/src/ASN1/asn/per/choice.hpp diff --git a/e2sim/src/ASN1/asn/per/codec.hpp b/e2sim/previous/src/ASN1/asn/per/codec.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/codec.hpp rename to e2sim/previous/src/ASN1/asn/per/codec.hpp diff --git a/e2sim/src/ASN1/asn/per/common.hpp b/e2sim/previous/src/ASN1/asn/per/common.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/common.hpp rename to e2sim/previous/src/ASN1/asn/per/common.hpp diff --git a/e2sim/src/ASN1/asn/per/context.hpp b/e2sim/previous/src/ASN1/asn/per/context.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/context.hpp rename to e2sim/previous/src/ASN1/asn/per/context.hpp diff --git a/e2sim/src/ASN1/asn/per/enumerated.hpp b/e2sim/previous/src/ASN1/asn/per/enumerated.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/enumerated.hpp rename to e2sim/previous/src/ASN1/asn/per/enumerated.hpp diff --git a/e2sim/src/ASN1/asn/per/integer.hpp b/e2sim/previous/src/ASN1/asn/per/integer.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/integer.hpp rename to e2sim/previous/src/ASN1/asn/per/integer.hpp diff --git a/e2sim/src/ASN1/asn/per/length.hpp b/e2sim/previous/src/ASN1/asn/per/length.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/length.hpp rename to e2sim/previous/src/ASN1/asn/per/length.hpp diff --git a/e2sim/src/ASN1/asn/per/oid.hpp b/e2sim/previous/src/ASN1/asn/per/oid.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/oid.hpp rename to e2sim/previous/src/ASN1/asn/per/oid.hpp diff --git a/e2sim/src/ASN1/asn/per/ostring.hpp b/e2sim/previous/src/ASN1/asn/per/ostring.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/ostring.hpp rename to e2sim/previous/src/ASN1/asn/per/ostring.hpp diff --git a/e2sim/src/ASN1/asn/per/sequence.hpp b/e2sim/previous/src/ASN1/asn/per/sequence.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/sequence.hpp rename to e2sim/previous/src/ASN1/asn/per/sequence.hpp diff --git a/e2sim/src/ASN1/asn/per/sequence_of.hpp b/e2sim/previous/src/ASN1/asn/per/sequence_of.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/sequence_of.hpp rename to e2sim/previous/src/ASN1/asn/per/sequence_of.hpp diff --git a/e2sim/src/ASN1/asn/per/visitor.hpp b/e2sim/previous/src/ASN1/asn/per/visitor.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/visitor.hpp rename to e2sim/previous/src/ASN1/asn/per/visitor.hpp diff --git a/e2sim/src/ASN1/asn/per/whole_number.hpp b/e2sim/previous/src/ASN1/asn/per/whole_number.hpp similarity index 100% rename from e2sim/src/ASN1/asn/per/whole_number.hpp rename to e2sim/previous/src/ASN1/asn/per/whole_number.hpp diff --git a/e2sim/src/ASN1/asn/printer.hpp b/e2sim/previous/src/ASN1/asn/printer.hpp similarity index 100% rename from e2sim/src/ASN1/asn/printer.hpp rename to e2sim/previous/src/ASN1/asn/printer.hpp diff --git a/e2sim/src/ASN1/asn/type_defs.h b/e2sim/previous/src/ASN1/asn/type_defs.h similarity index 100% rename from e2sim/src/ASN1/asn/type_defs.h rename to e2sim/previous/src/ASN1/asn/type_defs.h diff --git a/e2sim/src/ASN1/asn/utility.hpp b/e2sim/previous/src/ASN1/asn/utility.hpp similarity index 100% rename from e2sim/src/ASN1/asn/utility.hpp rename to e2sim/previous/src/ASN1/asn/utility.hpp diff --git a/e2sim/src/ASN1/asn/value_traits.hpp b/e2sim/previous/src/ASN1/asn/value_traits.hpp similarity index 100% rename from e2sim/src/ASN1/asn/value_traits.hpp rename to e2sim/previous/src/ASN1/asn/value_traits.hpp diff --git a/e2sim/src/ASN1/asn/variant.hpp b/e2sim/previous/src/ASN1/asn/variant.hpp similarity index 100% rename from e2sim/src/ASN1/asn/variant.hpp rename to e2sim/previous/src/ASN1/asn/variant.hpp diff --git a/e2sim/src/ASN1/asn/version.hpp b/e2sim/previous/src/ASN1/asn/version.hpp similarity index 100% rename from e2sim/src/ASN1/asn/version.hpp rename to e2sim/previous/src/ASN1/asn/version.hpp diff --git a/e2sim/src/ASN1/generated/E2AP-Constants.hpp b/e2sim/previous/src/ASN1/generated/E2AP-Constants.hpp similarity index 100% rename from e2sim/src/ASN1/generated/E2AP-Constants.hpp rename to e2sim/previous/src/ASN1/generated/E2AP-Constants.hpp diff --git a/e2sim/src/ASN1/generated/E2AP-IEs.hpp b/e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp similarity index 100% rename from e2sim/src/ASN1/generated/E2AP-IEs.hpp rename to e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp diff --git a/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/e2sim/previous/src/ASN1/generated/E2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp rename to e2sim/previous/src/ASN1/generated/E2AP-PDU-Contents.hpp diff --git a/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/e2sim/previous/src/ASN1/generated/E2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp rename to e2sim/previous/src/ASN1/generated/E2AP-PDU-Descriptions.hpp diff --git a/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/e2sim/previous/src/ASN1/generated/X2AP-CommonDataTypes.hpp similarity index 100% rename from e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp rename to e2sim/previous/src/ASN1/generated/X2AP-CommonDataTypes.hpp diff --git a/e2sim/src/ASN1/generated/X2AP-Constants.hpp b/e2sim/previous/src/ASN1/generated/X2AP-Constants.hpp similarity index 100% rename from e2sim/src/ASN1/generated/X2AP-Constants.hpp rename to e2sim/previous/src/ASN1/generated/X2AP-Constants.hpp diff --git a/e2sim/src/ASN1/generated/X2AP-Containers.hpp b/e2sim/previous/src/ASN1/generated/X2AP-Containers.hpp similarity index 100% rename from e2sim/src/ASN1/generated/X2AP-Containers.hpp rename to e2sim/previous/src/ASN1/generated/X2AP-Containers.hpp diff --git a/e2sim/src/ASN1/generated/X2AP-IEs.hpp b/e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp similarity index 100% rename from e2sim/src/ASN1/generated/X2AP-IEs.hpp rename to e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp diff --git a/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/e2sim/previous/src/ASN1/generated/X2AP-PDU-Contents.hpp similarity index 100% rename from e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp rename to e2sim/previous/src/ASN1/generated/X2AP-PDU-Contents.hpp diff --git a/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/e2sim/previous/src/ASN1/generated/X2AP-PDU-Descriptions.hpp similarity index 100% rename from e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp rename to e2sim/previous/src/ASN1/generated/X2AP-PDU-Descriptions.hpp diff --git a/e2sim/src/ASN1/lib/asn_e2ap.cpp b/e2sim/previous/src/ASN1/lib/asn_e2ap.cpp similarity index 100% rename from e2sim/src/ASN1/lib/asn_e2ap.cpp rename to e2sim/previous/src/ASN1/lib/asn_e2ap.cpp diff --git a/e2sim/src/ASN1/lib/asn_e2ap.hpp b/e2sim/previous/src/ASN1/lib/asn_e2ap.hpp similarity index 100% rename from e2sim/src/ASN1/lib/asn_e2ap.hpp rename to e2sim/previous/src/ASN1/lib/asn_e2ap.hpp diff --git a/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/e2sim/previous/src/ASN1/lib/asn_e2ap_wrapper.hpp similarity index 100% rename from e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp rename to e2sim/previous/src/ASN1/lib/asn_e2ap_wrapper.hpp diff --git a/e2sim/src/ASN1/lib/asn_x2ap.cpp b/e2sim/previous/src/ASN1/lib/asn_x2ap.cpp similarity index 100% rename from e2sim/src/ASN1/lib/asn_x2ap.cpp rename to e2sim/previous/src/ASN1/lib/asn_x2ap.cpp diff --git a/e2sim/src/ASN1/lib/asn_x2ap.hpp b/e2sim/previous/src/ASN1/lib/asn_x2ap.hpp similarity index 100% rename from e2sim/src/ASN1/lib/asn_x2ap.hpp rename to e2sim/previous/src/ASN1/lib/asn_x2ap.hpp diff --git a/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/e2sim/previous/src/ASN1/lib/asn_x2ap_wrapper.hpp similarity index 100% rename from e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp rename to e2sim/previous/src/ASN1/lib/asn_x2ap_wrapper.hpp diff --git a/e2sim/src/ASN1/lib/e2ap_config.hpp b/e2sim/previous/src/ASN1/lib/e2ap_config.hpp similarity index 100% rename from e2sim/src/ASN1/lib/e2ap_config.hpp rename to e2sim/previous/src/ASN1/lib/e2ap_config.hpp diff --git a/e2sim/previous/src/DEF/e2sim_defs.cpp b/e2sim/previous/src/DEF/e2sim_defs.cpp new file mode 100644 index 0000000..f1730d3 --- /dev/null +++ b/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/e2sim/previous/src/DEF/e2sim_defs.h b/e2sim/previous/src/DEF/e2sim_defs.h new file mode 100644 index 0000000..cf4a0d6 --- /dev/null +++ b/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/e2sim/src/E2AP/E2SM/e2sm.c b/e2sim/previous/src/E2AP/E2SM/e2sm.c similarity index 100% rename from e2sim/src/E2AP/E2SM/e2sm.c rename to e2sim/previous/src/E2AP/E2SM/e2sm.c diff --git a/e2sim/src/E2AP/E2SM/e2sm.h b/e2sim/previous/src/E2AP/E2SM/e2sm.h similarity index 100% rename from e2sim/src/E2AP/E2SM/e2sm.h rename to e2sim/previous/src/E2AP/E2SM/e2sm.h diff --git a/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml b/e2sim/previous/src/E2AP/XML/E2AP_ErrorIndication.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ErrorIndication.xml diff --git a/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml b/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type1.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml rename to e2sim/previous/src/E2AP/XML/E2AP_RICindication_type1.xml diff --git a/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml b/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type2.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml rename to e2sim/previous/src/E2AP/XML/E2AP_RICindication_type2.xml diff --git a/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml rename to e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml diff --git a/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml rename to e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml diff --git a/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml rename to e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusFailure.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusFailure.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusResponse.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusResponse.xml diff --git a/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml rename to e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml diff --git a/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/e2sim/previous/src/E2AP/XML/E2AP_X2SetupFailure.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml rename to e2sim/previous/src/E2AP/XML/E2AP_X2SetupFailure.xml diff --git a/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/e2sim/previous/src/E2AP/XML/E2AP_X2SetupRequest.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml rename to e2sim/previous/src/E2AP/XML/E2AP_X2SetupRequest.xml diff --git a/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/e2sim/previous/src/E2AP/XML/E2AP_X2SetupResponse.xml similarity index 100% rename from e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml rename to e2sim/previous/src/E2AP/XML/E2AP_X2SetupResponse.xml diff --git a/e2sim/src/E2AP/XML/reference_constants.txt b/e2sim/previous/src/E2AP/XML/reference_constants.txt similarity index 100% rename from e2sim/src/E2AP/XML/reference_constants.txt rename to e2sim/previous/src/E2AP/XML/reference_constants.txt diff --git a/e2sim/src/E2AP/e2ap_asn1c_codec.c b/e2sim/previous/src/E2AP/e2ap_asn1c_codec.c similarity index 100% rename from e2sim/src/E2AP/e2ap_asn1c_codec.c rename to e2sim/previous/src/E2AP/e2ap_asn1c_codec.c diff --git a/e2sim/src/E2AP/e2ap_asn1c_codec.h b/e2sim/previous/src/E2AP/e2ap_asn1c_codec.h similarity index 100% rename from e2sim/src/E2AP/e2ap_asn1c_codec.h rename to e2sim/previous/src/E2AP/e2ap_asn1c_codec.h diff --git a/e2sim/src/E2AP/e2ap_message_handler.cpp b/e2sim/previous/src/E2AP/e2ap_message_handler.cpp similarity index 100% rename from e2sim/src/E2AP/e2ap_message_handler.cpp rename to e2sim/previous/src/E2AP/e2ap_message_handler.cpp diff --git a/e2sim/src/E2AP/e2ap_message_handler.hpp b/e2sim/previous/src/E2AP/e2ap_message_handler.hpp similarity index 100% rename from e2sim/src/E2AP/e2ap_message_handler.hpp rename to e2sim/previous/src/E2AP/e2ap_message_handler.hpp diff --git a/e2sim/previous/src/SCTP/e2sim_sctp.c b/e2sim/previous/src/SCTP/e2sim_sctp.c new file mode 100644 index 0000000..b4880f9 --- /dev/null +++ b/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/e2sim/previous/src/SCTP/e2sim_sctp.cpp b/e2sim/previous/src/SCTP/e2sim_sctp.cpp new file mode 100644 index 0000000..de68ec7 --- /dev/null +++ b/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/e2sim/previous/src/SCTP/e2sim_sctp.h b/e2sim/previous/src/SCTP/e2sim_sctp.h new file mode 100644 index 0000000..c102df0 --- /dev/null +++ b/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/e2sim/previous/src/SCTP/e2sim_sctp.hpp b/e2sim/previous/src/SCTP/e2sim_sctp.hpp new file mode 100644 index 0000000..b16fcf6 --- /dev/null +++ b/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/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml similarity index 100% rename from e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml rename to e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml diff --git a/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml similarity index 100% rename from e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml rename to e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml diff --git a/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml similarity index 100% rename from e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml rename to e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml diff --git a/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml similarity index 100% rename from e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml rename to e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml diff --git a/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml similarity index 100% rename from e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml rename to e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml diff --git a/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml similarity index 100% rename from e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml rename to e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml diff --git a/e2sim/src/X2AP/x2ap_asn_codec.c b/e2sim/previous/src/X2AP/x2ap_asn_codec.c similarity index 100% rename from e2sim/src/X2AP/x2ap_asn_codec.c rename to e2sim/previous/src/X2AP/x2ap_asn_codec.c diff --git a/e2sim/src/X2AP/x2ap_asn_codec.cpp b/e2sim/previous/src/X2AP/x2ap_asn_codec.cpp similarity index 100% rename from e2sim/src/X2AP/x2ap_asn_codec.cpp rename to e2sim/previous/src/X2AP/x2ap_asn_codec.cpp diff --git a/e2sim/src/X2AP/x2ap_asn_codec.h b/e2sim/previous/src/X2AP/x2ap_asn_codec.h similarity index 100% rename from e2sim/src/X2AP/x2ap_asn_codec.h rename to e2sim/previous/src/X2AP/x2ap_asn_codec.h diff --git a/e2sim/src/X2AP/x2ap_asn_codec.hpp b/e2sim/previous/src/X2AP/x2ap_asn_codec.hpp similarity index 100% rename from e2sim/src/X2AP/x2ap_asn_codec.hpp rename to e2sim/previous/src/X2AP/x2ap_asn_codec.hpp diff --git a/e2sim/src/X2AP/x2ap_generate_messages.c b/e2sim/previous/src/X2AP/x2ap_generate_messages.c similarity index 100% rename from e2sim/src/X2AP/x2ap_generate_messages.c rename to e2sim/previous/src/X2AP/x2ap_generate_messages.c diff --git a/e2sim/src/X2AP/x2ap_generate_messages.h b/e2sim/previous/src/X2AP/x2ap_generate_messages.h similarity index 100% rename from e2sim/src/X2AP/x2ap_generate_messages.h rename to e2sim/previous/src/X2AP/x2ap_generate_messages.h diff --git a/e2sim/src/X2AP/x2ap_message_handler.c b/e2sim/previous/src/X2AP/x2ap_message_handler.c similarity index 100% rename from e2sim/src/X2AP/x2ap_message_handler.c rename to e2sim/previous/src/X2AP/x2ap_message_handler.c diff --git a/e2sim/src/X2AP/x2ap_message_handler.cpp b/e2sim/previous/src/X2AP/x2ap_message_handler.cpp similarity index 100% rename from e2sim/src/X2AP/x2ap_message_handler.cpp rename to e2sim/previous/src/X2AP/x2ap_message_handler.cpp diff --git a/e2sim/src/X2AP/x2ap_message_handler.h b/e2sim/previous/src/X2AP/x2ap_message_handler.h similarity index 100% rename from e2sim/src/X2AP/x2ap_message_handler.h rename to e2sim/previous/src/X2AP/x2ap_message_handler.h diff --git a/e2sim/src/X2AP/x2ap_message_handler.hpp b/e2sim/previous/src/X2AP/x2ap_message_handler.hpp similarity index 100% rename from e2sim/src/X2AP/x2ap_message_handler.hpp rename to e2sim/previous/src/X2AP/x2ap_message_handler.hpp diff --git a/e2sim/test/Misc/CMakeLists.txt b/e2sim/previous/test/Misc/CMakeLists.txt similarity index 100% rename from e2sim/test/Misc/CMakeLists.txt rename to e2sim/previous/test/Misc/CMakeLists.txt diff --git a/e2sim/test/Misc/test_asn1c.cpp b/e2sim/previous/test/Misc/test_asn1c.cpp similarity index 100% rename from e2sim/test/Misc/test_asn1c.cpp rename to e2sim/previous/test/Misc/test_asn1c.cpp diff --git a/e2sim/test/Pendulum/Pendulum_asn_codec.c b/e2sim/previous/test/Pendulum/Pendulum_asn_codec.c similarity index 100% rename from e2sim/test/Pendulum/Pendulum_asn_codec.c rename to e2sim/previous/test/Pendulum/Pendulum_asn_codec.c diff --git a/e2sim/test/Pendulum/Pendulum_asn_codec.h b/e2sim/previous/test/Pendulum/Pendulum_asn_codec.h similarity index 100% rename from e2sim/test/Pendulum/Pendulum_asn_codec.h rename to e2sim/previous/test/Pendulum/Pendulum_asn_codec.h diff --git a/e2sim/test/Pendulum/Serial/adruino_serial.c b/e2sim/previous/test/Pendulum/Serial/adruino_serial.c similarity index 100% rename from e2sim/test/Pendulum/Serial/adruino_serial.c rename to e2sim/previous/test/Pendulum/Serial/adruino_serial.c diff --git a/e2sim/test/Pendulum/Serial/adruino_serial.h b/e2sim/previous/test/Pendulum/Serial/adruino_serial.h similarity index 100% rename from e2sim/test/Pendulum/Serial/adruino_serial.h rename to e2sim/previous/test/Pendulum/Serial/adruino_serial.h diff --git a/e2sim/test/Pendulum/Serial/arduino-serial-lib.c b/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.c similarity index 100% rename from e2sim/test/Pendulum/Serial/arduino-serial-lib.c rename to e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.c diff --git a/e2sim/test/Pendulum/Serial/arduino-serial-lib.h b/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.h similarity index 100% rename from e2sim/test/Pendulum/Serial/arduino-serial-lib.h rename to e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.h diff --git a/e2sim/test/Pendulum/demo_setup.txt b/e2sim/previous/test/Pendulum/demo_setup.txt similarity index 100% rename from e2sim/test/Pendulum/demo_setup.txt rename to e2sim/previous/test/Pendulum/demo_setup.txt diff --git a/e2sim/test/Pendulum/e2sim_closedloop.c b/e2sim/previous/test/Pendulum/e2sim_closedloop.c similarity index 100% rename from e2sim/test/Pendulum/e2sim_closedloop.c rename to e2sim/previous/test/Pendulum/e2sim_closedloop.c diff --git a/e2sim/test/Pendulum/e2sim_serial.c b/e2sim/previous/test/Pendulum/e2sim_serial.c similarity index 100% rename from e2sim/test/Pendulum/e2sim_serial.c rename to e2sim/previous/test/Pendulum/e2sim_serial.c diff --git a/e2sim/test/Pendulum/e2sim_test_client.c b/e2sim/previous/test/Pendulum/e2sim_test_client.c similarity index 100% rename from e2sim/test/Pendulum/e2sim_test_client.c rename to e2sim/previous/test/Pendulum/e2sim_test_client.c diff --git a/e2sim/test/Pendulum/e2termination_test.cpp b/e2sim/previous/test/Pendulum/e2termination_test.cpp similarity index 100% rename from e2sim/test/Pendulum/e2termination_test.cpp rename to e2sim/previous/test/Pendulum/e2termination_test.cpp diff --git a/e2sim/test/Pendulum/pendulum.asn1 b/e2sim/previous/test/Pendulum/pendulum.asn1 similarity index 100% rename from e2sim/test/Pendulum/pendulum.asn1 rename to e2sim/previous/test/Pendulum/pendulum.asn1 diff --git a/e2sim/test/WLG/CMakeLists.txt b/e2sim/previous/test/WLG/CMakeLists.txt similarity index 100% rename from e2sim/test/WLG/CMakeLists.txt rename to e2sim/previous/test/WLG/CMakeLists.txt diff --git a/e2sim/test/WLG/build_wlg.sh b/e2sim/previous/test/WLG/build_wlg.sh similarity index 100% rename from e2sim/test/WLG/build_wlg.sh rename to e2sim/previous/test/WLG/build_wlg.sh diff --git a/e2sim/test/WLG/ric_perf.cpp b/e2sim/previous/test/WLG/ric_perf.cpp similarity index 100% rename from e2sim/test/WLG/ric_perf.cpp rename to e2sim/previous/test/WLG/ric_perf.cpp diff --git a/e2sim/test/WLG/ric_wlg.cpp b/e2sim/previous/test/WLG/ric_wlg.cpp similarity index 100% rename from e2sim/test/WLG/ric_wlg.cpp rename to e2sim/previous/test/WLG/ric_wlg.cpp diff --git a/e2sim/test/X2/CMakeLists.txt b/e2sim/previous/test/X2/CMakeLists.txt similarity index 100% rename from e2sim/test/X2/CMakeLists.txt rename to e2sim/previous/test/X2/CMakeLists.txt diff --git a/e2sim/test/X2/x2agent.cpp b/e2sim/previous/test/X2/x2agent.cpp similarity index 100% rename from e2sim/test/X2/x2agent.cpp rename to e2sim/previous/test/X2/x2agent.cpp diff --git a/e2sim/test/X2/x2term.cpp b/e2sim/previous/test/X2/x2term.cpp similarity index 100% rename from e2sim/test/X2/x2term.cpp rename to e2sim/previous/test/X2/x2term.cpp diff --git a/e2sim/test/X2/x2termination_test.cpp b/e2sim/previous/test/X2/x2termination_test.cpp similarity index 100% rename from e2sim/test/X2/x2termination_test.cpp rename to e2sim/previous/test/X2/x2termination_test.cpp diff --git a/e2sim/test/rmr_interface/README b/e2sim/previous/test/rmr_interface/README similarity index 100% rename from e2sim/test/rmr_interface/README rename to e2sim/previous/test/rmr_interface/README diff --git a/e2sim/test/rmr_interface/rmr_install.sh b/e2sim/previous/test/rmr_interface/rmr_install.sh similarity index 100% rename from e2sim/test/rmr_interface/rmr_install.sh rename to e2sim/previous/test/rmr_interface/rmr_install.sh diff --git a/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/e2sim/previous/test/rmr_interface/tests/receiver/build_and_run_recvr.sh similarity index 100% rename from e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh rename to e2sim/previous/test/rmr_interface/tests/receiver/build_and_run_recvr.sh diff --git a/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/e2sim/previous/test/rmr_interface/tests/receiver/rmr_rcvr.c similarity index 100% rename from e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c rename to e2sim/previous/test/rmr_interface/tests/receiver/rmr_rcvr.c diff --git a/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/e2sim/previous/test/rmr_interface/tests/sender/build_and_run_sender.sh similarity index 100% rename from e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh rename to e2sim/previous/test/rmr_interface/tests/sender/build_and_run_sender.sh diff --git a/e2sim/test/rmr_interface/tests/sender/rmr_sender.c b/e2sim/previous/test/rmr_interface/tests/sender/rmr_sender.c similarity index 100% rename from e2sim/test/rmr_interface/tests/sender/rmr_sender.c rename to e2sim/previous/test/rmr_interface/tests/sender/rmr_sender.c diff --git a/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h b/e2sim/previous/test/rmr_interface/tests/sender/rmr_wrapper.h similarity index 100% rename from e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h rename to e2sim/previous/test/rmr_interface/tests/sender/rmr_wrapper.h diff --git a/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes b/e2sim/previous/tools/asn_defs/generate_e2ap_e2sm_codes similarity index 100% rename from e2sim/tools/asn_defs/generate_e2ap_e2sm_codes rename to e2sim/previous/tools/asn_defs/generate_e2ap_e2sm_codes diff --git a/e2sim/tools/build_helper.bash b/e2sim/previous/tools/build_helper.bash similarity index 100% rename from e2sim/tools/build_helper.bash rename to e2sim/previous/tools/build_helper.bash diff --git a/e2sim/tools/install_asn1c b/e2sim/previous/tools/install_asn1c similarity index 100% rename from e2sim/tools/install_asn1c rename to e2sim/previous/tools/install_asn1c diff --git a/e2sim/tools/install_dependencies b/e2sim/previous/tools/install_dependencies similarity index 100% rename from e2sim/tools/install_dependencies rename to e2sim/previous/tools/install_dependencies diff --git a/e2sim/src/ASN1c/ANY.c b/e2sim/src/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/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/e2sim/src/ASN1c/ANY.h b/e2sim/src/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/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/e2sim/src/ASN1c/BIT_STRING.c b/e2sim/src/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/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/e2sim/src/ASN1c/BIT_STRING.h b/e2sim/src/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/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/e2sim/src/ASN1c/BIT_STRING_oer.c b/e2sim/src/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/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/e2sim/src/ASN1c/CMakeLists.txt b/e2sim/src/ASN1c/CMakeLists.txt new file mode 100644 index 0000000..1f96e59 --- /dev/null +++ b/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/e2sim/src/ASN1c/Cause.c b/e2sim/src/ASN1c/Cause.c new file mode 100644 index 0000000..294c0a7 --- /dev/null +++ b/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/e2sim/src/ASN1c/Cause.h b/e2sim/src/ASN1c/Cause.h new file mode 100644 index 0000000..1c168e7 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseMisc.c b/e2sim/src/ASN1c/CauseMisc.c new file mode 100644 index 0000000..11ade29 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseMisc.h b/e2sim/src/ASN1c/CauseMisc.h new file mode 100644 index 0000000..44fb6b9 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseProtocol.c b/e2sim/src/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..d7d2008 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseProtocol.h b/e2sim/src/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..67008e3 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseRIC.c b/e2sim/src/ASN1c/CauseRIC.c new file mode 100644 index 0000000..b4a1dfb --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseRIC.h b/e2sim/src/ASN1c/CauseRIC.h new file mode 100644 index 0000000..187b6ec --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseRICservice.c b/e2sim/src/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..72dca60 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseRICservice.h b/e2sim/src/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..a247216 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseTransport.c b/e2sim/src/ASN1c/CauseTransport.c new file mode 100644 index 0000000..0ac9911 --- /dev/null +++ b/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/e2sim/src/ASN1c/CauseTransport.h b/e2sim/src/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f92578e --- /dev/null +++ b/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/e2sim/src/ASN1c/Criticality.c b/e2sim/src/ASN1c/Criticality.c new file mode 100644 index 0000000..8f9f73b --- /dev/null +++ b/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/e2sim/src/ASN1c/Criticality.h b/e2sim/src/ASN1c/Criticality.h new file mode 100644 index 0000000..76d1b89 --- /dev/null +++ b/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/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..c2350c2 --- /dev/null +++ b/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/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..3977363 --- /dev/null +++ b/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/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..d54f845 --- /dev/null +++ b/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/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h b/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..57f9cf4 --- /dev/null +++ b/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/e2sim/src/ASN1c/CriticalityDiagnostics.c b/e2sim/src/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..ed81ffc --- /dev/null +++ b/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/e2sim/src/ASN1c/CriticalityDiagnostics.h b/e2sim/src/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9500793 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2AP-PDU.c b/e2sim/src/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..8d6888d --- /dev/null +++ b/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/e2sim/src/ASN1c/E2AP-PDU.h b/e2sim/src/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..600e848 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2setupFailure.c b/e2sim/src/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..8f21633 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2setupFailure.h b/e2sim/src/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..ab89da4 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2setupRequest.c b/e2sim/src/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..20b2f35 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2setupRequest.h b/e2sim/src/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..c09d454 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2setupResponse.c b/e2sim/src/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..81dce04 --- /dev/null +++ b/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/e2sim/src/ASN1c/E2setupResponse.h b/e2sim/src/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..64fda6d --- /dev/null +++ b/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/e2sim/src/ASN1c/ENB-ID-Choice.c b/e2sim/src/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..2818f1c --- /dev/null +++ b/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/e2sim/src/ASN1c/ENB-ID-Choice.h b/e2sim/src/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..2caa477 --- /dev/null +++ b/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/e2sim/src/ASN1c/ENB-ID.c b/e2sim/src/ASN1c/ENB-ID.c new file mode 100644 index 0000000..d0280b1 --- /dev/null +++ b/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/e2sim/src/ASN1c/ENB-ID.h b/e2sim/src/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8e5dcf6 --- /dev/null +++ b/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/e2sim/src/ASN1c/ENGNB-ID.c b/e2sim/src/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..d1cfbf9 --- /dev/null +++ b/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/e2sim/src/ASN1c/ENGNB-ID.h b/e2sim/src/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..b5aabcf --- /dev/null +++ b/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/e2sim/src/ASN1c/ErrorIndication.c b/e2sim/src/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..7392861 --- /dev/null +++ b/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/e2sim/src/ASN1c/ErrorIndication.h b/e2sim/src/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..c3b4930 --- /dev/null +++ b/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/e2sim/src/ASN1c/GNB-CU-UP-ID.c b/e2sim/src/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..f6d50d8 --- /dev/null +++ b/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/e2sim/src/ASN1c/GNB-CU-UP-ID.h b/e2sim/src/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..a9152e3 --- /dev/null +++ b/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/e2sim/src/ASN1c/GNB-DU-ID.c b/e2sim/src/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..5e72065 --- /dev/null +++ b/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/e2sim/src/ASN1c/GNB-DU-ID.h b/e2sim/src/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..7b460d2 --- /dev/null +++ b/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/e2sim/src/ASN1c/GNB-ID-Choice.c b/e2sim/src/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..552725f --- /dev/null +++ b/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/e2sim/src/ASN1c/GNB-ID-Choice.h b/e2sim/src/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..4646519 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-ID.c b/e2sim/src/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..cc0a706 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-ID.h b/e2sim/src/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..6257cd1 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..cdc62e7 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..a3fa696 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..ee8b882 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..037537a --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..ea2e38c --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..8f15471 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c b/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..f942bce --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h b/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..0311e40 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalENB-ID.c b/e2sim/src/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..6ceca00 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalENB-ID.h b/e2sim/src/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..c8683e2 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalRIC-ID.c b/e2sim/src/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..9f85294 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalRIC-ID.h b/e2sim/src/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..7b7fc65 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalenGNB-ID.c b/e2sim/src/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..cdf362c --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalenGNB-ID.h b/e2sim/src/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..75933b6 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalgNB-ID.c b/e2sim/src/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..740f552 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalgNB-ID.h b/e2sim/src/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..ac18b81 --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalngeNB-ID.c b/e2sim/src/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..a3dfaed --- /dev/null +++ b/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/e2sim/src/ASN1c/GlobalngeNB-ID.h b/e2sim/src/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..843002a --- /dev/null +++ b/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/e2sim/src/ASN1c/INTEGER.c b/e2sim/src/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/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/e2sim/src/ASN1c/INTEGER.h b/e2sim/src/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/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/e2sim/src/ASN1c/INTEGER_oer.c b/e2sim/src/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/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/e2sim/src/ASN1c/InitiatingMessage.c b/e2sim/src/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..9dc4ccf --- /dev/null +++ b/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/e2sim/src/ASN1c/InitiatingMessage.h b/e2sim/src/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..cea345e --- /dev/null +++ b/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/e2sim/src/ASN1c/Makefile.am.asn1convert b/e2sim/src/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..62c2707 --- /dev/null +++ b/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/e2sim/src/ASN1c/Makefile.am.libasncodec b/e2sim/src/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..7a4c612 --- /dev/null +++ b/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/e2sim/src/ASN1c/NativeEnumerated.c b/e2sim/src/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/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/e2sim/src/ASN1c/NativeEnumerated.h b/e2sim/src/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/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/e2sim/src/ASN1c/NativeEnumerated_oer.c b/e2sim/src/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/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/e2sim/src/ASN1c/NativeInteger.c b/e2sim/src/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/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/e2sim/src/ASN1c/NativeInteger.h b/e2sim/src/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/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/e2sim/src/ASN1c/NativeInteger_oer.c b/e2sim/src/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/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/e2sim/src/ASN1c/OCTET_STRING.c b/e2sim/src/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/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/e2sim/src/ASN1c/OCTET_STRING.h b/e2sim/src/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/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/e2sim/src/ASN1c/OCTET_STRING_oer.c b/e2sim/src/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/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/e2sim/src/ASN1c/OPEN_TYPE.c b/e2sim/src/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/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/e2sim/src/ASN1c/OPEN_TYPE.h b/e2sim/src/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/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/e2sim/src/ASN1c/OPEN_TYPE_oer.c b/e2sim/src/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/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/e2sim/src/ASN1c/PLMN-Identity.c b/e2sim/src/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..d0a3d97 --- /dev/null +++ b/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/e2sim/src/ASN1c/PLMN-Identity.h b/e2sim/src/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..0083974 --- /dev/null +++ b/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/e2sim/src/ASN1c/Presence.c b/e2sim/src/ASN1c/Presence.c new file mode 100644 index 0000000..e28be1a --- /dev/null +++ b/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/e2sim/src/ASN1c/Presence.h b/e2sim/src/ASN1c/Presence.h new file mode 100644 index 0000000..9af00f6 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProcedureCode.c b/e2sim/src/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..31d0944 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProcedureCode.h b/e2sim/src/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..1d85971 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-Container.c b/e2sim/src/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4636657 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-Container.h b/e2sim/src/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..750426b --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ContainerList.c b/e2sim/src/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c434a72 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ContainerList.h b/e2sim/src/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..c895e7e --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c b/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..44a410d --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h b/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..178cc55 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c b/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..9019178 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h b/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..dd9a5be --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-Field.c b/e2sim/src/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..e6abc22 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-Field.h b/e2sim/src/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..a62f34b --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-FieldPair.c b/e2sim/src/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..1d70ccf --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-FieldPair.h b/e2sim/src/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..ca20e0d --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ID.c b/e2sim/src/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..c7466e3 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-ID.h b/e2sim/src/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..cb581b9 --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c b/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..d9b038e --- /dev/null +++ b/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/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h b/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..f733073 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunction-Item.c b/e2sim/src/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..3cc4346 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunction-Item.h b/e2sim/src/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..b791652 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionDefinition.c b/e2sim/src/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..2e60af0 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionDefinition.h b/e2sim/src/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..93dca22 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionID-Item.c b/e2sim/src/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..3fa7c18 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionID-Item.h b/e2sim/src/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..1566a03 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionID.c b/e2sim/src/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..964225d --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionID.h b/e2sim/src/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..dc825cf --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionIDcause-Item.c b/e2sim/src/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..ac39adc --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionIDcause-Item.h b/e2sim/src/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..338e066 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionRevision.c b/e2sim/src/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a2aa7ed --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionRevision.h b/e2sim/src/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..837b0e2 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctions-List.c b/e2sim/src/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..61f8e02 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctions-List.h b/e2sim/src/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..f1193cb --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionsID-List.c b/e2sim/src/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..1cc0185 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionsID-List.h b/e2sim/src/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..1cad48c --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionsIDcause-List.c b/e2sim/src/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..e5345f7 --- /dev/null +++ b/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/e2sim/src/ASN1c/RANfunctionsIDcause-List.h b/e2sim/src/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..4949436 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-Admitted-Item.c b/e2sim/src/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..edb976f --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-Admitted-Item.h b/e2sim/src/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..3ad904a --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-Admitted-List.c b/e2sim/src/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..457e9ff --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-Admitted-List.h b/e2sim/src/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..09d9711 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c b/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..3cc57e0 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h b/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..0d1b376 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c b/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..abb292f --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h b/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..c38717c --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c b/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..94f5b2f --- /dev/null +++ b/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/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h b/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..1bbbd47 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactionDefinition.c b/e2sim/src/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..9a0588b --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactionDefinition.h b/e2sim/src/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..9d89df9 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactionID.c b/e2sim/src/ASN1c/RICactionID.c new file mode 100644 index 0000000..56c67b4 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactionID.h b/e2sim/src/ASN1c/RICactionID.h new file mode 100644 index 0000000..68fc9b4 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactionType.c b/e2sim/src/ASN1c/RICactionType.c new file mode 100644 index 0000000..7fd484b --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactionType.h b/e2sim/src/ASN1c/RICactionType.h new file mode 100644 index 0000000..2f1f5ae --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c b/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..e47fa8d --- /dev/null +++ b/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/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h b/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..3e92509 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcallProcessID.c b/e2sim/src/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..4cfed50 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcallProcessID.h b/e2sim/src/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..dd303af --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolAckRequest.c b/e2sim/src/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..0fd327b --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolAckRequest.h b/e2sim/src/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..11fc016 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolAcknowledge.c b/e2sim/src/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..5e821fe --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolAcknowledge.h b/e2sim/src/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..34c81b3 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolFailure.c b/e2sim/src/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..76b0bdc --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolFailure.h b/e2sim/src/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..7a28d41 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolHeader.c b/e2sim/src/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..c79d335 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolHeader.h b/e2sim/src/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..2301656 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolMessage.c b/e2sim/src/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..9004d22 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolMessage.h b/e2sim/src/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..a501aaf --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolOutcome.c b/e2sim/src/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..36934f5 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolOutcome.h b/e2sim/src/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..fa6bcd8 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolRequest.c b/e2sim/src/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..c5ccbff --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolRequest.h b/e2sim/src/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..7bed8f2 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolStatus.c b/e2sim/src/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..9b183a8 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICcontrolStatus.h b/e2sim/src/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..54474e7 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICeventTriggerDefinition.c b/e2sim/src/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..ecf7fc1 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICeventTriggerDefinition.h b/e2sim/src/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..b9c63f6 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindication.c b/e2sim/src/ASN1c/RICindication.c new file mode 100644 index 0000000..acadb86 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindication.h b/e2sim/src/ASN1c/RICindication.h new file mode 100644 index 0000000..c6a89bf --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationHeader.c b/e2sim/src/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..64e4144 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationHeader.h b/e2sim/src/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..d6655e1 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationMessage.c b/e2sim/src/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..cea2831 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationMessage.h b/e2sim/src/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..5d8ee52 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationSN.c b/e2sim/src/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..453d308 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationSN.h b/e2sim/src/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..f286d17 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationType.c b/e2sim/src/ASN1c/RICindicationType.c new file mode 100644 index 0000000..8297a1e --- /dev/null +++ b/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/e2sim/src/ASN1c/RICindicationType.h b/e2sim/src/ASN1c/RICindicationType.h new file mode 100644 index 0000000..769ece8 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICrequestID.c b/e2sim/src/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dd83fcd --- /dev/null +++ b/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/e2sim/src/ASN1c/RICrequestID.h b/e2sim/src/ASN1c/RICrequestID.h new file mode 100644 index 0000000..25749c0 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceQuery.c b/e2sim/src/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..325f270 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceQuery.h b/e2sim/src/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..d15d587 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceUpdate.c b/e2sim/src/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..86f3600 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceUpdate.h b/e2sim/src/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..50bbff7 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c b/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..875bb38 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h b/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..a50b20d --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceUpdateFailure.c b/e2sim/src/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..369d521 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICserviceUpdateFailure.h b/e2sim/src/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..eb38105 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c b/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..0f7c74f --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h b/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..352ad75 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c b/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..c584cc1 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h b/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..12b34f8 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c b/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..105b324 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h b/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..654a420 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDetails.c b/e2sim/src/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..a1d91a4 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionDetails.h b/e2sim/src/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..c16b877 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionFailure.c b/e2sim/src/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..b206576 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionFailure.h b/e2sim/src/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..6ff580b --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionRequest.c b/e2sim/src/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..754c2d7 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionRequest.h b/e2sim/src/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..2baa323 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionResponse.c b/e2sim/src/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..a9088f3 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubscriptionResponse.h b/e2sim/src/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..24f30de --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubsequentAction.c b/e2sim/src/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..431301b --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubsequentAction.h b/e2sim/src/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..b4f4837 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubsequentActionType.c b/e2sim/src/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..fb10ee0 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICsubsequentActionType.h b/e2sim/src/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..1397029 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICtimeToWait.c b/e2sim/src/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..866c010 --- /dev/null +++ b/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/e2sim/src/ASN1c/RICtimeToWait.h b/e2sim/src/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..ac9cd3b --- /dev/null +++ b/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/e2sim/src/ASN1c/ResetRequest.c b/e2sim/src/ASN1c/ResetRequest.c new file mode 100644 index 0000000..8d2dc82 --- /dev/null +++ b/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/e2sim/src/ASN1c/ResetRequest.h b/e2sim/src/ASN1c/ResetRequest.h new file mode 100644 index 0000000..f92e0ed --- /dev/null +++ b/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/e2sim/src/ASN1c/ResetResponse.c b/e2sim/src/ASN1c/ResetResponse.c new file mode 100644 index 0000000..30f6ed9 --- /dev/null +++ b/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/e2sim/src/ASN1c/ResetResponse.h b/e2sim/src/ASN1c/ResetResponse.h new file mode 100644 index 0000000..139b953 --- /dev/null +++ b/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/e2sim/src/ASN1c/SuccessfulOutcome.c b/e2sim/src/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..1fbef5e --- /dev/null +++ b/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/e2sim/src/ASN1c/SuccessfulOutcome.h b/e2sim/src/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..5df655a --- /dev/null +++ b/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/e2sim/src/ASN1c/TimeToWait.c b/e2sim/src/ASN1c/TimeToWait.c new file mode 100644 index 0000000..ad3c27c --- /dev/null +++ b/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/e2sim/src/ASN1c/TimeToWait.h b/e2sim/src/ASN1c/TimeToWait.h new file mode 100644 index 0000000..7c06018 --- /dev/null +++ b/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/e2sim/src/ASN1c/TriggeringMessage.c b/e2sim/src/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..fb10f3c --- /dev/null +++ b/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/e2sim/src/ASN1c/TriggeringMessage.h b/e2sim/src/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..51bb220 --- /dev/null +++ b/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/e2sim/src/ASN1c/TypeOfError.c b/e2sim/src/ASN1c/TypeOfError.c new file mode 100644 index 0000000..6b4f37e --- /dev/null +++ b/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/e2sim/src/ASN1c/TypeOfError.h b/e2sim/src/ASN1c/TypeOfError.h new file mode 100644 index 0000000..7dee671 --- /dev/null +++ b/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/e2sim/src/ASN1c/UnsuccessfulOutcome.c b/e2sim/src/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..7cd5cd5 --- /dev/null +++ b/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/e2sim/src/ASN1c/UnsuccessfulOutcome.h b/e2sim/src/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..0a1cb1a --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_SEQUENCE_OF.c b/e2sim/src/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_SEQUENCE_OF.h b/e2sim/src/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_SET_OF.c b/e2sim/src/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_SET_OF.h b/e2sim/src/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_application.c b/e2sim/src/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_application.h b/e2sim/src/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_bit_data.c b/e2sim/src/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_bit_data.h b/e2sim/src/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_codecs.h b/e2sim/src/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_codecs_prim.c b/e2sim/src/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_codecs_prim.h b/e2sim/src/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_constant.h b/e2sim/src/ASN1c/asn_constant.h new file mode 100644 index 0000000..a6f348c --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_internal.c b/e2sim/src/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_internal.h b/e2sim/src/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_ioc.h b/e2sim/src/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_random_fill.c b/e2sim/src/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_random_fill.h b/e2sim/src/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/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/e2sim/src/ASN1c/asn_system.h b/e2sim/src/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/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/e2sim/src/ASN1c/ber_decoder.c b/e2sim/src/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/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/e2sim/src/ASN1c/ber_decoder.h b/e2sim/src/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/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/e2sim/src/ASN1c/ber_tlv_length.c b/e2sim/src/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/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/e2sim/src/ASN1c/ber_tlv_length.h b/e2sim/src/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/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/e2sim/src/ASN1c/ber_tlv_tag.c b/e2sim/src/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/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/e2sim/src/ASN1c/ber_tlv_tag.h b/e2sim/src/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_CHOICE.c b/e2sim/src/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_CHOICE.h b/e2sim/src/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_CHOICE_oer.c b/e2sim/src/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SEQUENCE.c b/e2sim/src/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SEQUENCE.h b/e2sim/src/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SEQUENCE_OF.c b/e2sim/src/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SEQUENCE_OF.h b/e2sim/src/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SEQUENCE_oer.c b/e2sim/src/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SET_OF.c b/e2sim/src/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SET_OF.h b/e2sim/src/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_SET_OF_oer.c b/e2sim/src/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_TYPE.c b/e2sim/src/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/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/e2sim/src/ASN1c/constr_TYPE.h b/e2sim/src/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/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/e2sim/src/ASN1c/constraints.c b/e2sim/src/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/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/e2sim/src/ASN1c/constraints.h b/e2sim/src/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/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/e2sim/src/ASN1c/converter-example.mk b/e2sim/src/ASN1c/converter-example.mk new file mode 100644 index 0000000..ef02a5b --- /dev/null +++ b/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/e2sim/src/ASN1c/der_encoder.c b/e2sim/src/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/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/e2sim/src/ASN1c/der_encoder.h b/e2sim/src/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/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/e2sim/src/ASN1c/oer_decoder.c b/e2sim/src/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/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/e2sim/src/ASN1c/oer_decoder.h b/e2sim/src/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/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/e2sim/src/ASN1c/oer_encoder.c b/e2sim/src/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/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/e2sim/src/ASN1c/oer_encoder.h b/e2sim/src/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/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/e2sim/src/ASN1c/oer_support.c b/e2sim/src/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/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/e2sim/src/ASN1c/oer_support.h b/e2sim/src/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/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/e2sim/src/ASN1c/pdu_collection.c b/e2sim/src/ASN1c/pdu_collection.c new file mode 100644 index 0000000..ea8309c --- /dev/null +++ b/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/e2sim/src/ASN1c/per_decoder.c b/e2sim/src/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/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/e2sim/src/ASN1c/per_decoder.h b/e2sim/src/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/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/e2sim/src/ASN1c/per_encoder.c b/e2sim/src/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/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/e2sim/src/ASN1c/per_encoder.h b/e2sim/src/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/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/e2sim/src/ASN1c/per_opentype.c b/e2sim/src/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/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/e2sim/src/ASN1c/per_opentype.h b/e2sim/src/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/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/e2sim/src/ASN1c/per_support.c b/e2sim/src/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/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/e2sim/src/ASN1c/per_support.h b/e2sim/src/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/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/e2sim/src/ASN1c/xer_decoder.c b/e2sim/src/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/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/e2sim/src/ASN1c/xer_decoder.h b/e2sim/src/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/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/e2sim/src/ASN1c/xer_encoder.c b/e2sim/src/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/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/e2sim/src/ASN1c/xer_encoder.h b/e2sim/src/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/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/e2sim/src/ASN1c/xer_support.c b/e2sim/src/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/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/e2sim/src/ASN1c/xer_support.h b/e2sim/src/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/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/e2sim/src/DEF/CMakeLists.txt b/e2sim/src/DEF/CMakeLists.txt new file mode 100644 index 0000000..21ed9f8 --- /dev/null +++ b/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/e2sim/src/SCTP/CMakeLists.txt b/e2sim/src/SCTP/CMakeLists.txt new file mode 100644 index 0000000..b069924 --- /dev/null +++ b/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/e2sim/src/SCTP/e2sim_sctp.cpp b/e2sim/src/SCTP/e2sim_sctp.cpp index de68ec7..ce9d649 100644 --- a/e2sim/src/SCTP/e2sim_sctp.cpp +++ b/e2sim/src/SCTP/e2sim_sctp.cpp @@ -206,6 +206,7 @@ int sctp_accept_connection(const char *server_ip_str, const int server_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); @@ -231,7 +232,10 @@ int sctp_accept_connection(const char *server_ip_str, const int server_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"); @@ -243,6 +247,7 @@ int sctp_send_data(int &socket_fd, sctp_buffer_t &data) 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); @@ -250,7 +255,8 @@ int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) perror("[SCTP] sctp_send_data"); exit(1); } - + */ + return 1; } /* @@ -263,11 +269,15 @@ Outcome of recv() 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"); diff --git a/e2sim/src/base/CMakeLists.txt b/e2sim/src/base/CMakeLists.txt new file mode 100644 index 0000000..7dd379e --- /dev/null +++ b/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/e2sim/src/base/e2sim.cpp b/e2sim/src/base/e2sim.cpp new file mode 100644 index 0000000..1f74389 --- /dev/null +++ b/e2sim/src/base/e2sim.cpp @@ -0,0 +1,194 @@ +/***************************************************************************** +# * +# 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 + +#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); + } +} + + + +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/e2sim/src/base/e2sim.hpp b/e2sim/src/base/e2sim.hpp new file mode 100644 index 0000000..16015ea --- /dev/null +++ b/e2sim/src/base/e2sim.hpp @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# 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 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: + + 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/e2sim/src/encoding/CMakeLists.txt b/e2sim/src/encoding/CMakeLists.txt new file mode 100644 index 0000000..755d00f --- /dev/null +++ b/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/e2sim/src/encoding/encode_e2apv1.cpp b/e2sim/src/encoding/encode_e2apv1.cpp new file mode 100644 index 0000000..5c33fef --- /dev/null +++ b/e2sim/src/encoding/encode_e2apv1.cpp @@ -0,0 +1,1074 @@ + + +/***************************************************************************** +# * +# 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 + + +#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 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); + + if (pres == RICsubscriptionRequest_IEs__value_PR_RANfunctionID) { + func_id = next_ie->value.choice.RANfunctionID; + } + + } + + return func_id; + +} + +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 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 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 *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 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); + +} + +/* +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); +} +*/ + diff --git a/e2sim/src/encoding/encode_e2apv1.hpp b/e2sim/src/encoding/encode_e2apv1.hpp new file mode 100644 index 0000000..b7747d4 --- /dev/null +++ b/e2sim/src/encoding/encode_e2apv1.hpp @@ -0,0 +1,59 @@ + +/***************************************************************************** +# * +# 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_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); + +} + +#endif diff --git a/e2sim/src/messagerouting/CMakeLists.txt b/e2sim/src/messagerouting/CMakeLists.txt new file mode 100644 index 0000000..9f85be9 --- /dev/null +++ b/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/e2sim/src/messagerouting/e2ap_asn1c_codec.c b/e2sim/src/messagerouting/e2ap_asn1c_codec.c new file mode 100644 index 0000000..111ca9f --- /dev/null +++ b/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/e2sim/src/messagerouting/e2ap_asn1c_codec.h b/e2sim/src/messagerouting/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/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/e2sim/src/messagerouting/e2ap_message_handler.cpp b/e2sim/src/messagerouting/e2ap_message_handler.cpp new file mode 100644 index 0000000..3e8da63 --- /dev/null +++ b/e2sim/src/messagerouting/e2ap_message_handler.cpp @@ -0,0 +1,294 @@ + + +/***************************************************************************** +# * +# 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 "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); + 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)); + 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/e2sim/src/messagerouting/e2ap_message_handler.hpp b/e2sim/src/messagerouting/e2ap_message_handler.hpp new file mode 100644 index 0000000..5ec288b --- /dev/null +++ b/e2sim/src/messagerouting/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 -- 2.16.6