Initial source code 27/4127/3
authorcschowdam <ChandraSekhar.Chowdam@commscope.com>
Tue, 16 Jun 2020 02:25:10 +0000 (02:25 +0000)
committerdemx8as6 <martin.skorupski@highstreet-technologies.com>
Tue, 16 Jun 2020 16:06:55 +0000 (18:06 +0200)
Initial source code and build scripts for o1-tr-069-adapter
Added tox.ini to fix the build issue
Removed deployment-guide.rst to avoid build issues
Removed user-guide.rst to avoid build issues
Modified overview.rst to avoid build issues

Issue-ID: OAM-113
Signed-off-by: cschowdam <ChandraSekhar.Chowdam@commscope.com>
Change-Id: Icd5358c8098c9d6df166723f7c89aac6db38b19f

363 files changed:
acs/application-booter/Dockerfile [new file with mode: 0644]
acs/application-booter/jar-with-dependencies.xml [new file with mode: 0644]
acs/application-booter/pom.xml [new file with mode: 0644]
acs/application-booter/src/main/java/org/commscope/tr069adapter/acs/booter/ACSServiceBooter.java [new file with mode: 0644]
acs/application-booter/src/main/java/org/commscope/tr069adapter/acs/booter/FilterInsecuredRequests.java [new file with mode: 0644]
acs/application-booter/src/main/resources/application.properties [new file with mode: 0644]
acs/application-booter/src/main/resources/log4j2.xml [new file with mode: 0644]
acs/application-booter/src/main/resources/schema-mariadb.sql [new file with mode: 0644]
acs/application-booter/src/main/resources/ssl-server.jks [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/deviceconnection/DeviceConnectTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/DeviceRPCRequestHandlerTests.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/RequestProcessorTestsUtils.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/InformForwarderTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/InvokeRPCTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/RPCResponseForwarderTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithNoPendingRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingAORequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingDORequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingDownloadRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingFRRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingGPARequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingGPVRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingRebootRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingSPARequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingSPVRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/BootInformTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/BootstrapInformTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/ConnRequestInformTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/InformAbortPendingReq.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/InformSwVersionUpdatedTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/PeriodicInformTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/TCInformTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/TransferCompleteTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/ValueChangeInformTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/AOOpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/DOOpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/DownloadOpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/FROpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/GPVOpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/OpResultTestWithNoPendingRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/OpResultTestWithPendingRequest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/RebootOpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/SPAOpResultTest.java [new file with mode: 0644]
acs/application-booter/src/test/resources/application.properties [new file with mode: 0644]
acs/common/pom.xml [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceDetails.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceRPCRequest.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceRPCResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/InformType.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationCode.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationDetails.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationOptions.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/ParameterDTO.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/ConfigurationData.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/CustomOperationCode.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/DeviceData.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/DeviceOperationRequestDetails.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/ParameterAttributeDTO.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069DeviceDetails.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069InformType.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069OperationCode.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069OperationDetails.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/ACSException.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/DeviceOperationException.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/MapperServiceException.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/SessionConcurrentAccessException.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/SessionManagerException.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/TR069EventProcessingException.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/faults/AcsFaultCode.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/AbstractDeviceInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/AutonomousTransferCompleteInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/BootInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/BootstrapInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/ConnectionRequestInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/PeriodicInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/TransferCompleteInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/ValueChangeInform.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/mapper/ACSServiceAPI.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/requestprocessor/service/TR069DeviceEventHandler.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/AddObjectResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DeleteObjectResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DeviceInformResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DownloadResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/FactoryResetResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/GetParameterAttributeResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/GetParameterValueResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/RebootResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/SetParameterAttributeResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/SetParameterValueResponse.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/AcsConstants.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/ErrorCode.java [new file with mode: 0644]
acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/Utility.java [new file with mode: 0644]
acs/common/src/main/resources/config/ErrorMessages_tr069.properties [new file with mode: 0644]
acs/cpe/pom.xml [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/CPEManagementService.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/TR069RPC.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceInformBuilder.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceRPCBuilder.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceRPCResponseBuilder.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/ConnectionReqEventHandler.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/ConnectionReqTimeoutHandler.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/DeviceEventHandler.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/DeviceValidator.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/processor/ConnectionReqEventProcessor.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AbstractObject.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AddObject.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AddObjectResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeleteObject.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeleteObjectResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeviceInfo.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Download.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DownloadResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/FactoryReset.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/FactoryResetResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Fault.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetOptions.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetOptionsResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterAttributes.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterAttributesResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterNames.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterNamesResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterValues.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterValuesResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetQueuedTransfers.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetQueuedTransfersResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetRPCMethods.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetRPCMethodsResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Inform.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/InformResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Reboot.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/RebootResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/ScheduleInform.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/ScheduleInformResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributes.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributesResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributesStruct.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValueFault.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValues.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValuesResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/TransferComplete.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/TransferCompleteResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Upload.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/UploadResponse.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/DeviceConnector.java [new file with mode: 0644]
acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/FactorySrvcDependencyConfig.java [new file with mode: 0644]
acs/nbi/pom.xml [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/ACSServiceAPIImpl.java [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/DeviceInformForwarder.java [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/DeviceRPCResponseForwarder.java [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/mapper/service/DeviceEventsMapperNotificationService.java [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/mapper/service/MapperRequestRESTService.java [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/util/MapperSrvcDependencyConfig.java [new file with mode: 0644]
acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/util/OperationIdGenerator.java [new file with mode: 0644]
acs/pom.xml [new file with mode: 0644]
acs/requestprocessor/pom.xml [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/DeviceOperationInterface.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/TR069DeviceEventHandlerImpl.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/CheckDeviceAvailability.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/ConfigureMultipleObject.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/CustomOperation.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRPCRequestRepository.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRPCRequestRepositoryHelper.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRepository.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/SessionRepository.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/CustomOperationData.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/SessionDTO.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/SessionState.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/TR069RequestProcessorData.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/SessionManagerEntity.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/TR069DeviceEntity.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/TR069DeviceRPCRequestEntity.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/handler/DeviceRPCRequestHandler.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/helper/TR069RequestProcessEngineHelper.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/helper/TR069RequestProcessEngineUtility.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/DeviceOperationManager.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/SessionManager.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/SessionTimeoutHandler.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/TR069EventNotificationService.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/TR069RequestProcessEngine.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/SessionManagerUtility.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069NBIUtility.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069RequestProcessorCacheUtil.java [new file with mode: 0644]
acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069RequestProcessorUtility.java [new file with mode: 0644]
common/pom.xml [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/ExecutionContext.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/Job.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/JobInfo.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerError.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerException.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerManager.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/TimeUnit.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/TriggerInfo.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzJob.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerConstants.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerManager.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerProducer.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerUtil.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/SpringApplicationContext.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/TimerAPIConstants.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/TriggerRuleProducer.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/CronExpressionTriggerRule.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/ExpiredTirggerRule.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/OneTimeTirggerRule.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/PeriodicForeverTriggerRule.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/PeriodicTriggerRule.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/TriggerRule.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/timer/TimerException.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/timer/TimerListener.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/timer/TimerServiceManagerAPI.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/timer/impl/TimerHandlerDM.java [new file with mode: 0644]
common/src/main/java/org/commscope/tr069adapter/common/timer/impl/TimerServiceManagerAPIImpl.java [new file with mode: 0644]
config-data/Dockerfile [new file with mode: 0644]
config-data/pom.xml [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/ConfigDataServiceApplication.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/constants/ConfigurationServiceConstant.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/constants/Utility.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/controllers/ConfugurationDataController.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/dto/ConfigurationData.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/exceptions/InvalidConfigurationServiceException.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/model/ConfigFileContent.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/parser/ConfigurationXMLDataParser.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/repository/ConfigurationDataRepository.java [new file with mode: 0644]
config-data/src/main/java/org/commscope/tr069adapter/config/service/ConfigurationDataService.java [new file with mode: 0644]
config-data/src/main/resources/application.properties [new file with mode: 0644]
config-data/src/main/resources/log4j2.xml [new file with mode: 0644]
config-data/src/main/resources/schema-mariadb.sql [new file with mode: 0644]
config-data/src/main/resources/xsd/ConfigurationData.xsd [new file with mode: 0644]
config-data/src/test/java/com/commscope/tr069adapter/config/ConfigDataApplicationTests.java [new file with mode: 0644]
config-data/src/test/java/org/commscope/tr069adapter/config/ConfigDataTestsUtils.java [new file with mode: 0644]
config-data/src/test/java/org/commscope/tr069adapter/config/ConfugurationDataControllerTests.java [new file with mode: 0644]
config-data/src/test/resources/application.properties [new file with mode: 0644]
db/Dockerfile [new file with mode: 0644]
db/config/CSAdapter_DB_password.txt [new file with mode: 0644]
db/config/CSAdapter_DB_user.txt [new file with mode: 0644]
db/config/parameter.cnf [new file with mode: 0644]
db/config/setup.sql [new file with mode: 0644]
db/pom.xml [new file with mode: 0644]
docs/_static/TR-069AdapterOverview.png [new file with mode: 0644]
docs/overview.rst
eclipse-formatter.xml [new file with mode: 0644]
factory/Dockerfile [new file with mode: 0644]
factory/pom.xml [new file with mode: 0644]
factory/src/main/java/org/commscope/tr069adapter/factory/FactoryDataAccesorApplication.java [new file with mode: 0644]
factory/src/main/java/org/commscope/tr069adapter/factory/controllers/FactoryDataController.java [new file with mode: 0644]
factory/src/main/resources/application.properties [new file with mode: 0644]
factory/src/main/resources/log4j2.xml [new file with mode: 0644]
factory/src/test/java/com/commscope/tr069adapter/imports/FactoryDataAccesorApplicationTests.java [new file with mode: 0644]
mapper/Dockerfile [new file with mode: 0644]
mapper/csadapter.properties [new file with mode: 0644]
mapper/error-code-mapping.json [new file with mode: 0644]
mapper/mapper-schema/CSDMYangMONameMapping.txt [new file with mode: 0644]
mapper/onecell-mo-metadata.json [new file with mode: 0644]
mapper/pom.xml [new file with mode: 0644]
mapper/rpc_set_input.xml [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/ErrorCodeMetaData.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/MOMetaData.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/MapperConfigProperties.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/ACSNotificationHandler.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/ACSRequestSender.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/controller/ACSNotificationReceiver.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/impl/ACSNotificationHandlerImpl.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/impl/PnPPreProvisioningHandler.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/boot/MapperServiceBooter.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/ErrorCode.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/ErrorCodeDetails.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfRequest.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfResponse.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfServerDetails.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetconfServerManagementError.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/VESNotification.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/model/VESNotificationResponse.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfNotificationSender.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfRequestHandler.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfServerManager.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/controller/NetConfRequestReceiver.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/impl/NetConfRequestHandlerImpl.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/sync/SynchronizedRequestHandler.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/util/ErrorCodeUtil.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/util/MOMetaDataUtil.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/util/NetconfToTr069MapperUtil.java [new file with mode: 0644]
mapper/src/main/java/org/commscope/tr069adapter/mapper/ves/VESNotificationSender.java [new file with mode: 0644]
mapper/src/main/resources/application.properties [new file with mode: 0644]
mapper/src/main/resources/log4j2.xml [new file with mode: 0644]
mapper/src/test/java/org/commscope/tr069adapter/mapper/ACSNotificationHandlerImplTest.java [new file with mode: 0644]
mapper/src/test/java/org/commscope/tr069adapter/mapper/NetConfRequestReceiverTest.java [new file with mode: 0644]
mapper/src/test/java/org/commscope/tr069adapter/mapper/NetConfServerManagerTest.java [new file with mode: 0644]
mapper/src/test/java/org/commscope/tr069adapter/mapper/NetconfToTr069MapperUtilTest.java [new file with mode: 0644]
mapper/src/test/java/org/commscope/tr069adapter/mapper/PnPPreProvisioningHandlerTest.java [new file with mode: 0644]
mapper/src/test/resources/application.properties [new file with mode: 0644]
netconf-server/Dockerfile [new file with mode: 0644]
netconf-server/docker-entrypoint.sh [new file with mode: 0644]
netconf-server/jar-with-dependencies.xml [new file with mode: 0644]
netconf-server/pom.xml [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/boot/NetConfServiceBooter.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/config/NetConfServerProperties.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/dao/NetConfServerDetailsRepository.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/entity/NetConfServerDetailsEntity.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/error/RetryFailedException.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/error/ServerPortAllocationException.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/notification/NetConfSessionUtil.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/notification/NotificationHandler.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/operations/CustomOperationsCreator.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/restapi/NetConfServerManagerRestApi.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/restapi/NotificationReceiverService.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/CreateSubscription.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/DeleteConfigOperation.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/GetConfigOperation.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/GetOperation.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationCommit.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationLock.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationUnLock.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SetConfigOperation.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SoftwareActivateOperation.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SoftwareDownloadOperation.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/XmlUtility.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/NetConfServerManagerImpl.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/NetconfServerStarter.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/RestartNetconfServerHandler.java [new file with mode: 0644]
netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/helper/ServerPortAllocationHelper.java [new file with mode: 0644]
netconf-server/src/main/resources/application.properties [new file with mode: 0644]
netconf-server/src/main/resources/log4j2.xml [new file with mode: 0644]
netconf-server/src/main/resources/schema-mariadb.sql [new file with mode: 0644]
netconf-server/src/test/java/org/commscope/tr069adapter/netconf/error/ServerPortAllocationExceptionTest.java [new file with mode: 0644]
netconf-server/src/test/java/org/commscope/tr069adapter/netconf/operations/CustomOperationsCreatorTest.java [new file with mode: 0644]
netconf-server/src/test/java/org/commscope/tr069adapter/netconf/restapi/NetConfServerManagerRestApiTest.java [new file with mode: 0644]
netconf-server/src/test/java/org/commscope/tr069adapter/netconf/restapi/NotificationServerRestApiTest.java [new file with mode: 0644]
netconf-server/src/test/java/org/commscope/tr069adapter/netconf/rpc/XmlUtilityTest.java [new file with mode: 0644]
netconf-server/src/test/java/org/commscope/tr069adapter/netconf/server/RestartNetconfServerHandlerTest.java [new file with mode: 0644]
netconf-server/src/test/resources/application.properties [new file with mode: 0644]
pom.xml [new file with mode: 0644]
tox.ini [new file with mode: 0644]
ves-agent/Dockerfile [new file with mode: 0644]
ves-agent/pom.xml [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/InformEventData.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/VesConfiguration.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/boot/VESAgentServiceBooter.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/AlarmMappingHandler.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/PnfRegMappingHandler.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/VESAgentService.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/exception/InvalidFaultOperationException.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/AlarmFrameWorkSeverityEnum.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/AlarmNotificationTypeEnum.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/DeviceAlarmConstant.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/DeviceAlarmSeverityEnum.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/ExpeditedEvent.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/NotificationTypeEnum.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/Parser.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/http/HttpRequestSender.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/CommonEventHeader.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/Event.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/EventMessage.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/FaultFields.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/HeartbeatFields.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/PnfRegEventAdditionalFeilds.java [new file with mode: 0644]
ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/PnfRegEventFields.java [new file with mode: 0644]
ves-agent/src/main/resources/application.properties [new file with mode: 0644]
ves-agent/src/main/resources/log4j2.xml [new file with mode: 0644]
ves-agent/src/test/java/org/commscope/tr069adapter/vesagent/test/VESAgentServiceRestTest.java [new file with mode: 0644]
ves-agent/src/test/resources/application.properties [new file with mode: 0644]

diff --git a/acs/application-booter/Dockerfile b/acs/application-booter/Dockerfile
new file mode 100644 (file)
index 0000000..0e92bf2
--- /dev/null
@@ -0,0 +1,43 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM openjdk:8-alpine\r
+\r
+ARG JAR\r
+\r
+ENV ACS_REST_PORT=9977\r
+ENV ACS_ADDITIONAL_REST_PORT=9975\r
+ENV ACS_SSL_ENABLED=false\r
+ENV CERT_FILE=/logs\r
+\r
+ENV DB_USERNAME=root\r
+ENV DB_PASSWORD=root\r
+ENV DB_SERVICE=tr069adapter-mariadb\r
+ENV DB_NAME=dmsdb\r
+ENV MAPPER_REST_PORT=9999\r
+ENV FACTORY_REST_PORT=8089\r
+ENV FACTORY_REST_HOST=tr069adapter-acs-factorydb\r
+ENV MAPPER_REST_HOST=tr069adapter-netconfig-mapper\r
+\r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD target/${JAR} ./lib/application-booter.jar\r
+\r
+EXPOSE ${ACS_REST_PORT} ${ACS_ADDITIONAL_REST_PORT}\r
+ENTRYPOINT ["java", "-jar", "./lib/application-booter.jar"]\r
diff --git a/acs/application-booter/jar-with-dependencies.xml b/acs/application-booter/jar-with-dependencies.xml
new file mode 100644 (file)
index 0000000..4983884
--- /dev/null
@@ -0,0 +1,40 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">\r
+  <!-- TODO: a jarjar format would be better -->\r
+  <id>jar-with-dependencies</id>\r
+  <formats>\r
+    <format>jar</format>\r
+  </formats>\r
+  <includeBaseDirectory>false</includeBaseDirectory>\r
+  <dependencySets>\r
+    <dependencySet>\r
+      <outputDirectory>target</outputDirectory>\r
+      <useProjectArtifact>true</useProjectArtifact>\r
+      <unpack>true</unpack>\r
+      <scope>runtime</scope>\r
+    </dependencySet>\r
+  </dependencySets>\r
+</assembly>\r
diff --git a/acs/application-booter/pom.xml b/acs/application-booter/pom.xml
new file mode 100644 (file)
index 0000000..3accec2
--- /dev/null
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter.acs</groupId>\r
+      <artifactId>acs</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter.acs.booter</groupId>\r
+   <artifactId>application-booter</artifactId>\r
+   <name>Application Booter</name>\r
+   <licenses>\r
+      <license>\r
+         <name>The Apache Software License, Version 2.0</name>\r
+         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
+      </license>\r
+   </licenses>\r
+   <repositories>\r
+      <repository>\r
+         <id>onap-releases</id>\r
+         <name>onap-releases</name>\r
+         <url>https://nexus.onap.org/content/repositories/releases/</url>\r
+      </repository>\r
+   </repositories>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-acs</docker.image.name>\r
+   </properties>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework</groupId>\r
+         <artifactId>spring-jms</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>javax.xml.soap</groupId>\r
+         <artifactId>javax.xml.soap-api</artifactId>\r
+         <version>1.4.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.lmax</groupId>\r
+         <artifactId>disruptor</artifactId>\r
+         <version>3.4.2</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-activemq</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.apache.activemq</groupId>\r
+         <artifactId>activemq-broker</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.fasterxml.jackson.core</groupId>\r
+         <artifactId>jackson-databind</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.common</groupId>\r
+         <artifactId>common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.cpe</groupId>\r
+         <artifactId>cpe</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.requestprocessor</groupId>\r
+         <artifactId>requestprocessor</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.nbi</groupId>\r
+         <artifactId>acsnbi</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.google.guava</groupId>\r
+         <artifactId>guava</artifactId>\r
+         <version>23.6-jre</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.apache.httpcomponents</groupId>\r
+         <artifactId>httpcore</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>sax</groupId>\r
+         <artifactId>sax</artifactId>\r
+         <version>2.0.1</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.mockito</groupId>\r
+         <artifactId>mockito-core</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit-dep</artifactId>\r
+         <version>4.11</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.h2database</groupId>\r
+         <artifactId>h2</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-maven-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-surefire-plugin</artifactId>\r
+            <configuration>\r
+               <skipTests>false</skipTests>\r
+            </configuration>\r
+         </plugin>\r
+         <plugin>\r
+            <artifactId>maven-failsafe-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/acs/application-booter/src/main/java/org/commscope/tr069adapter/acs/booter/ACSServiceBooter.java b/acs/application-booter/src/main/java/org/commscope/tr069adapter/acs/booter/ACSServiceBooter.java
new file mode 100644 (file)
index 0000000..37dc186
--- /dev/null
@@ -0,0 +1,218 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.booter;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_REQ_Q;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_NOTIFICATION_Q;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_OP_RESULT_Q;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.TR069_NBI_REQUEST_Q;\r
+\r
+import java.util.Arrays;\r
+\r
+import javax.jms.ConnectionFactory;\r
+\r
+import org.apache.activemq.ActiveMQConnectionFactory;\r
+import org.apache.activemq.RedeliveryPolicy;\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.activemq.broker.region.policy.RedeliveryPolicyMap;\r
+import org.apache.activemq.command.ActiveMQQueue;\r
+import org.apache.catalina.connector.Connector;\r
+import org.springframework.beans.factory.annotation.Value;\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+import org.springframework.boot.autoconfigure.domain.EntityScan;\r
+import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;\r
+import org.springframework.boot.web.client.RestTemplateBuilder;\r
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;\r
+import org.springframework.boot.web.servlet.FilterRegistrationBean;\r
+import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;\r
+import org.springframework.context.annotation.Bean;\r
+import org.springframework.context.annotation.ComponentScan;\r
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;\r
+import org.springframework.jms.annotation.EnableJms;\r
+import org.springframework.jms.config.DefaultJmsListenerContainerFactory;\r
+import org.springframework.jms.config.JmsListenerContainerFactory;\r
+import org.springframework.jms.support.converter.MappingJackson2MessageConverter;\r
+import org.springframework.jms.support.converter.MessageConverter;\r
+import org.springframework.jms.support.converter.MessageType;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@EnableJms\r
+@SpringBootApplication\r
+@ComponentScan({"org.commscope.tr069adapter.acs", "org.commscope.tr069adapter.common"})\r
+@EnableJpaRepositories("org.commscope.tr069adapter.acs")\r
+@EntityScan("org.commscope.tr069adapter.acs.requestprocessor.entity")\r
+public class ACSServiceBooter {\r
+\r
+  public static void main(String[] args) {\r
+    SpringApplication.run(ACSServiceBooter.class, args);\r
+  }\r
+\r
+  @Bean\r
+  public RestTemplate restTemplate(RestTemplateBuilder builder) {\r
+    return builder.build();\r
+  }\r
+\r
+\r
+  /*\r
+   * JMS Configuration Defining the connection factories used in the application Setting the\r
+   * Re-delivery configuration goes here\r
+   */\r
+  @Bean\r
+  public BrokerService broker() throws Exception {\r
+    final BrokerService broker = new BrokerService();\r
+    broker.addConnector("tcp://localhost:61616");\r
+    broker.addConnector("vm://localhost");\r
+    broker.setPersistent(false);\r
+    return broker;\r
+  }\r
+\r
+  @Bean\r
+  public ConnectionFactory jmsConnectionFactory() {\r
+    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();\r
+    connectionFactory\r
+        .setTrustedPackages(Arrays.asList("org.commscope", "org.commscope.tr069adapter"));\r
+    connectionFactory.setMaxThreadPoolSize(7);\r
+\r
+    ActiveMQQueue tr069nbiReqQueue = new ActiveMQQueue(TR069_NBI_REQUEST_Q);\r
+    RedeliveryPolicy tr069nbiReqQueuePolicy = new RedeliveryPolicy();\r
+    tr069nbiReqQueuePolicy.setInitialRedeliveryDelay(30000);\r
+    tr069nbiReqQueuePolicy.setUseCollisionAvoidance(true);\r
+    tr069nbiReqQueuePolicy.setRedeliveryDelay(30000);\r
+    tr069nbiReqQueuePolicy.setUseExponentialBackOff(false);\r
+    tr069nbiReqQueuePolicy.setMaximumRedeliveries(3);\r
+    tr069nbiReqQueuePolicy.setDestination(tr069nbiReqQueue);\r
+\r
+    ActiveMQQueue crQueue = new ActiveMQQueue(CR_REQ_Q);\r
+    RedeliveryPolicy crQueuePolicy = new RedeliveryPolicy();\r
+    crQueuePolicy.setInitialRedeliveryDelay(18000);\r
+    crQueuePolicy.setUseCollisionAvoidance(true);\r
+    crQueuePolicy.setRedeliveryDelay(18000);\r
+    crQueuePolicy.setUseExponentialBackOff(true);\r
+    crQueuePolicy.setBackOffMultiplier(2);\r
+    crQueuePolicy.setMaximumRedeliveries(4);\r
+    crQueuePolicy.setDestination(crQueue);\r
+\r
+    ActiveMQQueue notificationQueue = new ActiveMQQueue(NBI_NOTIFICATION_Q);\r
+    RedeliveryPolicy notificationQueuePolicy = new RedeliveryPolicy();\r
+    notificationQueuePolicy.setInitialRedeliveryDelay(30000);\r
+    notificationQueuePolicy.setUseCollisionAvoidance(true);\r
+    notificationQueuePolicy.setRedeliveryDelay(30000);\r
+    notificationQueuePolicy.setUseExponentialBackOff(false);\r
+    notificationQueuePolicy.setMaximumRedeliveries(5);\r
+    notificationQueuePolicy.setDestination(notificationQueue);\r
+\r
+    ActiveMQQueue opResQueue = new ActiveMQQueue(NBI_OP_RESULT_Q);\r
+    RedeliveryPolicy opResQueuePolicy = new RedeliveryPolicy();\r
+    opResQueuePolicy.setInitialRedeliveryDelay(30000);\r
+    opResQueuePolicy.setUseCollisionAvoidance(true);\r
+    opResQueuePolicy.setRedeliveryDelay(30000);\r
+    opResQueuePolicy.setUseExponentialBackOff(false);\r
+    opResQueuePolicy.setMaximumRedeliveries(3);\r
+    opResQueuePolicy.setDestination(opResQueue);\r
+\r
+    RedeliveryPolicyMap rdMap = connectionFactory.getRedeliveryPolicyMap();\r
+    rdMap.put(tr069nbiReqQueue, tr069nbiReqQueuePolicy);\r
+    rdMap.put(crQueue, crQueuePolicy);\r
+    rdMap.put(notificationQueue, notificationQueuePolicy);\r
+    rdMap.put(opResQueue, opResQueuePolicy);\r
+\r
+    return connectionFactory;\r
+  }\r
+  // End\r
+\r
+\r
+  @Bean\r
+  public JmsListenerContainerFactory<?> tr069NBIRequestCF(ConnectionFactory connectionFactory,\r
+      DefaultJmsListenerContainerFactoryConfigurer configurer) {\r
+    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();\r
+    configurer.configure(factory, connectionFactory);\r
+    return factory;\r
+  }\r
+\r
+  @Bean\r
+  public JmsListenerContainerFactory<?> tr069DeviceResponseCF(ConnectionFactory connectionFactory,\r
+      DefaultJmsListenerContainerFactoryConfigurer configurer) {\r
+    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();\r
+    configurer.configure(factory, connectionFactory);\r
+    return factory;\r
+  }\r
+\r
+  @Bean\r
+  public JmsListenerContainerFactory<?> nbiNotificationCF(ConnectionFactory connectionFactory,\r
+      DefaultJmsListenerContainerFactoryConfigurer configurer) {\r
+    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();\r
+    configurer.configure(factory, connectionFactory);\r
+    return factory;\r
+  }\r
+\r
+  @Bean\r
+  public JmsListenerContainerFactory<?> nbiOpResultCF(ConnectionFactory connectionFactory,\r
+      DefaultJmsListenerContainerFactoryConfigurer configurer) {\r
+    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();\r
+    configurer.configure(factory, connectionFactory);\r
+    return factory;\r
+  }\r
+\r
+  /*\r
+   * JMS Configuration ends here\r
+   */\r
+\r
+  /*\r
+   * JMS serializing and de-serializing used Jackson JMS message converter Serialize message content\r
+   * to json using TextMessage\r
+   */\r
+  @Bean\r
+  public MessageConverter jacksonJmsMessageConverter() {\r
+    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();\r
+    converter.setTargetType(MessageType.TEXT);\r
+    converter.setTypeIdPropertyName("_type");\r
+    return converter;\r
+  }\r
+\r
+  /*\r
+   * Exposing an addition HTTP port for Netconf mapper to access And making the default port to be\r
+   * TLS secured which shall be used in the hems url\r
+   */\r
+  @Value("${server.additional.http.port}")\r
+  private String additionalHttpPort;\r
+\r
+  @Value("${server.port}")\r
+  private String serverPort;\r
+\r
+  @Bean\r
+  public ConfigurableServletWebServerFactory tomcatEmbeddedServletContainerFactory() {\r
+    final TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();\r
+    final Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);\r
+    connector.setScheme("https");\r
+    connector.setPort(Integer.valueOf(this.additionalHttpPort));\r
+    factory.addAdditionalTomcatConnectors(connector);\r
+    return factory;\r
+  }\r
+\r
+  @Bean\r
+  public FilterRegistrationBean<FilterInsecuredRequests> loggingFilter() {\r
+    FilterRegistrationBean<FilterInsecuredRequests> registrationBean =\r
+        new FilterRegistrationBean<>();\r
+    registrationBean.setFilter(new FilterInsecuredRequests(serverPort));\r
+    registrationBean.addUrlPatterns("/CPEMgmt/*");\r
+    return registrationBean;\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/main/java/org/commscope/tr069adapter/acs/booter/FilterInsecuredRequests.java b/acs/application-booter/src/main/java/org/commscope/tr069adapter/acs/booter/FilterInsecuredRequests.java
new file mode 100644 (file)
index 0000000..222c614
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.booter;\r
+\r
+import java.io.IOException;\r
+\r
+import javax.servlet.Filter;\r
+import javax.servlet.FilterChain;\r
+import javax.servlet.ServletException;\r
+import javax.servlet.ServletRequest;\r
+import javax.servlet.ServletResponse;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class FilterInsecuredRequests implements Filter {\r
+\r
+  private String serverPort;\r
+\r
+  public FilterInsecuredRequests() {\r
+    super();\r
+  }\r
+\r
+  public FilterInsecuredRequests(String serverPort) {\r
+    super();\r
+    this.serverPort = serverPort;\r
+  }\r
+\r
+  /*\r
+   * (non-Javadoc)\r
+   * \r
+   * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,\r
+   * javax.servlet.FilterChain)\r
+   */\r
+  @Override\r
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)\r
+      throws IOException, ServletException {\r
+    HttpServletRequest req = (HttpServletRequest) request;\r
+    HttpServletResponse res = (HttpServletResponse) response;\r
+\r
+    if (this.serverPort != null && !this.serverPort.equals("-1")\r
+        && !this.serverPort.equals(String.valueOf(req.getLocalPort()))\r
+        && req.getRequestURL().toString().contains("CPEMgmt")) {\r
+      res.setStatus(HttpServletResponse.SC_NOT_FOUND);\r
+      return;\r
+    }\r
+\r
+    chain.doFilter(request, response);\r
+  }\r
+\r
+\r
+}\r
diff --git a/acs/application-booter/src/main/resources/application.properties b/acs/application-booter/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..a834eec
--- /dev/null
@@ -0,0 +1,53 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+## Tomcat REST service ports\r
+server.port=${ACS_REST_PORT}\r
+server.additional.http.port=${ACS_ADDITIONAL_REST_PORT}\r
+\r
+## SSL/TLS configuration propetris\r
+server.ssl.enabled=${ACS_SSL_ENABLED}\r
+server.ssl.key-alias=selfsigned_localhost_sslserver\r
+server.ssl.key-password=changeit\r
+server.ssl.key-store=file:${CERT_FILE}\r
+server.ssl.key-store-provider=SUN\r
+server.ssl.key-store-type=JKS\r
+\r
+## Datasource properties\r
+spring.datasource.username=${DB_USERNAME}\r
+spring.datasource.password=${DB_PASSWORD}\r
+spring.datasource.url=jdbc:mariadb://${DB_SERVICE}:3306/${DB_NAME}\r
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver\r
+spring.datasource.platform=mariadb\r
+spring.datasource.initialization-mode=always\r
+spring.jpa.show-sql=true\r
+spring.jpa.hibernate.ddl-auto=none\r
+\r
+## Quartz Properties\r
+spring.quartz.job-store-type=jdbc\r
+spring.quartz.jdbc.initialize-schema=never\r
+spring.quartz.properties.org.quartz.threadPool.threadCount=10\r
+\r
+## Factory configuration\r
+config.basicAuthorizationURL=http://${FACTORY_REST_HOST}:${FACTORY_REST_PORT}/basicAuthenticate\r
+config.digestAuthorizationURL=http://${FACTORY_REST_HOST}:${FACTORY_REST_PORT}/digestAuthenticate\r
+config.deviceValidationURL=http://${FACTORY_REST_HOST}:${FACTORY_REST_PORT}/validateDevice\r
+\r
+## Mapper Configuration\r
+config.mapperInformNotificationServiceURL=http://${MAPPER_REST_HOST}:${MAPPER_REST_PORT}/tr069MapperSBI/notification\r
+config.mapperDeviceRPCResponseNotificationServiceURL=http://${MAPPER_REST_HOST}:${MAPPER_REST_PORT}/tr069MapperSBI/opResult
\ No newline at end of file
diff --git a/acs/application-booter/src/main/resources/log4j2.xml b/acs/application-booter/src/main/resources/log4j2.xml
new file mode 100644 (file)
index 0000000..c23beac
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<Configuration status="DEBUG" monitorInterval="30">\r
+    <Properties>\r
+        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %m%n</Property>\r
+        <Property name="APP_LOG_ROOT">/logs</Property>\r
+    </Properties>\r
+    <Appenders>\r
+       <Console name="console" target="SYSTEM_OUT" follow="true">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+        </Console>\r
+        \r
+        <RollingFile name="applicationLog"\r
+            fileName="${APP_LOG_ROOT}/debug/application-debug.log"\r
+            filePattern="${APP_LOG_ROOT}/debug/application-debug-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout>\r
+               <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%X{client}] [%.-40t] %-25.45c{1} %-5p: %m%n</pattern>\r
+               <header>Debug Log started at: $${date:yyyy-MM-dd HH:mm:ss}</header>\r
+            </PatternLayout>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/debug/" maxDepth="1">\r
+                    <IfFileName glob="application-debug-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+  \r
+               <RollingFile name="springLog" \r
+                       fileName="${APP_LOG_ROOT}/spring/spring.log"\r
+            filePattern="${APP_LOG_ROOT}/spring/spring-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/spring/" maxDepth="1">\r
+                    <IfFileName glob="spring-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+        \r
+        <RollingFile name="hibernateLog" \r
+                       fileName="${APP_LOG_ROOT}/hibernate/database.log"\r
+            filePattern="${APP_LOG_ROOT}/hibernate/database-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/hibernate/" maxDepth="1">\r
+                    <IfFileName glob="database-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+        \r
+    </Appenders>\r
+    \r
+    <Loggers>\r
+       <Logger name="org.commscope.tr069adapter" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+               <appender-ref ref="applicationLog"/>\r
+       </Logger>\r
+       \r
+       <Logger name="org.springframework" level="error" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="springLog" />\r
+        </Logger>\r
+        \r
+        <Logger name="org.hibernate" level="error" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="hibernateLog" />\r
+        </Logger>\r
+        \r
+        <Root level="DEBUG" additivity="false"/>\r
+    </Loggers>\r
+</Configuration>\r
diff --git a/acs/application-booter/src/main/resources/schema-mariadb.sql b/acs/application-booter/src/main/resources/schema-mariadb.sql
new file mode 100644 (file)
index 0000000..664cb66
--- /dev/null
@@ -0,0 +1,209 @@
+-- ACS Module related tables - START\r
+\r
+CREATE TABLE IF NOT EXISTS tr069_device \r
+  (\r
+  ID int null,\r
+  DEVICE_ID varchar(30) not null,\r
+  USER_NAME varchar(256),\r
+  PASSWORD varchar(256),\r
+  SW_VERSION varchar(20),\r
+  HW_VERSION varchar(20),\r
+  CONNECTION_REQUEST_URL varchar(1024),\r
+  LAST_UPDATED_TIME Timestamp\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS tr069_nbi_request \r
+  (\r
+  ID int null, \r
+  DEVICE_ID varchar(30) not null, \r
+  OPERATION_ID bigint unsigned not null,\r
+  OPERATION_CODE int null,\r
+  ATTRIBUTE_JSON1 varchar(4000),\r
+  ATTRIBUTE_JSON2 varchar(4000),\r
+  ATTRIBUTE_JSON3 varchar(4000),\r
+  REQUEST_TIME_OUT int,\r
+  CREATE_TIME DATETIME(6),\r
+  IS_PROCESSED int DEFAULT 0\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS tr069_session \r
+  (\r
+  DEVICE_ID varchar(30) not null,\r
+  SESSION_ID varchar(64) not null,\r
+  STATE int,\r
+  CURRENT_OPERATION_ID bigint unsigned,\r
+  SESSION_START_TIME TIMESTAMP\r
+);\r
+\r
+CREATE SEQUENCE IF NOT EXISTS hibernate_sequence MINVALUE 1 MAXVALUE 4611686018427387903 CYCLE CACHE 10;\r
+\r
+-- ACS Module related tables - END\r
+\r
+-- QUARTZ related tables - START\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_JOB_DETAILS\r
+       (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    JOB_NAME  VARCHAR(200) NOT NULL,\r
+    JOB_GROUP VARCHAR(200) NOT NULL,\r
+    DESCRIPTION VARCHAR(250) NULL,\r
+    JOB_CLASS_NAME   VARCHAR(250) NOT NULL,\r
+    IS_DURABLE VARCHAR(1) NOT NULL,\r
+    IS_NONCONCURRENT VARCHAR(1) NOT NULL,\r
+    IS_UPDATE_DATA VARCHAR(1) NOT NULL,\r
+    REQUESTS_RECOVERY VARCHAR(1) NOT NULL,\r
+    JOB_DATA BLOB NULL,\r
+    PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_TRIGGERS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    TRIGGER_NAME VARCHAR(200) NOT NULL,\r
+    TRIGGER_GROUP VARCHAR(200) NOT NULL,\r
+    JOB_NAME  VARCHAR(200) NOT NULL,\r
+    JOB_GROUP VARCHAR(200) NOT NULL,\r
+    DESCRIPTION VARCHAR(250) NULL,\r
+    NEXT_FIRE_TIME BIGINT(13) NULL,\r
+    PREV_FIRE_TIME BIGINT(13) NULL,\r
+    PRIORITY INTEGER NULL,\r
+    TRIGGER_STATE VARCHAR(16) NOT NULL,\r
+    TRIGGER_TYPE VARCHAR(8) NOT NULL,\r
+    START_TIME BIGINT(13) NOT NULL,\r
+    END_TIME BIGINT(13) NULL,\r
+    CALENDAR_NAME VARCHAR(200) NULL,\r
+    MISFIRE_INSTR SMALLINT(2) NULL,\r
+    JOB_DATA BLOB NULL,\r
+    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\r
+    FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)\r
+        REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_SIMPLE_TRIGGERS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    TRIGGER_NAME VARCHAR(200) NOT NULL,\r
+    TRIGGER_GROUP VARCHAR(200) NOT NULL,\r
+    REPEAT_COUNT BIGINT(7) NOT NULL,\r
+    REPEAT_INTERVAL BIGINT(12) NOT NULL,\r
+    TIMES_TRIGGERED BIGINT(10) NOT NULL,\r
+    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\r
+    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_CRON_TRIGGERS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    TRIGGER_NAME VARCHAR(200) NOT NULL,\r
+    TRIGGER_GROUP VARCHAR(200) NOT NULL,\r
+    CRON_EXPRESSION VARCHAR(200) NOT NULL,\r
+    TIME_ZONE_ID VARCHAR(80),\r
+    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\r
+    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_SIMPROP_TRIGGERS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    TRIGGER_NAME VARCHAR(200) NOT NULL,\r
+    TRIGGER_GROUP VARCHAR(200) NOT NULL,\r
+    STR_PROP_1 VARCHAR(512) NULL,\r
+    STR_PROP_2 VARCHAR(512) NULL,\r
+    STR_PROP_3 VARCHAR(512) NULL,\r
+    INT_PROP_1 INT NULL,\r
+    INT_PROP_2 INT NULL,\r
+    LONG_PROP_1 BIGINT NULL,\r
+    LONG_PROP_2 BIGINT NULL,\r
+    DEC_PROP_1 NUMERIC(13,4) NULL,\r
+    DEC_PROP_2 NUMERIC(13,4) NULL,\r
+    BOOL_PROP_1 VARCHAR(1) NULL,\r
+    BOOL_PROP_2 VARCHAR(1) NULL,\r
+    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\r
+    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+    REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_BLOB_TRIGGERS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    TRIGGER_NAME VARCHAR(200) NOT NULL,\r
+    TRIGGER_GROUP VARCHAR(200) NOT NULL,\r
+    BLOB_DATA BLOB NULL,\r
+    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),\r
+    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_CALENDARS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    CALENDAR_NAME  VARCHAR(200) NOT NULL,\r
+    CALENDAR BLOB NOT NULL,\r
+    PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_PAUSED_TRIGGER_GRPS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    TRIGGER_GROUP  VARCHAR(200) NOT NULL,\r
+    PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_FIRED_TRIGGERS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    ENTRY_ID VARCHAR(95) NOT NULL,\r
+    TRIGGER_NAME VARCHAR(200) NOT NULL,\r
+    TRIGGER_GROUP VARCHAR(200) NOT NULL,\r
+    INSTANCE_NAME VARCHAR(200) NOT NULL,\r
+    FIRED_TIME BIGINT(13) NOT NULL,\r
+    SCHED_TIME BIGINT(13) NOT NULL,\r
+    PRIORITY INTEGER NOT NULL,\r
+    STATE VARCHAR(16) NOT NULL,\r
+    JOB_NAME VARCHAR(200) NULL,\r
+    JOB_GROUP VARCHAR(200) NULL,\r
+    IS_NONCONCURRENT VARCHAR(1) NULL,\r
+    REQUESTS_RECOVERY VARCHAR(1) NULL,\r
+    PRIMARY KEY (SCHED_NAME,ENTRY_ID)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_SCHEDULER_STATE\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    INSTANCE_NAME VARCHAR(200) NOT NULL,\r
+    LAST_CHECKIN_TIME BIGINT(13) NOT NULL,\r
+    CHECKIN_INTERVAL BIGINT(13) NOT NULL,\r
+    PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)\r
+);\r
+\r
+\r
+CREATE TABLE IF NOT EXISTS QRTZ_LOCKS\r
+  (\r
+    SCHED_NAME VARCHAR(120) NOT NULL,\r
+    LOCK_NAME  VARCHAR(40) NOT NULL,\r
+    PRIMARY KEY (SCHED_NAME,LOCK_NAME)\r
+);\r
+\r
+-- QUARTZ related tables - END\r
+\r
+-- Create Purge for table _tr069_nbi_request - START\r
+\r
+CREATE OR REPLACE EVENT purge_tr069_nbi_request\r
+ON SCHEDULE EVERY 24 HOUR\r
+DO\r
+DELETE FROM tr069_nbi_request WHERE IS_PROCESSED = 1;\r
+\r
+-- Create Purge for table _tr069_nbi_request - END\r
diff --git a/acs/application-booter/src/main/resources/ssl-server.jks b/acs/application-booter/src/main/resources/ssl-server.jks
new file mode 100644 (file)
index 0000000..e5b0dd9
Binary files /dev/null and b/acs/application-booter/src/main/resources/ssl-server.jks differ
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/deviceconnection/DeviceConnectTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/deviceconnection/DeviceConnectTest.java
new file mode 100644 (file)
index 0000000..0907d13
--- /dev/null
@@ -0,0 +1,103 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.deviceconnection;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.ConnectionReqEventHandler;\r
+import org.commscope.tr069adapter.acs.cpe.utils.DeviceConnector;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class DeviceConnectTest {\r
+\r
+  @Autowired\r
+  ConnectionReqEventHandler connectionReqEventHandler;\r
+\r
+  @MockBean\r
+  private DeviceConnector deviceConnector;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void deviceConnect() {\r
+    try {\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+\r
+      DeviceRPCResponse response = new DeviceRPCResponse();\r
+      OperationResponse operationResponse = new OperationResponse();\r
+      operationResponse.setOperationCode(TR069OperationCode.INITIATE_CR);\r
+      operationResponse.setStatus(AcsConstants.HTTP_STATUS_OK);\r
+      response.setOperationResponse(operationResponse);\r
+      Mockito.when(deviceConnector.requestConnectionHttp(Mockito.any(TR069DeviceDetails.class)))\r
+          .thenReturn(response);\r
+\r
+      TR069DeviceDetails deviceDetails = new TR069DeviceDetails();\r
+      deviceDetails.setDeviceId("0005B9AAAA22");\r
+      deviceDetails.setConnectionRequestURL("http://10.10.10.10:8888/connect/device");\r
+\r
+      connectionReqEventHandler.onMessage(deviceDetails);\r
+\r
+      assertTrue(true);\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/DeviceRPCRequestHandlerTests.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/DeviceRPCRequestHandlerTests.java
new file mode 100644 (file)
index 0000000..97ee892
--- /dev/null
@@ -0,0 +1,165 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.SessionRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.handler.DeviceRPCRequestHandler;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.jms.core.JmsTemplate;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+\r
+\r
+\r
+/**\r
+ * \r
+ * @version 1.0\r
+ * @since May 28, 2020\r
+ * @author Prashant Kumar\r
+ */\r
+\r
+@RunWith(SpringRunner.class)\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+public class DeviceRPCRequestHandlerTests {\r
+\r
+  // @Autowired\r
+  // private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Autowired\r
+  DeviceRPCRequestHandler deviceRPCRequestHandler;\r
+\r
+  @MockBean\r
+  DeviceRepository deviceRepository;\r
+\r
+  @MockBean\r
+  SessionRepository sessionRepository;\r
+\r
+  @MockBean\r
+  private JmsTemplate jmsTemplate;\r
+\r
+\r
+  @Test\r
+  public void spvSuccessTest() {\r
+\r
+    Mockito.when(deviceRepository.findByDeviceId(RequestProcessorTestsUtils.macId))\r
+        .thenReturn(RequestProcessorTestsUtils.getTR069DeviceEntity());\r
+\r
+    Mockito.when(sessionRepository.findByDeviceId(RequestProcessorTestsUtils.macId))\r
+        .thenReturn(RequestProcessorTestsUtils.getSessionManagerEntity());\r
+\r
+    Mockito.doNothing().when(jmsTemplate).convertAndSend(Mockito.anyString(),\r
+        Mockito.any(Object.class));\r
+\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setOperationId(10L);\r
+    deviceRPCRequest.setDeviceDetails(RequestProcessorTestsUtils.getDeviceDetails());\r
+    deviceRPCRequest.setOpDetails(\r
+        RequestProcessorTestsUtils.getOperationDetails(TR069OperationCode.SET_PARAMETER_VALUES));\r
+    deviceRPCRequest.setOptions(RequestProcessorTestsUtils.getOperationOptions(60000L));\r
+\r
+    try {\r
+      deviceRPCRequestHandler.onMessage(deviceRPCRequest);\r
+      assertTrue(true);\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void spvWithTerminatedSessionTest() {\r
+\r
+    Mockito.when(deviceRepository.findByDeviceId(RequestProcessorTestsUtils.macId))\r
+        .thenReturn(RequestProcessorTestsUtils.getTR069DeviceEntity());\r
+\r
+    Mockito.when(sessionRepository.findByDeviceId(RequestProcessorTestsUtils.macId))\r
+        .thenReturn(RequestProcessorTestsUtils.getSessionManagerEntity(SessionState.TERMINATED));\r
+\r
+    Mockito.doNothing().when(jmsTemplate).convertAndSend(Mockito.anyString(),\r
+        Mockito.any(Object.class));\r
+\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setOperationId(10L);\r
+    deviceRPCRequest.setDeviceDetails(RequestProcessorTestsUtils.getDeviceDetails());\r
+    deviceRPCRequest.setOpDetails(\r
+        RequestProcessorTestsUtils.getOperationDetails(TR069OperationCode.SET_PARAMETER_VALUES));\r
+    deviceRPCRequest.setOptions(RequestProcessorTestsUtils.getOperationOptions(60000L));\r
+\r
+    try {\r
+      deviceRPCRequestHandler.onMessage(deviceRPCRequest);\r
+      assertTrue(true);\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+\r
+  //\r
+  // @Test\r
+  // public void concurrentSessionExceptionTest() throws SessionConcurrentAccessException {\r
+  //\r
+  // Mockito.when(deviceRepository.findByDeviceId(RequestProcessorTestsUtils.macId))\r
+  // .thenReturn(RequestProcessorTestsUtils.getTR069DeviceEntity());\r
+  //\r
+  // Mockito.when(sessionManager.getLockedSession(RequestProcessorTestsUtils.macId))\r
+  // .thenThrow(new SessionConcurrentAccessException("concurrent session modification"));\r
+  //\r
+  //\r
+  // DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+  // deviceRPCRequest.setOperationId(10L);\r
+  // deviceRPCRequest.setDeviceDetails(RequestProcessorTestsUtils.getDeviceDetails());\r
+  // deviceRPCRequest.setOpDetails(RequestProcessorTestsUtils.getOperationDetails(TR069OperationCode.SetParameterValues));\r
+  // deviceRPCRequest.setOptions(RequestProcessorTestsUtils.getOperationOptions(60000L));\r
+  //\r
+  // try {\r
+  // deviceRPCRequestHandler.onMessage(deviceRPCRequest);\r
+  // fail("concurrent session modification use case failed");\r
+  // } catch (Exception e) {\r
+  // assertTrue(true);\r
+  // }\r
+  // }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/RequestProcessorTestsUtils.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/RequestProcessorTestsUtils.java
new file mode 100644 (file)
index 0000000..fdc991b
--- /dev/null
@@ -0,0 +1,145 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.SessionManagerEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceEntity;\r
+\r
+public class RequestProcessorTestsUtils {\r
+\r
+  public static final String SERVER_URI = "http://localhost:9000/";\r
+  public static final String macId = "0005B95196D0";\r
+  public static final String OUI = "0005B9";\r
+  public static final String PRODUCT_CLASS = "LTE_Enterprise_C-RANSC_Cntrl";\r
+  public static final Long DEVICE_TYPE_ID = 10L;\r
+  public static final String HAEDWARE_VERSION = "1.1.1.1";\r
+  public static final String SW_VERSION = "4.5.00.001";\r
+\r
+  public static final String user = OUI + "-" + PRODUCT_CLASS + "-" + macId;\r
+  public static final String password = "airvana";\r
+  public static final String connectionReqURL =\r
+      "http://10.211.55.33:45076/ConnectionRequest?command=cr&sn=0005B95196D0";\r
+\r
+\r
+  public static final String executionTimeout = "60000";\r
+\r
+\r
+\r
+  public static SessionManagerEntity getSessionManagerEntity(SessionState sessionState) {\r
+    SessionManagerEntity sessionManagerEntity = new SessionManagerEntity();\r
+\r
+    sessionManagerEntity.setDeviceId(macId);\r
+    sessionManagerEntity.setCurrentOperationId(10L);\r
+\r
+    sessionManagerEntity.setState(sessionState.getValue());\r
+\r
+    Calendar calendar = Calendar.getInstance();\r
+    calendar.add(Calendar.MINUTE, -2);\r
+\r
+    sessionManagerEntity.setSessionStartTime(calendar.getTime());\r
+\r
+    return sessionManagerEntity;\r
+  }\r
+\r
+  public static SessionManagerEntity getSessionManagerEntity() {\r
+    SessionManagerEntity sessionManagerEntity = new SessionManagerEntity();\r
+\r
+    sessionManagerEntity.setDeviceId(macId);\r
+    sessionManagerEntity.setCurrentOperationId(10L);\r
+\r
+    sessionManagerEntity.setState(SessionState.PROCESSING.getValue());\r
+\r
+    Calendar calendar = Calendar.getInstance();\r
+    calendar.add(Calendar.MINUTE, -2);\r
+\r
+    sessionManagerEntity.setSessionStartTime(calendar.getTime());\r
+\r
+    return sessionManagerEntity;\r
+  }\r
+\r
+\r
+  public static TR069DeviceEntity getTR069DeviceEntity() {\r
+    TR069DeviceEntity tr069DeviceEntity = new TR069DeviceEntity();\r
+\r
+    tr069DeviceEntity.setDeviceId(macId);\r
+    tr069DeviceEntity.setHwVersion(HAEDWARE_VERSION);\r
+    tr069DeviceEntity.setSwVersion(SW_VERSION);\r
+    tr069DeviceEntity.setPassword(password);\r
+    tr069DeviceEntity.setConnectionReqURL(connectionReqURL);\r
+    tr069DeviceEntity.setUserName(user);\r
+    tr069DeviceEntity.setLastUpdatedTime(new Date());\r
+    return tr069DeviceEntity;\r
+  }\r
+\r
+  public static OperationOptions getOperationOptions(Long executionTimeout) {\r
+    OperationOptions operationOptions = new OperationOptions();\r
+    operationOptions.setExecutionTimeout(executionTimeout);\r
+    return operationOptions;\r
+  }\r
+\r
+\r
+  public static DeviceDetails getDeviceDetails() {\r
+    DeviceDetails deviceDetails = new DeviceDetails();\r
+    deviceDetails.setDeviceId(macId);\r
+    deviceDetails.setDeviceTypeId(DEVICE_TYPE_ID);\r
+    deviceDetails.setOui(OUI);\r
+    deviceDetails.setProductClass(PRODUCT_CLASS);\r
+    return deviceDetails;\r
+  }\r
+\r
+\r
+  public static OperationDetails getOperationDetails(OperationCode opCode) {\r
+    OperationDetails operationDetails = new OperationDetails();\r
+    operationDetails.setOpCode(opCode);\r
+    operationDetails.setParmeters(getParameterDTO());\r
+    return operationDetails;\r
+  }\r
+\r
+  public static List<ParameterDTO> getParameterDTO() {\r
+    List<ParameterDTO> paramDTOList = new ArrayList<ParameterDTO>();\r
+\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setDataType("string");\r
+    parameterDTO.setParamName("Device.Services.FAPService.1.CellConfig.LTE.RAN.RF.PhyCellID");\r
+    parameterDTO.setParamValue("10");\r
+    parameterDTO.setProcessed(false);\r
+\r
+    ParameterDTO parameterDTO1 = new ParameterDTO();\r
+    parameterDTO.setDataType("string");\r
+    parameterDTO.setParamName("Device.Services.FAPService.1.CellConfig.LTE.RAN.RF.DLBandwidth");\r
+    parameterDTO.setParamValue("15");\r
+    parameterDTO.setProcessed(false);\r
+\r
+    paramDTOList.add(parameterDTO);\r
+    paramDTOList.add(parameterDTO1);\r
+\r
+    return paramDTOList;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/InformForwarderTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/InformForwarderTest.java
new file mode 100644 (file)
index 0000000..c042fe4
--- /dev/null
@@ -0,0 +1,99 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.acsnbi;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.nbi.impl.DeviceInformForwarder;\r
+import org.commscope.tr069adapter.acs.nbi.util.MapperSrvcDependencyConfig;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class InformForwarderTest {\r
+\r
+  @MockBean\r
+  MapperSrvcDependencyConfig mapperSrvcDependencyConfig;\r
+\r
+  @MockBean\r
+  RestTemplate restTemplate;\r
+\r
+  @Autowired\r
+  private DeviceInformForwarder deviceInformForwarder;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    try {\r
+\r
+      Mockito.when(restTemplate.postForEntity(Mockito.anyString(), Mockito.any(DeviceInform.class),\r
+          Mockito.any(Class.class))).thenReturn(null);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+      DeviceInform inform = new DeviceInform();\r
+      inform.setDeviceDetails(tr069DeviceDetails);\r
+      List<InformType> informTypeList = new ArrayList<InformType>();\r
+      informTypeList.add(TR069InformType.BOOTSTRAP);\r
+      inform.setInformTypeList(informTypeList);\r
+      deviceInformForwarder.onMessage(inform);\r
+      assertTrue(true);\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/InvokeRPCTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/InvokeRPCTest.java
new file mode 100644 (file)
index 0000000..2ea1800
--- /dev/null
@@ -0,0 +1,92 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.acsnbi;\r
+\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.fail;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.cpe.test.RequestProcessorTestsUtils;\r
+import org.commscope.tr069adapter.acs.nbi.mapper.service.MapperRequestRESTService;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.jms.core.JmsTemplate;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class InvokeRPCTest {\r
+\r
+\r
+  @MockBean\r
+  private JmsTemplate jmsTemplate;\r
+\r
+  @Autowired\r
+  private MapperRequestRESTService mapperRequestRestService;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+\r
+    try {\r
+      Mockito.doNothing().when(jmsTemplate).convertAndSend(Mockito.anyString(),\r
+          Mockito.any(Object.class));\r
+\r
+      DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+      deviceRPCRequest.setOperationId(10L);\r
+      deviceRPCRequest.setDeviceDetails(RequestProcessorTestsUtils.getDeviceDetails());\r
+      deviceRPCRequest.setOpDetails(\r
+          RequestProcessorTestsUtils.getOperationDetails(TR069OperationCode.SET_PARAMETER_VALUES));\r
+      deviceRPCRequest.setOptions(RequestProcessorTestsUtils.getOperationOptions(60000L));\r
+      Long operationId = mapperRequestRestService.initiateDeviceOperation(deviceRPCRequest);\r
+\r
+      assertNotNull(operationId);\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/RPCResponseForwarderTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/acsnbi/RPCResponseForwarderTest.java
new file mode 100644 (file)
index 0000000..f186e1b
--- /dev/null
@@ -0,0 +1,94 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.acsnbi;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.nbi.impl.DeviceRPCResponseForwarder;\r
+import org.commscope.tr069adapter.acs.nbi.util.MapperSrvcDependencyConfig;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class RPCResponseForwarderTest {\r
+\r
+  @MockBean\r
+  MapperSrvcDependencyConfig mapperSrvcDependencyConfig;\r
+\r
+  @MockBean\r
+  RestTemplate restTemplate;\r
+\r
+  @Autowired\r
+  private DeviceRPCResponseForwarder deviceRPCResponseForwarder;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    try {\r
+\r
+      Mockito.when(restTemplate.postForEntity(Mockito.anyString(), Mockito.any(DeviceInform.class),\r
+          Mockito.any(Class.class))).thenReturn(null);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();\r
+      deviceRPCResponse.setDeviceDetails(tr069DeviceDetails);\r
+      deviceRPCResponse.setOperationId(1000l);\r
+      deviceRPCResponseForwarder.onMessage(deviceRPCResponse);\r
+      assertTrue(true);\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithNoPendingRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithNoPendingRequest.java
new file mode 100644 (file)
index 0000000..5244baa
--- /dev/null
@@ -0,0 +1,122 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class EmptyRequestWithNoPendingRequest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @Test\r
+  public void processEmptyRequestWithNoPendingRequestTest() throws Exception {\r
+    String emptyRequest = "";\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519090");\r
+      session.setSessionId("sessionId");\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519090");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(emptyRequest).header("Authorization", "basic")\r
+          .cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingAORequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingAORequest.java
new file mode 100644 (file)
index 0000000..863af8a
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingAORequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    parameterDTO.setDataType("Boolean");\r
+    parameterDTO.setParamValue("true");\r
+    parameters.add(parameterDTO);\r
+\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.ADD_OBJECT);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingDORequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingDORequest.java
new file mode 100644 (file)
index 0000000..9c7b0d0
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingDORequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    parameterDTO.setDataType("Boolean");\r
+    parameterDTO.setParamValue("true");\r
+    parameters.add(parameterDTO);\r
+\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.DELETE_OBJECT);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingDownloadRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingDownloadRequest.java
new file mode 100644 (file)
index 0000000..902369d
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingDownloadRequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    List<ParameterDTO> parameters = new ArrayList<>();\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("FileType");\r
+    parameterDTO.setParamValue("xyz");\r
+    parameters.add(parameterDTO);\r
+\r
+    ParameterDTO parameterDTO1 = new ParameterDTO();\r
+    parameterDTO1.setParamName("URL");\r
+    parameterDTO1.setParamValue("xyz");\r
+    parameters.add(parameterDTO1);\r
+\r
+    ParameterDTO parameterDTO2 = new ParameterDTO();\r
+    parameterDTO2.setParamName("Username");\r
+    parameterDTO2.setParamValue("xyz");\r
+    parameters.add(parameterDTO2);\r
+\r
+    ParameterDTO parameterDTO3 = new ParameterDTO();\r
+    parameterDTO3.setParamName("Password");\r
+    parameterDTO3.setParamValue("xyz");\r
+    parameters.add(parameterDTO3);\r
+\r
+    ParameterDTO parameterDTO4 = new ParameterDTO();\r
+    parameterDTO4.setParamName("FileSize");\r
+    parameterDTO4.setParamValue("872362893480");\r
+    parameters.add(parameterDTO4);\r
+\r
+\r
+    ParameterDTO parameterDTO5 = new ParameterDTO();\r
+    parameterDTO5.setParamName("TargetFileName");\r
+    parameterDTO5.setParamValue("xyz");\r
+    parameters.add(parameterDTO5);\r
+\r
+    ParameterDTO parameterDTO6 = new ParameterDTO();\r
+    parameterDTO6.setParamName("DelaySeconds");\r
+    parameterDTO6.setParamValue("12");\r
+    parameters.add(parameterDTO6);\r
+\r
+    ParameterDTO parameterDTO7 = new ParameterDTO();\r
+    parameterDTO7.setParamName("SuccessURL");\r
+    parameterDTO7.setParamValue("xyz");\r
+    parameters.add(parameterDTO7);\r
+\r
+    ParameterDTO parameterDTO8 = new ParameterDTO();\r
+    parameterDTO8.setParamName("FailureURL");\r
+    parameterDTO8.setParamValue("xyz");\r
+    parameters.add(parameterDTO8);\r
+\r
+\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.DOWNLOAD);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingFRRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingFRRequest.java
new file mode 100644 (file)
index 0000000..bbbba0b
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingFRRequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+    parameters.add(parameterDTO);\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.FACTORY_RESET);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingGPARequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingGPARequest.java
new file mode 100644 (file)
index 0000000..88a90cc
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingGPARequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    parameterDTO.setDataType("Boolean");\r
+    parameterDTO.setParamValue("true");\r
+    parameters.add(parameterDTO);\r
+\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.GET_PARAMETER_ATTRIBUTES);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingGPVRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingGPVRequest.java
new file mode 100644 (file)
index 0000000..40469b1
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingGPVRequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+    parameters.add(parameterDTO);\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.GET_PARAMETER_VALUES);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingRebootRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingRebootRequest.java
new file mode 100644 (file)
index 0000000..2bdf35a
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingRebootRequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    List<ParameterDTO> parameters = new ArrayList<>();\r
+    parameters.add(parameterDTO);\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.REBOOT);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingRequest.java
new file mode 100644 (file)
index 0000000..7f1ff95
--- /dev/null
@@ -0,0 +1,127 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public abstract class EmptyRequestWithPendingRequest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @Test\r
+  public void processEmptyRequestWithPendingRequestTest() throws Exception {\r
+    String emptyRequest = "";\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519090");\r
+      session.setSessionId("sessionId");\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519090");\r
+\r
+      DeviceRPCRequest deviceRPCRequest = getDeviceRPCRequest(tr069DeviceDetails);\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(deviceRPCRequest);\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(emptyRequest).header("Authorization", "basic")\r
+          .cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  public abstract DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails);\r
+\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingSPARequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingSPARequest.java
new file mode 100644 (file)
index 0000000..ee31f54
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingSPARequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+\r
+    ParameterAttributeDTO parameterDTO = new ParameterAttributeDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    parameterDTO.setNotification(0);\r
+    parameterDTO.setNotificationChange(true);\r
+    parameterDTO.setAccesslistChange(true);\r
+    parameters.add(parameterDTO);\r
+\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_ATTRIBUTES);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingSPVRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/emptyrequest/EmptyRequestWithPendingSPVRequest.java
new file mode 100644 (file)
index 0000000..da2ba4f
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.emptyrequest;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class EmptyRequestWithPendingSPVRequest extends EmptyRequestWithPendingRequest {\r
+\r
+  @Override\r
+  public DeviceRPCRequest getDeviceRPCRequest(TR069DeviceDetails tr069DeviceDetails) {\r
+    List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+    parameterDTO.setDataType("Boolean");\r
+    parameterDTO.setParamValue("true");\r
+    parameters.add(parameterDTO);\r
+\r
+    OperationDetails opDetails = new OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
+    opDetails.setParmeters(parameters);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300000L);\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    deviceRPCRequest.setOperationId(1000L);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/BootInformTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/BootInformTest.java
new file mode 100644 (file)
index 0000000..67226aa
--- /dev/null
@@ -0,0 +1,156 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class BootInformTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519091</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>1 BOOT</EventCode><EventCode>4 VALUE CHANGE</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519091</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519091");\r
+      session.setSessionId("sessionId1");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+      Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("sessionid5");\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/BootstrapInformTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/BootstrapInformTest.java
new file mode 100644 (file)
index 0000000..af17ef5
--- /dev/null
@@ -0,0 +1,128 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class BootstrapInformTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns2:Envelope xmlns:ns2=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\"><ns2:Header><ns4:ID ns2:mustUnderstand=\"1\">1</ns4:ID></ns2:Header><ns2:Body><ns4:Inform><ns4:DeviceId><Manufacturer></Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9423910</SerialNumber></ns4:DeviceId><Event ns1:arrayType=\"EventStruct[1]\"><EventStruct><EventCode>0 BOOTSTRAP</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2020-06-10T11:27:26.054Z</CurrentTime><RetryCount>0</RetryCount><ParameterList ns1:arrayType=\"ParameterValueStruct[7]\"><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value>750742.00.13</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value>4.3.00.229</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value>http://172.20.0.9:30150/ConnectionRequest?command=cr&amp;sn=0005B9423910</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value>zzzz</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress</Name><Value>172.17.19.193</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.Services.FAPService.1.FAPControl.LTE.AdminState</Name><Value>0</Value></ParameterValueStruct></ParameterList></ns4:Inform></ns2:Body></ns2:Envelope>";\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/ConnRequestInformTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/ConnRequestInformTest.java
new file mode 100644 (file)
index 0000000..27136a8
--- /dev/null
@@ -0,0 +1,156 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class ConnRequestInformTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519092</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>6 CONNECTION REQUEST</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519092</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519092");\r
+      session.setSessionId("sessionId2");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+      Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("sessionid9");\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/InformAbortPendingReq.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/InformAbortPendingReq.java
new file mode 100644 (file)
index 0000000..167c45d
--- /dev/null
@@ -0,0 +1,157 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.builder.DeviceRPCBuilder;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class InformAbortPendingReq {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  DeviceRPCBuilder deviceRPCBuilder;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPByAbortingPendingRequestTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519090</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>0 BOOTSTRAP</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519090</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =\r
+          new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setDeviceId("0005B9519090");\r
+      entity.setOperationId(10000L);\r
+      entity.setOpCode(TR069OperationCode.ADD_OBJECT.getOperationCode());\r
+      entity.setRequestTimeOut(1000L);\r
+      deviceRPCRequestEntities.add(entity);\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(deviceRPCRequestEntities);\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndOperationId(Mockito.anyString(),\r
+          Mockito.anyLong())).thenReturn(deviceRPCRequestEntities);\r
+\r
+      Mockito.when(deviceRPCBuilder.constructDeviceRPC(Mockito.any(DeviceRPCRequest.class)))\r
+          .thenReturn(null);\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/InformSwVersionUpdatedTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/InformSwVersionUpdatedTest.java
new file mode 100644 (file)
index 0000000..f9e5cb1
--- /dev/null
@@ -0,0 +1,136 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.nbi.mapper.service.DeviceEventsMapperNotificationService;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class InformSwVersionUpdatedTest {\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  private DeviceEventsMapperNotificationService deviceEventsMapperNotificationService;\r
+\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processSwUpdateInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519090</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>0 BOOTSTRAP</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519090</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(deviceEventsMapperNotificationService)\r
+          .processDeviceNotification(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519090");\r
+      tr069DeviceDetails.setConnectionRequestURL("dummyUrl");\r
+      tr069DeviceDetails.setSoftwareVersion("10.0");\r
+      tr069DeviceDetails.setHardwareVersion("xxx");\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/PeriodicInformTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/PeriodicInformTest.java
new file mode 100644 (file)
index 0000000..f30232f
--- /dev/null
@@ -0,0 +1,156 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class PeriodicInformTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519093</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>2 PERIODIC</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519093</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519093");\r
+      session.setSessionId("sessionId3");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+      Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("sessionid10");\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/TCInformTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/TCInformTest.java
new file mode 100644 (file)
index 0000000..ee270de
--- /dev/null
@@ -0,0 +1,156 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class TCInformTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519094</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>7 TRANSFER COMPLETE</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519094</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519094");\r
+      session.setSessionId("sessionId4");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+      Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("sessionid5");\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/TransferCompleteTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/TransferCompleteTest.java
new file mode 100644 (file)
index 0000000..1ccd285
--- /dev/null
@@ -0,0 +1,158 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class TransferCompleteTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns3:Envelope xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\" xmlns:ns3=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns3:Header><ns4:ID ns3:mustUnderstand=\"1\">0</ns4:ID></ns3:Header><ns3:Body><ns4:TransferComplete><CommandKey>0005B9AAAA22</CommandKey><FaultStruct><FaultCode>0</FaultCode><FaultString></FaultString></FaultStruct><StartTime>2019-07-08T18:15:43.032Z</StartTime><CompleteTime>2019-07-08T18:15:43.032Z</CompleteTime></ns4:TransferComplete></ns3:Body></ns3:Envelope>";\r
+\r
+    try {\r
+\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9AAAA22");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9AAAA22");\r
+      tr069DeviceDetails.setConnectionRequestURL("dummyURL");\r
+      tr069DeviceDetails.setSoftwareVersion("10.2.1");\r
+      tr069DeviceDetails.setSoftwareVersion("xxx");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+      Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("newSessionId");\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/ValueChangeInformTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/inform/ValueChangeInformTest.java
new file mode 100644 (file)
index 0000000..21e379e
--- /dev/null
@@ -0,0 +1,156 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.inform;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class ValueChangeInformTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  private DeviceValidator deviceValidator;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @Test\r
+  public void processInformPnPTest() throws Exception {\r
+\r
+    String exampleInform =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:Inform><DeviceId><Manufacturer>Airvana</Manufacturer><OUI>0005B9</OUI><ProductClass>LTE_Enterprise_C-RANSC_Cntrl</ProductClass><SerialNumber>0005B9519095</SerialNumber></DeviceId><Event xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:EventStruct[1]\"><EventStruct><EventCode>4 VALUE CHANGE</EventCode><CommandKey></CommandKey></EventStruct></Event><MaxEnvelopes>1</MaxEnvelopes><CurrentTime>2018-04-27T07:09:16</CurrentTime><RetryCount>0</RetryCount><ParameterList xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"cwmp:ParameterValueStruct[12]\"><ParameterValueStruct><Name>Device.ManagementServer.ParameterKey</Name><Value xsi:type=\"xsd:string\">None</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.ManagementServer.ConnectionRequestURL</Name><Value xsi:type=\"xsd:string\">http://10.210.37.1/acscall</Value></ParameterValueStruct>"\r
+            + "<ParameterValueStruct><Name>Device.DeviceInfo.Manufacturer</Name><Value xsi:type=\"xsd:string\">Airvana</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ManufacturerOUI</Name><Value xsi:type=\"xsd:string\">0005B9</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProductClass</Name><Value xsi:type=\"xsd:string\">LTE_Enterprise_C-RANSC_Cntrl</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SerialNumber</Name><Value xsi:type=\"xsd:string\">0005B9519095</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.HardwareVersion</Name><Value xsi:type=\"xsd:string\">750742.00.04</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.SoftwareVersion</Name><Value xsi:type=\"xsd:string\">3.0.00.073</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.DeviceInfo.ProvisioningCode</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.FAP.X_0005B9_RUWhiteList</Name><Value xsi:type=\"xsd:string\"></Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Enable</Name><Value xsi:type=\"xsd:boolean\">1</Value></ParameterValueStruct><ParameterValueStruct><Name>Device.IP.Interface.1.IPv4Address.1.IPAddress</Name><Value xsi:type=\"xsd:string\">10.210.37.1</Value></ParameterValueStruct>"\r
+            + "</ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
+\r
+      Mockito\r
+          .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
+          .thenReturn(new Boolean(true));\r
+\r
+      Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
+          Mockito.anyString())).thenReturn(new Boolean(true));\r
+\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId5");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+      Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("sessionid5");\r
+\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
+          Mockito.anyInt())).thenReturn(null);\r
+\r
+      RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
+          .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
+          .contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+      Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
+      requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
+              .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/AOOpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/AOOpResultTest.java
new file mode 100644 (file)
index 0000000..030e330
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class AOOpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns3:Envelope xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\" xmlns:ns3=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns3:Header><ns4:ID ns3:mustUnderstand=\"1\">12655610</ns4:ID></ns3:Header><ns3:Body><ns4:DownloadResponse><Status>1</Status><StartTime>2019-07-08T18:15:42.030Z</StartTime><CompleteTime>2019-07-08T18:15:42.030Z</CompleteTime></ns4:DownloadResponse></ns3:Body></ns3:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.DOWNLOAD.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/DOOpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/DOOpResultTest.java
new file mode 100644 (file)
index 0000000..3c861e7
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class DOOpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">13306291</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:DeleteObjectResponse><Status>0</Status></cwmp:DeleteObjectResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.DELETE_OBJECT.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/DownloadOpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/DownloadOpResultTest.java
new file mode 100644 (file)
index 0000000..9bd50ba
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class DownloadOpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns3:Envelope xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\" xmlns:ns3=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns3:Header><ns4:ID ns3:mustUnderstand=\"1\">12654431</ns4:ID></ns3:Header><ns3:Body><ns4:AddObjectResponse><InstanceNumber>4</InstanceNumber><Status>0</Status></ns4:AddObjectResponse></ns3:Body></ns3:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.ADD_OBJECT.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/FROpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/FROpResultTest.java
new file mode 100644 (file)
index 0000000..e78f276
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class FROpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">914620</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:FactoryResetResponse></cwmp:FactoryResetResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.FACTORY_RESET.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/GPVOpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/GPVOpResultTest.java
new file mode 100644 (file)
index 0000000..13de94f
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class GPVOpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns3:Envelope xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\" xmlns:ns3=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns3:Header><ns4:ID ns3:mustUnderstand=\"1\">12655897</ns4:ID></ns3:Header><ns3:Body><ns4:GetParameterValuesResponse><ParameterList ns1:arrayType=\"ns4:ParameterValueStruct[1]\"><ParameterValueStruct><Name>Device.Hosts.HostNumberOfEntries</Name><Value>1</Value></ParameterValueStruct></ParameterList></ns4:GetParameterValuesResponse></ns3:Body></ns3:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.GET_PARAMETER_VALUES.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/OpResultTestWithNoPendingRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/OpResultTestWithNoPendingRequest.java
new file mode 100644 (file)
index 0000000..8290de1
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class OpResultTestWithNoPendingRequest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1561320</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:SetParameterValuesResponse><Status>0</Status></cwmp:SetParameterValuesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/OpResultTestWithPendingRequest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/OpResultTestWithPendingRequest.java
new file mode 100644 (file)
index 0000000..e1e7c6f
--- /dev/null
@@ -0,0 +1,180 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class OpResultTestWithPendingRequest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">1561320</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:SetParameterValuesResponse><Status>0</Status></cwmp:SetParameterValuesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519091");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519091");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      ParameterDTO parameterDTO = new ParameterDTO();\r
+      parameterDTO.setParamName("Device.ManagementServer.PeriodicInformEnable");\r
+      List<ParameterDTO> parameters = new ArrayList<ParameterDTO>();\r
+      parameters.add(parameterDTO);\r
+      OperationDetails opDetails = new OperationDetails();\r
+      opDetails.setOpCode(TR069OperationCode.GET_PARAMETER_VALUES);\r
+      opDetails.setParmeters(parameters);\r
+      OperationOptions options = new OperationOptions();\r
+      options.setExecutionTimeout(300000L);\r
+      DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+      deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+      deviceRPCRequest.setOperationId(10011L);\r
+      deviceRPCRequest.setOpDetails(opDetails);\r
+      deviceRPCRequest.setOptions(options);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(deviceRPCRequest);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES.getOperationCode());\r
+      entity.setOperationId(10000L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519091");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_OK, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      // Thread.sleep(10000L);\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/RebootOpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/RebootOpResultTest.java
new file mode 100644 (file)
index 0000000..59169c0
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class RebootOpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">913870</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><cwmp:RebootResponse></cwmp:RebootResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.REBOOT.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/SPAOpResultTest.java b/acs/application-booter/src/test/java/org/commscope/tr069adapter/acs/cpe/test/opresult/SPAOpResultTest.java
new file mode 100644 (file)
index 0000000..a98ca3b
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.test.opresult;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.servlet.http.Cookie;\r
+\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.commons.httpclient.HttpStatus;\r
+import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.junit.After;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.ContextConfiguration;\r
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@SpringBootTest(classes = {ACSServiceBooter.class})\r
+@RunWith(SpringJUnit4ClassRunner.class)\r
+@AutoConfigureMockMvc\r
+@ContextConfiguration\r
+public class SPAOpResultTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Autowired\r
+  BrokerService broker;\r
+\r
+  @MockBean\r
+  private SessionManager sessionManager;\r
+\r
+  @MockBean\r
+  private DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @MockBean\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @MockBean\r
+  private TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @MockBean\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Test\r
+  public void processOpResultWithNoPendingRequestTest() throws Exception {\r
+    String exampleOpResult =\r
+        "<ns3:Envelope xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\" xmlns:ns3=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns3:Header><ns4:ID ns3:mustUnderstand=\"1\">12653738</ns4:ID></ns3:Header><ns3:Body><ns4:SetParameterAttributesResponse/></ns3:Body></ns3:Envelope>";\r
+\r
+    try {\r
+      SessionDTO session = new SessionDTO();\r
+      session.setDeviceId("0005B9519095");\r
+      session.setSessionId("sessionId");\r
+      session.setCurrentOperationId(10000L);\r
+\r
+      TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+      tr069DeviceDetails.setDeviceId("0005B9519095");\r
+\r
+      Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
+      Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
+\r
+      Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
+          .thenReturn(tr069DeviceDetails);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(Mockito.anyString()))\r
+          .thenReturn(null);\r
+\r
+      List<TR069DeviceRPCRequestEntity> entityList = new ArrayList<TR069DeviceRPCRequestEntity>();\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setOpCode(TR069OperationCode.SET_PARAMETER_ATTRIBUTES.getOperationCode());\r
+      entity.setOperationId(10002L);\r
+      entity.setRequestTimeOut(300000L);\r
+      entity.setDeviceId("0005B9519095");\r
+\r
+      entityList.add(entity);\r
+\r
+      Mockito.when(deviceRPCRequestRepositoryHelper\r
+          .findByDeviceIdAndOperationId(Mockito.anyString(), Mockito.anyLong()))\r
+          .thenReturn(entityList);\r
+\r
+      Mockito.doNothing().when(tr069EventNotificationService)\r
+          .sendOperationResultToNBI(Mockito.any(DeviceRPCResponse.class));\r
+      Mockito.doNothing().when(deviceRPCRequestRepositoryHelper)\r
+          .markDeviceRPCRequestAsProcessed(Mockito.anyString(), Mockito.anyLong());\r
+      Mockito.doNothing().when(timerServiceManagerAPI).startTimer(Mockito.anyString(),\r
+          Mockito.anyString(), Mockito.anyLong(), Mockito.any(Serializable.class));\r
+      Mockito.doNothing().when(timerServiceManagerAPI).stopTimer(Mockito.anyString());\r
+\r
+      Cookie cookie = new Cookie(AcsConstants.ACS_SESSIONID, "sessionId");\r
+      RequestBuilder requestBuilder =\r
+          MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN)\r
+              .content(exampleOpResult).cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
+\r
+      MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+      MockHttpServletResponse response = result.getResponse();\r
+      assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
+\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+  }\r
+\r
+  @After\r
+  public void stopBroker() throws Exception {\r
+    try {\r
+      System.out.println("Tearing down the broker");\r
+      broker.stop();\r
+      broker.waitUntilStopped();\r
+      broker = null;\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+}\r
diff --git a/acs/application-booter/src/test/resources/application.properties b/acs/application-booter/src/test/resources/application.properties
new file mode 100644 (file)
index 0000000..f9f7772
--- /dev/null
@@ -0,0 +1,28 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+server.port=9977\r
+server.additional.http.port=8766\r
+\r
+## Datasource properties\r
+spring.datasource.driver-class-name=org.h2.Driver\r
+spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1\r
+spring.datasource.username=sa\r
+spring.datasource.password=sa\r
+spring.jpa.show-sql=true\r
+spring.jpa.hibernate.ddl-auto=create
\ No newline at end of file
diff --git a/acs/common/pom.xml b/acs/common/pom.xml
new file mode 100644 (file)
index 0000000..6e4af40
--- /dev/null
@@ -0,0 +1,91 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+   <artifactId>acs-common</artifactId>\r
+   <name>ACS common utility</name>\r
+    <parent>\r
+       <groupId>org.commscope.tr069adapter.acs</groupId>\r
+       <artifactId>acs</artifactId>\r
+       <version>1.0.0</version>\r
+    </parent>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.lmax</groupId>\r
+         <artifactId>disruptor</artifactId>\r
+         <version>3.4.2</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-quartz</artifactId>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceDetails.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceDetails.java
new file mode 100644 (file)
index 0000000..7db39fd
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public class DeviceDetails implements Serializable {\r
+\r
+  private static final long serialVersionUID = -2127021632952200894L;\r
+\r
+  protected String deviceId;\r
+\r
+  protected long deviceTypeId;\r
+\r
+  protected String oui;\r
+\r
+  protected String productClass;\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public long getDeviceTypeId() {\r
+    return deviceTypeId;\r
+  }\r
+\r
+  public void setDeviceTypeId(long deviceTypeId) {\r
+    this.deviceTypeId = deviceTypeId;\r
+  }\r
+\r
+  public String getOui() {\r
+    return oui;\r
+  }\r
+\r
+  public void setOui(String oui) {\r
+    this.oui = oui;\r
+  }\r
+\r
+  public String getProductClass() {\r
+    return productClass;\r
+  }\r
+\r
+  public void setProductClass(String productClass) {\r
+    this.productClass = productClass;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceInform.java
new file mode 100644 (file)
index 0000000..97c1a6e
--- /dev/null
@@ -0,0 +1,65 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+import java.util.List;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public class DeviceInform implements Serializable {\r
+\r
+  private static final long serialVersionUID = 1215967892463095850L;\r
+\r
+  private DeviceDetails deviceDetails;\r
+\r
+  private List<InformType> informTypeList;\r
+\r
+  private List<ParameterDTO> parameters;\r
+\r
+  public InformType getInformType() {\r
+    return this.informTypeList.get(0);\r
+  }\r
+\r
+  public DeviceDetails getDeviceDetails() {\r
+    return deviceDetails;\r
+  }\r
+\r
+  public void setDeviceDetails(DeviceDetails deviceDetails) {\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+  public List<InformType> getInformTypeList() {\r
+    return informTypeList;\r
+  }\r
+\r
+  public void setInformTypeList(List<InformType> notificationTypeList) {\r
+    this.informTypeList = notificationTypeList;\r
+  }\r
+\r
+  public List<ParameterDTO> getParameters() {\r
+    return parameters;\r
+  }\r
+\r
+  public void setParameters(List<ParameterDTO> parmeters) {\r
+    this.parameters = parmeters;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceRPCRequest.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceRPCRequest.java
new file mode 100644 (file)
index 0000000..1657744
--- /dev/null
@@ -0,0 +1,99 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import java.io.Serializable;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+public class DeviceRPCRequest implements Serializable, Cloneable {\r
+\r
+  private static final long serialVersionUID = -7300390764969298783L;\r
+\r
+  private DeviceDetails deviceDetails;\r
+\r
+  private Long operationId;\r
+\r
+  private OperationDetails opDetails;\r
+\r
+  private OperationOptions options;\r
+  private Map<String, Object> context = new HashMap<>();\r
+\r
+  public DeviceRPCRequest() {\r
+\r
+  }\r
+\r
+  public DeviceRPCRequest(DeviceRPCResponse operationResult) {\r
+    this.deviceDetails = operationResult.getDeviceDetails();\r
+    this.operationId = operationResult.getOperationId();\r
+  }\r
+\r
+  public DeviceDetails getDeviceDetails() {\r
+    return deviceDetails;\r
+  }\r
+\r
+  public void setDeviceDetails(DeviceDetails deviceDetails) {\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+  public Long getOperationId() {\r
+    return operationId;\r
+  }\r
+\r
+  public void setOperationId(Long operationId) {\r
+    this.operationId = operationId;\r
+  }\r
+\r
+  public OperationDetails getOpDetails() {\r
+    return opDetails;\r
+  }\r
+\r
+  public void setOpDetails(OperationDetails opDetails) {\r
+    this.opDetails = opDetails;\r
+  }\r
+\r
+  public OperationOptions getOptions() {\r
+    return options;\r
+  }\r
+\r
+  public void setOptions(OperationOptions options) {\r
+    this.options = options;\r
+  }\r
+\r
+  public Map<String, Object> getContext() {\r
+    return context;\r
+  }\r
+\r
+  public void addContextParam(String name, Object value) {\r
+    this.context.put(name, value);\r
+  }\r
+\r
+  @Override\r
+  public Object clone() throws CloneNotSupportedException {\r
+    return super.clone();\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "NBIDeviceOperationRequest [deviceId=" + deviceDetails.getDeviceId() + ", deviceType="\r
+        + deviceDetails.getDeviceTypeId() + ", operationId=" + operationId + ", opDetails="\r
+        + opDetails + ", options=" + options + "]";\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceRPCResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/DeviceRPCResponse.java
new file mode 100644 (file)
index 0000000..33e5591
--- /dev/null
@@ -0,0 +1,84 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import java.io.Serializable;\r
+\r
+public class DeviceRPCResponse implements Serializable {\r
+\r
+  private static final long serialVersionUID = -6581290052228229775L;\r
+\r
+  private DeviceDetails deviceDetails;\r
+\r
+  private Long operationId;\r
+\r
+  private OperationResponse operationResponse;\r
+\r
+  private String faultKey;\r
+\r
+  private String faultString;\r
+\r
+  public DeviceDetails getDeviceDetails() {\r
+    return deviceDetails;\r
+  }\r
+\r
+  public void setDeviceDetails(DeviceDetails deviceDetails) {\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+  public Long getOperationId() {\r
+    return operationId;\r
+  }\r
+\r
+  public void setOperationId(Long operationId) {\r
+    this.operationId = operationId;\r
+  }\r
+\r
+  public OperationResponse getOperationResponse() {\r
+    return operationResponse;\r
+  }\r
+\r
+  public void setOperationResponse(OperationResponse operationResponse) {\r
+    this.operationResponse = operationResponse;\r
+  }\r
+\r
+  public String getFaultKey() {\r
+    return faultKey;\r
+  }\r
+\r
+  public void setFaultKey(String faultKey) {\r
+    this.faultKey = faultKey;\r
+  }\r
+\r
+  public String getFaultString() {\r
+    return faultString;\r
+  }\r
+\r
+  public void setFaultString(String faultString) {\r
+    this.faultString = faultString;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "NBIOperationResult [deviceDetails=" + deviceDetails + ", operationId=" + operationId\r
+        + ", operationResponse=" + operationResponse + ", faultKey=" + faultKey + ", faultString="\r
+        + faultString + "]";\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/InformType.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/InformType.java
new file mode 100644 (file)
index 0000000..c12cf98
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+/*\r
+ * Protocol specific notification enumeration classes shall implement this interface.\r
+ */\r
+@JsonDeserialize(as = TR069InformType.class)\r
+public interface InformType extends Serializable {\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationCode.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationCode.java
new file mode 100644 (file)
index 0000000..e4bd9c9
--- /dev/null
@@ -0,0 +1,39 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;\r
+import com.fasterxml.jackson.annotation.JsonSubTypes;\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+@JsonIgnoreProperties(ignoreUnknown = true)\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)\r
+@JsonSubTypes({@JsonSubTypes.Type(value = TR069OperationCode.class, name = "TR069OperationCode"),\r
+\r
+    @JsonSubTypes.Type(value = CustomOperationCode.class, name = "CustomOperationCode")})\r
+public interface OperationCode extends Serializable {\r
+\r
+  public Integer getOperationCode();\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationDetails.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationDetails.java
new file mode 100644 (file)
index 0000000..7d9c92f
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+import java.util.List;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public class OperationDetails implements Serializable {\r
+\r
+  private static final long serialVersionUID = -3405001463223998757L;\r
+\r
+  protected OperationCode opCode;\r
+\r
+  private List<ParameterDTO> parmeters;\r
+\r
+  public OperationCode getOpCode() {\r
+    return opCode;\r
+  }\r
+\r
+  public void setOpCode(OperationCode opCode) {\r
+    this.opCode = opCode;\r
+  }\r
+\r
+  public List<ParameterDTO> getParmeters() {\r
+    return parmeters;\r
+  }\r
+\r
+  public void setParmeters(List<ParameterDTO> parmeters) {\r
+    this.parmeters = parmeters;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "OperationDetails [opCode=" + opCode + ", parmeters=" + parmeters + "]";\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationOptions.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationOptions.java
new file mode 100644 (file)
index 0000000..304736c
--- /dev/null
@@ -0,0 +1,37 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import java.io.Serializable;\r
+\r
+public class OperationOptions implements Serializable {\r
+\r
+  private static final long serialVersionUID = -5431562513577179846L;\r
+\r
+  private long executionTimeout;\r
+\r
+  public long getExecutionTimeout() {\r
+    return executionTimeout;\r
+  }\r
+\r
+  public void setExecutionTimeout(long executionTimeout) {\r
+    this.executionTimeout = executionTimeout;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/OperationResponse.java
new file mode 100644 (file)
index 0000000..2d60e1e
--- /dev/null
@@ -0,0 +1,61 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+import java.util.List;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public class OperationResponse implements Serializable {\r
+\r
+  private static final long serialVersionUID = 6086073521990872907L;\r
+\r
+  private List<ParameterDTO> parameterDTOs;\r
+\r
+  protected OperationCode operationCode;\r
+\r
+  private int status;\r
+\r
+  public List<ParameterDTO> getParameterDTOs() {\r
+    return parameterDTOs;\r
+  }\r
+\r
+  public void setParameterDTOs(List<ParameterDTO> parameterDTOs) {\r
+    this.parameterDTOs = parameterDTOs;\r
+  }\r
+\r
+  public OperationCode getOperationCode() {\r
+    return operationCode;\r
+  }\r
+\r
+  public void setOperationCode(OperationCode operationCode) {\r
+    this.operationCode = operationCode;\r
+  }\r
+\r
+  public int getStatus() {\r
+    return status;\r
+  }\r
+\r
+  public void setStatus(int status) {\r
+    this.status = status;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/ParameterDTO.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/ParameterDTO.java
new file mode 100644 (file)
index 0000000..d8daf50
--- /dev/null
@@ -0,0 +1,130 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public class ParameterDTO implements Serializable {\r
+\r
+  private static final long serialVersionUID = 1460021542834472410L;\r
+\r
+  private String paramName;\r
+  private String paramValue;\r
+  private String dataType;\r
+  private boolean isProcessed;\r
+\r
+  public ParameterDTO() {\r
+\r
+  }\r
+\r
+  public ParameterDTO(String paramName, String paramValue) {\r
+    super();\r
+    this.paramName = paramName;\r
+    this.paramValue = paramValue;\r
+  }\r
+\r
+  public ParameterDTO(String paramName, String paramValue, String dataType) {\r
+    super();\r
+    this.paramName = paramName;\r
+    this.paramValue = paramValue;\r
+    this.dataType = dataType;\r
+  }\r
+\r
+  public String getParamName() {\r
+    return paramName;\r
+  }\r
+\r
+  public void setParamName(String paramName) {\r
+    this.paramName = paramName;\r
+  }\r
+\r
+  public String getParamValue() {\r
+    return paramValue;\r
+  }\r
+\r
+  public void setParamValue(String paramValue) {\r
+    this.paramValue = paramValue;\r
+  }\r
+\r
+  public String getDataType() {\r
+    return dataType;\r
+  }\r
+\r
+  public void setDataType(String dataType) {\r
+    this.dataType = dataType;\r
+  }\r
+\r
+  public boolean isProcessed() {\r
+    return isProcessed;\r
+  }\r
+\r
+  public void setProcessed(boolean isProcessed) {\r
+    this.isProcessed = isProcessed;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "ParameterDTO [paramName=" + paramName + ", paramValue=" + paramValue + ", dataType="\r
+        + dataType + "]";\r
+  }\r
+\r
+  @Override\r
+  public boolean equals(Object obj) {\r
+    if (this == obj)\r
+      return true;\r
+    if (obj == null)\r
+      return false;\r
+    if (getClass() != obj.getClass())\r
+      return false;\r
+    final ParameterDTO other = (ParameterDTO) obj;\r
+    if (paramName == null) {\r
+      if (other.paramName != null)\r
+        return false;\r
+    } else if (!paramName.equals(other.paramName)) {\r
+      return false;\r
+    }\r
+    if (paramValue == null) {\r
+      if (other.paramValue != null)\r
+        return false;\r
+    } else if (!paramValue.equals(other.paramValue)) {\r
+      return false;\r
+    }\r
+    if (dataType == null) {\r
+      if (other.dataType != null)\r
+        return false;\r
+    } else if (!dataType.equals(other.dataType)) {\r
+      return false;\r
+    }\r
+    return true;\r
+  }\r
+\r
+  @Override\r
+  public int hashCode() {\r
+    final int prime = 31;\r
+    int result = 1;\r
+    result = prime * result + ((paramName == null) ? 0 : paramName.hashCode());\r
+    result = prime * result + ((paramValue == null) ? 0 : paramValue.hashCode());\r
+    result = prime * result + ((dataType == null) ? 0 : dataType.hashCode());\r
+    return result;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/ConfigurationData.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/ConfigurationData.java
new file mode 100644 (file)
index 0000000..45e3035
--- /dev/null
@@ -0,0 +1,94 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.io.Serializable;\r
+import java.util.Map;\r
+\r
+/**\r
+ * Domain Object for Service Settings<br>\r
+ * \r
+ * @version 1.0\r
+ * @since September 27, 2019\r
+ * @author prashantk\r
+ */\r
+\r
+public class ConfigurationData implements Serializable {\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = -6219229519491907038L;\r
+\r
+  private String oui;\r
+  private String productClass;\r
+  private String softwareVersion;\r
+  private String hardwareVersion;\r
+\r
+  private String localDn;// ="0005B95196D0"\r
+\r
+  private Map<String, String> parameterMONameValueMap;\r
+\r
+  public String getLocalDn() {\r
+    return localDn;\r
+  }\r
+\r
+  public void setLocalDn(String localDn) {\r
+    this.localDn = localDn;\r
+  }\r
+\r
+  public String getHardwareVersion() {\r
+    return hardwareVersion;\r
+  }\r
+\r
+  public void setHardwareVersion(String hardwareVersion) {\r
+    this.hardwareVersion = hardwareVersion;\r
+  }\r
+\r
+  public String getProductClass() {\r
+    return productClass;\r
+  }\r
+\r
+  public void setProductClass(String productClass) {\r
+    this.productClass = productClass;\r
+  }\r
+\r
+  public String getOUI() {\r
+    return oui;\r
+  }\r
+\r
+  public void setOUI(String oUI) {\r
+    oui = oUI;\r
+  }\r
+\r
+  public String getSoftwareVersion() {\r
+    return softwareVersion;\r
+  }\r
+\r
+  public void setSoftwareVersion(String softwareVersion) {\r
+    this.softwareVersion = softwareVersion;\r
+  }\r
+\r
+  public Map<String, String> getParameterMONameValueMap() {\r
+    return parameterMONameValueMap;\r
+  }\r
+\r
+  public void setParameterMONameValueMap(Map<String, String> parameterMONameValueMap) {\r
+    this.parameterMONameValueMap = parameterMONameValueMap;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/CustomOperationCode.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/CustomOperationCode.java
new file mode 100644 (file)
index 0000000..1108c17
--- /dev/null
@@ -0,0 +1,61 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.util.EnumSet;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+\r
+public enum CustomOperationCode implements OperationCode {\r
+\r
+  CONFIGURE_MULTIPLE_OBJECTS(200, "ConfigureMultipleObject"), CONNECT(201,\r
+      "CheckDeviceAvailability");\r
+\r
+  private Integer operationCode;\r
+  private String jndiName;\r
+\r
+  private CustomOperationCode(Integer operationCode, String jndiName) {\r
+    this.operationCode = operationCode;\r
+    this.jndiName = jndiName;\r
+  }\r
+\r
+  public Integer getOperationCode() {\r
+    return operationCode;\r
+  }\r
+\r
+  public String getJndiName() {\r
+    return jndiName;\r
+  }\r
+\r
+  // Lookup tables\r
+  private static final Map<Integer, CustomOperationCode> reverselookup = new HashMap<>();\r
+\r
+  // Populate the lookup tables on loading time\r
+  static {\r
+    for (CustomOperationCode opCode : EnumSet.allOf(CustomOperationCode.class)) {\r
+      reverselookup.put(opCode.getOperationCode(), opCode);\r
+    }\r
+  }\r
+\r
+  public static CustomOperationCode getByOperationCode(Integer operationCode) {\r
+    return reverselookup.get(operationCode);\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/DeviceData.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/DeviceData.java
new file mode 100644 (file)
index 0000000..82d97e6
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.io.Serializable;\r
+\r
+/**\r
+ * \r
+ * @version 1.0\r
+ * @since September 27, 2019\r
+ * @author Prashant Kumar\r
+ */\r
+public class DeviceData implements Serializable {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = -1408846578781735000L;\r
+\r
+  String serialNumber;\r
+  String autenticationString;\r
+  String oui;\r
+  String productClass;\r
+\r
+  public String getSerialNumber() {\r
+    return serialNumber;\r
+  }\r
+\r
+  public void setSerialNumber(String serialNumber) {\r
+    this.serialNumber = serialNumber;\r
+  }\r
+\r
+  public String getAutenticationString() {\r
+    return autenticationString;\r
+  }\r
+\r
+  public void setAutenticationString(String autenticationString) {\r
+    this.autenticationString = autenticationString;\r
+  }\r
+\r
+  public String getOui() {\r
+    return oui;\r
+  }\r
+\r
+  public void setOui(String oui) {\r
+    this.oui = oui;\r
+  }\r
+\r
+  public String getProductClass() {\r
+    return productClass;\r
+  }\r
+\r
+  public void setProductClass(String productClass) {\r
+    this.productClass = productClass;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/DeviceOperationRequestDetails.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/DeviceOperationRequestDetails.java
new file mode 100644 (file)
index 0000000..4767410
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+\r
+public class DeviceOperationRequestDetails implements Serializable {\r
+\r
+  private static final long serialVersionUID = 7705056823973628669L;\r
+\r
+  private TR069DeviceDetails deviceDetails;\r
+\r
+  private Long operationId;\r
+\r
+  private OperationCode opCode;\r
+\r
+  public TR069DeviceDetails getDeviceDetails() {\r
+    return deviceDetails;\r
+  }\r
+\r
+  public void setDeviceDetails(TR069DeviceDetails deviceDetails) {\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+  public Long getOperationId() {\r
+    return operationId;\r
+  }\r
+\r
+  public void setOperationId(Long operationId) {\r
+    this.operationId = operationId;\r
+  }\r
+\r
+  public OperationCode getOpCode() {\r
+    return opCode;\r
+  }\r
+\r
+  public void setOpCode(OperationCode opCode) {\r
+    this.opCode = opCode;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/ParameterAttributeDTO.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/ParameterAttributeDTO.java
new file mode 100644 (file)
index 0000000..1ba3b63
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.util.Arrays;\r
+\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+\r
+public class ParameterAttributeDTO extends ParameterDTO {\r
+\r
+  private static final long serialVersionUID = 3036245080206860431L;\r
+\r
+  private boolean notificationChange;\r
+\r
+  private boolean accesslistChange;\r
+\r
+  private int notification;\r
+\r
+  private String[] accessList;\r
+\r
+  public boolean getNotificationChange() {\r
+    return notificationChange;\r
+  }\r
+\r
+  public void setNotificationChange(boolean notificationChange) {\r
+    this.notificationChange = notificationChange;\r
+  }\r
+\r
+  public boolean getAccesslistChange() {\r
+    return accesslistChange;\r
+  }\r
+\r
+  public void setAccesslistChange(boolean accesslistChange) {\r
+    this.accesslistChange = accesslistChange;\r
+  }\r
+\r
+  public int getNotification() {\r
+    return notification;\r
+  }\r
+\r
+  public void setNotification(int notification) {\r
+    this.notification = notification;\r
+  }\r
+\r
+  public String[] getAccessList() {\r
+    return accessList;\r
+  }\r
+\r
+  public void setAccessList(String[] accessList) {\r
+    this.accessList = accessList;\r
+  }\r
+\r
+  @Override\r
+  public int hashCode() {\r
+    final int prime = 31;\r
+    int result = super.hashCode();\r
+    result = prime * result + Arrays.hashCode(accessList);\r
+    result = prime * result + (accesslistChange ? 1231 : 1237);\r
+    result = prime * result + notification;\r
+    result = prime * result + (notificationChange ? 1231 : 1237);\r
+    return result;\r
+  }\r
+\r
+  @Override\r
+  public boolean equals(Object obj) {\r
+    if (this == obj)\r
+      return true;\r
+    if (!super.equals(obj))\r
+      return false;\r
+    if (getClass() != obj.getClass())\r
+      return false;\r
+    ParameterAttributeDTO other = (ParameterAttributeDTO) obj;\r
+    if (!Arrays.equals(accessList, other.accessList))\r
+      return false;\r
+    if (accesslistChange != other.accesslistChange)\r
+      return false;\r
+    if (notification != other.notification)\r
+      return false;\r
+    return (notificationChange != other.notificationChange);\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069DeviceDetails.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069DeviceDetails.java
new file mode 100644 (file)
index 0000000..b53338a
--- /dev/null
@@ -0,0 +1,78 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+\r
+public class TR069DeviceDetails extends DeviceDetails {\r
+\r
+  private static final long serialVersionUID = 8067939584181214835L;\r
+\r
+  // Device credentials\r
+  private String username;\r
+  private String password;\r
+\r
+  // Device version details\r
+  private String softwareVersion;\r
+  private String hardwareVersion;\r
+\r
+  // Device connection request URL\r
+  private String connectionRequestURL;\r
+\r
+  public String getUsername() {\r
+    return username;\r
+  }\r
+\r
+  public void setUsername(String username) {\r
+    this.username = username;\r
+  }\r
+\r
+  public String getPassword() {\r
+    return password;\r
+  }\r
+\r
+  public void setPassword(String password) {\r
+    this.password = password;\r
+  }\r
+\r
+  public String getSoftwareVersion() {\r
+    return softwareVersion;\r
+  }\r
+\r
+  public void setSoftwareVersion(String softwareVersion) {\r
+    this.softwareVersion = softwareVersion;\r
+  }\r
+\r
+  public String getHardwareVersion() {\r
+    return hardwareVersion;\r
+  }\r
+\r
+  public void setHardwareVersion(String hardwareVersion) {\r
+    this.hardwareVersion = hardwareVersion;\r
+  }\r
+\r
+  public String getConnectionRequestURL() {\r
+    return connectionRequestURL;\r
+  }\r
+\r
+  public void setConnectionRequestURL(String connectionRequestURL) {\r
+    this.connectionRequestURL = connectionRequestURL;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069InformType.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069InformType.java
new file mode 100644 (file)
index 0000000..608bb95
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+\r
+public enum TR069InformType implements InformType {\r
+\r
+  BOOTSTRAP("0 BOOTSTRAP"), BOOT("1 BOOT"), PERIODIC("2 PERIODIC"), VALUECHANGE(\r
+      "4 VALUE CHANGE"), CONNECTIONREQUEST("6 CONNECTION REQUEST"), TRANSFER_COMPLETE(\r
+          "7 TRANSFER COMPLETE"), AUTONOMOUS_TRANSFER_COMPLETE("10 AUTONOMOUS TRANSFER COMPLETE");\r
+\r
+  private String notificationCode;\r
+\r
+  private TR069InformType(String notificationCode) {\r
+    this.notificationCode = notificationCode;\r
+  }\r
+\r
+  public String getNotificationCode() {\r
+    return notificationCode;\r
+  }\r
+\r
+  public static TR069InformType getTR069NotificationType(String notificationCode) {\r
+    TR069InformType result = null;\r
+    for (TR069InformType notificationTypeEnum : TR069InformType.values()) {\r
+      if (notificationTypeEnum.notificationCode.equals(notificationCode)) {\r
+        result = notificationTypeEnum;\r
+        break;\r
+      }\r
+    }\r
+    return result;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069OperationCode.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069OperationCode.java
new file mode 100644 (file)
index 0000000..0888809
--- /dev/null
@@ -0,0 +1,57 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.util.EnumSet;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+\r
+public enum TR069OperationCode implements OperationCode {\r
+\r
+  GET_RPC_METHODS(100), SET_PARAMETER_VALUES(101), GET_PARAMETER_VALUES(102), GET_PARAMETER_NAMES(\r
+      103), SET_PARAMETER_ATTRIBUTES(104), GET_PARAMETER_ATTRIBUTES(105), ADD_OBJECT(\r
+          106), DELETE_OBJECT(107), REBOOT(108), DOWNLOAD(\r
+              109), SCHEDULE_DOWNLOAD(110), UPLOAD(111), FACTORY_RESET(112), INITIATE_CR(120);\r
+\r
+  private Integer operationCode;\r
+\r
+  private TR069OperationCode(Integer operationCode) {\r
+    this.operationCode = operationCode;\r
+  }\r
+\r
+  // Lookup tables\r
+  private static final Map<Integer, TR069OperationCode> reverselookup = new HashMap<>();\r
+\r
+  // Populate the lookup tables on loading time\r
+  static {\r
+    for (TR069OperationCode opCode : EnumSet.allOf(TR069OperationCode.class)) {\r
+      reverselookup.put(opCode.getOperationCode(), opCode);\r
+    }\r
+  }\r
+\r
+  public static TR069OperationCode getByOperationCode(Integer operationCode) {\r
+    return reverselookup.get(operationCode);\r
+  }\r
+\r
+  public Integer getOperationCode() {\r
+    return operationCode;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069OperationDetails.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/dto/TR069OperationDetails.java
new file mode 100644 (file)
index 0000000..819c2a3
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.dto;\r
+\r
+import java.io.Serializable;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+\r
+public class TR069OperationDetails extends OperationDetails implements Serializable {\r
+\r
+  private static final long serialVersionUID = -7690837012815378233L;\r
+\r
+  private List<ParameterDTO> deleteParamList;\r
+  private List<ParameterDTO> modifyParamList;\r
+  private List<ParameterDTO> setParamList;\r
+\r
+  public TR069OperationDetails() {\r
+    super();\r
+  }\r
+\r
+  public TR069OperationDetails(List<ParameterDTO> deleteParamList,\r
+      List<ParameterDTO> modifyParamList, List<ParameterDTO> setParamList) {\r
+    this.deleteParamList = deleteParamList;\r
+    this.modifyParamList = modifyParamList;\r
+    this.setParamList = setParamList;\r
+  }\r
+\r
+  public List<ParameterDTO> getDeleteParamList() {\r
+    return deleteParamList;\r
+  }\r
+\r
+  public void setDeleteParamList(List<ParameterDTO> deleteParamList) {\r
+    this.deleteParamList = deleteParamList;\r
+  }\r
+\r
+  public List<ParameterDTO> getModifyParamList() {\r
+    return modifyParamList;\r
+  }\r
+\r
+  public void setModifyParamList(List<ParameterDTO> modifyParamList) {\r
+    this.modifyParamList = modifyParamList;\r
+  }\r
+\r
+  public List<ParameterDTO> getSetParamList() {\r
+    return setParamList;\r
+  }\r
+\r
+  public void setSetParamList(List<ParameterDTO> setParamList) {\r
+    this.setParamList = setParamList;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/ACSException.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/ACSException.java
new file mode 100644 (file)
index 0000000..e86321f
--- /dev/null
@@ -0,0 +1,89 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.exception;\r
+\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.common.utils.Utility;\r
+\r
+public class ACSException extends Exception {\r
+\r
+  private static final long serialVersionUID = 9116478433222830454L;\r
+\r
+  private static final String ERRORMSG_PREFIX = "TR069";\r
+\r
+  private ErrorCode errorCode;\r
+\r
+  private String[] arguments;\r
+\r
+  private String message;\r
+\r
+  /**\r
+   * @param s\r
+   */\r
+  public ACSException(String s) {\r
+    super(s);\r
+  }\r
+\r
+  /**\r
+   * @param errorCode\r
+   */\r
+  public ACSException(ErrorCode errorCode) {\r
+    super();\r
+    this.errorCode = errorCode;\r
+    setErrorMessage(getErrorMessage());\r
+  }\r
+\r
+  /**\r
+   * @param errorCode\r
+   * @param args\r
+   */\r
+  public ACSException(ErrorCode errorCode, String... args) {\r
+    super();\r
+    this.errorCode = errorCode;\r
+    arguments = args;\r
+    setErrorMessage(getErrorMessage());\r
+  }\r
+\r
+  public ErrorCode getErrorCode() {\r
+    return errorCode;\r
+  }\r
+\r
+  public void setErrorCode(ErrorCode errorCode) {\r
+    this.errorCode = errorCode;\r
+  }\r
+\r
+  @Override\r
+  public String getMessage() {\r
+    return message;\r
+  }\r
+\r
+  /**\r
+   * All the error messages defined in the TR069 ErrorMessage properties must have prefix "TR069"\r
+   * \r
+   * @return\r
+   */\r
+  private String getErrorMessage() {\r
+    String key = ERRORMSG_PREFIX + "." + errorCode.getErrorCodeKey();\r
+    return Utility.getMessage(key, arguments);\r
+  }\r
+\r
+  private void setErrorMessage(String message) {\r
+    this.message = message;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/DeviceOperationException.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/DeviceOperationException.java
new file mode 100644 (file)
index 0000000..17647be
--- /dev/null
@@ -0,0 +1,37 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.acs.common.exception;\r
+\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+\r
+public class DeviceOperationException extends ACSException {\r
+\r
+  private static final long serialVersionUID = -4399997967808584175L;\r
+\r
+  public DeviceOperationException(ErrorCode errorCode, String... args) {\r
+    super(errorCode, args);\r
+  }\r
+\r
+  public DeviceOperationException(ErrorCode errorCode) {\r
+    super(errorCode);\r
+  }\r
+\r
+  public DeviceOperationException(String s) {\r
+    super(s);\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/MapperServiceException.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/MapperServiceException.java
new file mode 100644 (file)
index 0000000..fc9f359
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.exception;\r
+\r
+public class MapperServiceException extends Exception {\r
+\r
+  private static final long serialVersionUID = -8309724334282626038L;\r
+\r
+  public MapperServiceException(String message, Throwable cause) {\r
+    super(message, cause);\r
+  }\r
+\r
+  public MapperServiceException(String message) {\r
+    super(message);\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/SessionConcurrentAccessException.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/SessionConcurrentAccessException.java
new file mode 100644 (file)
index 0000000..0225139
--- /dev/null
@@ -0,0 +1,38 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.exception;\r
+\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+\r
+public class SessionConcurrentAccessException extends ACSException {\r
+\r
+  private static final long serialVersionUID = -6589214938353510704L;\r
+\r
+  public SessionConcurrentAccessException(ErrorCode errorCode, String... args) {\r
+    super(errorCode, args);\r
+  }\r
+\r
+  public SessionConcurrentAccessException(ErrorCode errorCode) {\r
+    super(errorCode);\r
+  }\r
+\r
+  public SessionConcurrentAccessException(String s) {\r
+    super(s);\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/SessionManagerException.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/SessionManagerException.java
new file mode 100644 (file)
index 0000000..317be6d
--- /dev/null
@@ -0,0 +1,38 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.acs.common.exception;\r
+\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+\r
+public class SessionManagerException extends ACSException {\r
+\r
+  private static final long serialVersionUID = -1448946666632258106L;\r
+\r
+  public SessionManagerException(ErrorCode errorCode, String... args) {\r
+    super(errorCode, args);\r
+  }\r
+\r
+  public SessionManagerException(ErrorCode errorCode) {\r
+    super(errorCode);\r
+  }\r
+\r
+  public SessionManagerException(String s) {\r
+    super(s);\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/TR069EventProcessingException.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/exception/TR069EventProcessingException.java
new file mode 100644 (file)
index 0000000..697be15
--- /dev/null
@@ -0,0 +1,37 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.acs.common.exception;\r
+\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+\r
+public class TR069EventProcessingException extends ACSException {\r
+\r
+  private static final long serialVersionUID = -382565276161698228L;\r
+\r
+  public TR069EventProcessingException(ErrorCode errorCode) {\r
+    super(errorCode);\r
+  }\r
+\r
+  public TR069EventProcessingException(ErrorCode errorCode, String... args) {\r
+    super(errorCode, args);\r
+  }\r
+\r
+  public TR069EventProcessingException(String s) {\r
+    super(s);\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/faults/AcsFaultCode.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/faults/AcsFaultCode.java
new file mode 100644 (file)
index 0000000..a562428
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.faults;\r
+\r
+public enum AcsFaultCode {\r
+\r
+  FAULT_CODE_8000("8000", "Device not exists"), FAULT_CODE_8001("8001",\r
+      "Device not Activated"), FAULT_CODE_8002("8002", "Operation Aborted"), FAULT_CODE_8003("8003",\r
+          "Operation Timedout"), FAULT_CODE_8004("8004", "Invalid NBI request");\r
+\r
+  private String faultKey;\r
+  private String faultString;\r
+\r
+  private AcsFaultCode(String faultKey, String faultString) {\r
+    this.faultKey = faultKey;\r
+    this.faultString = faultString;\r
+  }\r
+\r
+  public String getFaultKey() {\r
+    return faultKey;\r
+  }\r
+\r
+  public String getFaultString() {\r
+    return faultString;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/AbstractDeviceInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/AbstractDeviceInform.java
new file mode 100644 (file)
index 0000000..d05d84e
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public abstract class AbstractDeviceInform extends DeviceInform {\r
+\r
+  private static final long serialVersionUID = -487248664548665087L;\r
+\r
+  private String externalIPAddress;\r
+\r
+  private String lanIPAddress;\r
+\r
+  public String getExternalIPAddress() {\r
+    return externalIPAddress;\r
+  }\r
+\r
+  public void setExternalIPAddress(String externalIPAddress) {\r
+    this.externalIPAddress = externalIPAddress;\r
+  }\r
+\r
+  public String getLanIPAddress() {\r
+    return lanIPAddress;\r
+  }\r
+\r
+  public void setLanIPAddress(String lanIPAddress) {\r
+    this.lanIPAddress = lanIPAddress;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/AutonomousTransferCompleteInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/AutonomousTransferCompleteInform.java
new file mode 100644 (file)
index 0000000..1746990
--- /dev/null
@@ -0,0 +1,34 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class AutonomousTransferCompleteInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = 2650983507549211661L;\r
+\r
+  public AutonomousTransferCompleteInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.AUTONOMOUS_TRANSFER_COMPLETE);\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/BootInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/BootInform.java
new file mode 100644 (file)
index 0000000..1d1697a
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class BootInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = 2162922435204752652L;\r
+\r
+  private ValueChangeInform valueChangeNotification;\r
+\r
+  public BootInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.BOOT);\r
+  }\r
+\r
+  public ValueChangeInform getValueChangeNotification() {\r
+    return valueChangeNotification;\r
+  }\r
+\r
+  public void setValueChangeNotification(ValueChangeInform valueChangeNotification) {\r
+    this.valueChangeNotification = valueChangeNotification;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/BootstrapInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/BootstrapInform.java
new file mode 100644 (file)
index 0000000..33880ef
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class BootstrapInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = -3779809288879394206L;\r
+\r
+  private ValueChangeInform valueChangeNotification;\r
+\r
+  public BootstrapInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.BOOTSTRAP);\r
+  }\r
+\r
+  public ValueChangeInform getValueChangeNotification() {\r
+    return valueChangeNotification;\r
+  }\r
+\r
+  public void setValueChangeNotification(ValueChangeInform valueChangeNotification) {\r
+    this.valueChangeNotification = valueChangeNotification;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/ConnectionRequestInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/ConnectionRequestInform.java
new file mode 100644 (file)
index 0000000..62a3cc8
--- /dev/null
@@ -0,0 +1,34 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class ConnectionRequestInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = -3779809288879394206L;\r
+\r
+  public ConnectionRequestInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.CONNECTIONREQUEST);\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/PeriodicInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/PeriodicInform.java
new file mode 100644 (file)
index 0000000..fb8558f
--- /dev/null
@@ -0,0 +1,34 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class PeriodicInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = 4900241793306242004L;\r
+\r
+  public PeriodicInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.PERIODIC);\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/TransferCompleteInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/TransferCompleteInform.java
new file mode 100644 (file)
index 0000000..bcb7e94
--- /dev/null
@@ -0,0 +1,84 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class TransferCompleteInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = 7570776808202484844L;\r
+\r
+  private String commandKey;\r
+\r
+  private String startTime;\r
+\r
+  private String completeTime;\r
+\r
+  private int faultCode;\r
+\r
+  private String faultString;\r
+\r
+  public TransferCompleteInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.TRANSFER_COMPLETE);\r
+  }\r
+\r
+  public String getCommandKey() {\r
+    return commandKey;\r
+  }\r
+\r
+  public void setCommandKey(String commandKey) {\r
+    this.commandKey = commandKey;\r
+  }\r
+\r
+  public String getStartTime() {\r
+    return startTime;\r
+  }\r
+\r
+  public void setStartTime(String startTime) {\r
+    this.startTime = startTime;\r
+  }\r
+\r
+  public String getCompleteTime() {\r
+    return completeTime;\r
+  }\r
+\r
+  public void setCompleteTime(String completeTime) {\r
+    this.completeTime = completeTime;\r
+  }\r
+\r
+  public int getFaultCode() {\r
+    return faultCode;\r
+  }\r
+\r
+  public void setFaultCode(int faultCode) {\r
+    this.faultCode = faultCode;\r
+  }\r
+\r
+  public String getFaultString() {\r
+    return faultString;\r
+  }\r
+\r
+  public void setFaultString(String faultString) {\r
+    this.faultString = faultString;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/ValueChangeInform.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/inform/ValueChangeInform.java
new file mode 100644 (file)
index 0000000..8662aad
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.inform;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+\r
+public class ValueChangeInform extends AbstractDeviceInform {\r
+\r
+  private static final long serialVersionUID = 4207077925048228371L;\r
+\r
+  private ValueChangeInform valueChangeNotification;\r
+\r
+  public ValueChangeInform() {\r
+    setInformTypeList(new ArrayList<>());\r
+    getInformTypeList().add(TR069InformType.VALUECHANGE);\r
+  }\r
+\r
+  public ValueChangeInform getValueChangeNotification() {\r
+    return valueChangeNotification;\r
+  }\r
+\r
+  public void setValueChangeNotification(ValueChangeInform valueChangeNotification) {\r
+    this.valueChangeNotification = valueChangeNotification;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/mapper/ACSServiceAPI.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/mapper/ACSServiceAPI.java
new file mode 100644 (file)
index 0000000..ad06dbf
--- /dev/null
@@ -0,0 +1,34 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.mapper;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.exception.MapperServiceException;\r
+\r
+public interface ACSServiceAPI {\r
+\r
+  /**\r
+   * @param nbiDeviceOperationRequest\r
+   * @return\r
+   * @throws MapperServiceException\r
+   */\r
+  public long performDeviceOperation(DeviceRPCRequest deviceRPCRequest)\r
+      throws MapperServiceException;\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/requestprocessor/service/TR069DeviceEventHandler.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/requestprocessor/service/TR069DeviceEventHandler.java
new file mode 100644 (file)
index 0000000..d3884e2
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.requestprocessor.service;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.DeviceOperationRequestDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.response.DeviceInformResponse;\r
+\r
+public interface TR069DeviceEventHandler {\r
+\r
+  /**\r
+   * @param deviceNotification\r
+   * @return\r
+   */\r
+  public DeviceInformResponse processDeviceInform(DeviceInform deviceNotification) throws Exception;\r
+\r
+  /**\r
+   * Return type can be null, such case Empty HTTP response to be sent to the device\r
+   * \r
+   * @param operationResult\r
+   * @return\r
+   */\r
+  public DeviceRPCRequest processDeviceRPCResponse(DeviceRPCResponse operationResult)\r
+      throws Exception;\r
+\r
+  /**\r
+   * Return type can be null, such case Empty HTTP response to be sent to the device\r
+   * \r
+   * @return\r
+   */\r
+  public DeviceRPCRequest processEmptyDeviceRequest(TR069DeviceDetails deviceDetails)\r
+      throws Exception;\r
+\r
+  /**\r
+   * @param sessionId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public DeviceOperationRequestDetails getOpRequestDetailsBySessionId(String sessionId)\r
+      throws SessionManagerException;\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws DeviceOperationException\r
+   */\r
+  public TR069DeviceDetails getDeviceDetails(String deviceId) throws DeviceOperationException;\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/AddObjectResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/AddObjectResponse.java
new file mode 100644 (file)
index 0000000..12669de
--- /dev/null
@@ -0,0 +1,51 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class AddObjectResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = -1393110747753099063L;\r
+\r
+  private long instanceNumber;\r
+\r
+  private String label;\r
+\r
+  public AddObjectResponse() {\r
+    operationCode = TR069OperationCode.ADD_OBJECT;\r
+  }\r
+\r
+  public long getInstanceNumber() {\r
+    return instanceNumber;\r
+  }\r
+\r
+  public void setInstanceNumber(long instanceNumber) {\r
+    this.instanceNumber = instanceNumber;\r
+  }\r
+\r
+  public String getLabel() {\r
+    return label;\r
+  }\r
+\r
+  public void setLabel(String label) {\r
+    this.label = label;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DeleteObjectResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DeleteObjectResponse.java
new file mode 100644 (file)
index 0000000..9889b9e
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class DeleteObjectResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = 6579072643840101137L;\r
+\r
+  private int status;\r
+\r
+  public DeleteObjectResponse() {\r
+    operationCode = TR069OperationCode.DELETE_OBJECT;\r
+  }\r
+\r
+  @Override\r
+  public int getStatus() {\r
+    return status;\r
+  }\r
+\r
+  @Override\r
+  public void setStatus(int status) {\r
+    this.status = status;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DeviceInformResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DeviceInformResponse.java
new file mode 100644 (file)
index 0000000..83fea8c
--- /dev/null
@@ -0,0 +1,54 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+\r
+public class DeviceInformResponse implements Serializable {\r
+\r
+  private static final long serialVersionUID = -6889552276964345347L;\r
+\r
+  private String sessionId;\r
+\r
+  private DeviceDetails deviceDetails;\r
+\r
+  public DeviceInformResponse(String sessionId, DeviceDetails deviceDetails) {\r
+    this.sessionId = sessionId;\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+  public String getSessionId() {\r
+    return sessionId;\r
+  }\r
+\r
+  public void setSessionId(String sessionId) {\r
+    this.sessionId = sessionId;\r
+  }\r
+\r
+  public DeviceDetails getDeviceDetails() {\r
+    return deviceDetails;\r
+  }\r
+\r
+  public void setDeviceDetails(DeviceDetails deviceDetails) {\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DownloadResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/DownloadResponse.java
new file mode 100644 (file)
index 0000000..abf948a
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class DownloadResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  public DownloadResponse() {\r
+    operationCode = TR069OperationCode.DOWNLOAD;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/FactoryResetResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/FactoryResetResponse.java
new file mode 100644 (file)
index 0000000..51ccc0e
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class FactoryResetResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  public FactoryResetResponse() {\r
+    operationCode = TR069OperationCode.FACTORY_RESET;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/GetParameterAttributeResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/GetParameterAttributeResponse.java
new file mode 100644 (file)
index 0000000..5d15e55
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class GetParameterAttributeResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = -5735374005138125025L;\r
+\r
+  public GetParameterAttributeResponse() {\r
+    operationCode = TR069OperationCode.GET_PARAMETER_ATTRIBUTES;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/GetParameterValueResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/GetParameterValueResponse.java
new file mode 100644 (file)
index 0000000..bbef9fb
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class GetParameterValueResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = 4358089568607395655L;\r
+\r
+  public GetParameterValueResponse() {\r
+    operationCode = TR069OperationCode.GET_PARAMETER_VALUES;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/RebootResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/RebootResponse.java
new file mode 100644 (file)
index 0000000..91cf879
--- /dev/null
@@ -0,0 +1,31 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class RebootResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  public RebootResponse() {\r
+    operationCode = TR069OperationCode.REBOOT;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/SetParameterAttributeResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/SetParameterAttributeResponse.java
new file mode 100644 (file)
index 0000000..f7990f3
--- /dev/null
@@ -0,0 +1,31 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class SetParameterAttributeResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = 6500475346995441398L;\r
+\r
+  public SetParameterAttributeResponse() {\r
+    operationCode = TR069OperationCode.SET_PARAMETER_ATTRIBUTES;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/SetParameterValueResponse.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/response/SetParameterValueResponse.java
new file mode 100644 (file)
index 0000000..09e3bf5
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.response;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+\r
+public class SetParameterValueResponse extends OperationResponse {\r
+\r
+  private static final long serialVersionUID = -6420901558440394915L;\r
+\r
+  public SetParameterValueResponse() {\r
+    operationCode = TR069OperationCode.SET_PARAMETER_VALUES;\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/AcsConstants.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/AcsConstants.java
new file mode 100644 (file)
index 0000000..8eae37d
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.common.utils;\r
+\r
+public class AcsConstants {\r
+\r
+  private AcsConstants() {}\r
+\r
+  // CPE Management constants\r
+  public static final String INFORM = "Inform";\r
+  public static final String TRANSFER_COMPLETE = "TransferComplete";\r
+  public static final String ACS_SESSIONID = "JSESSIONID";\r
+  public static final String CWMP_VERSION = "CWMP_VERSION";\r
+\r
+  // JMS Queues and connection factory names\r
+  public static final String TR069_NBI_REQUEST_Q = "TR069NBIRequestQueue";\r
+  public static final String TR069_NBI_REQUEST_CF = "tr069NBIRequestCF";\r
+\r
+  public static final String CR_REQ_Q = "TR069DeviceResponseQueue";\r
+  public static final String CR_REQ_CF = "tr069DeviceResponseCF";\r
+\r
+  public static final String NBI_NOTIFICATION_Q = "NBINotificationQueue";\r
+  public static final String NBI_NOTIFICATION_CF = "nbiNotificationCF";\r
+\r
+  public static final String NBI_OP_RESULT_Q = "NBIOpResultQueue";\r
+  public static final String NBI_OP_RESULT_CF = "nbiOpResultCF";\r
+\r
+  // Mapper Service Constants\r
+  public static final String MAPPER_SERVICE_QUALILFIER = "mapper-service";\r
+\r
+  // TIMER ID Constants\r
+  public static final String CONNECTION_REQUEST = "CONNECTION_REQUEST"; // Constant used in\r
+                                                                        // building the TIMER ID\r
+  public static final String SEPERATOR = "_"; // Constant used in building the TIMER ID\r
+\r
+  // Connection Request (HTTP Get) constants\r
+  public static final long CONNECTION_RETRY_SLEEP_TIME = 10 * 1000L; // On Connection Request (HTTP\r
+                                                                     // GET) failure, thread will\r
+                                                                     // sleep for x seconds before\r
+                                                                     // retrying.\r
+  public static final Long CR_TIMEOUT = 10 * 1000L; // On Connection Request (HTTP GET) is\r
+                                                    // accepted by device, time to wait for '6\r
+                                                    // Connection Request' Inform to be sent by\r
+                                                    // device. If device does not send any inform\r
+                                                    // within the configured time, connection\r
+                                                    // request shall be retried\r
+  public static final String CR_TIMEOUT_CALLBACK = "ConnectionRequestTimeoutHandler"; // On\r
+                                                                                      // CR_TIMEOUT\r
+                                                                                      // case, the\r
+                                                                                      // callback\r
+                                                                                      // class to\r
+                                                                                      // be called\r
+  public static final int HTTP_OP_FAILED = 1;\r
+  public static final int MAX_CONNECT_RETRY_COUNT = 3; // Max retry count in case device is not\r
+                                                       // accpeting the Connection Request (HTTP\r
+                                                       // GET)\r
+  public static final int DEFAULT_CONNECTION_TIMEOUT = 1 * 10 * 1000; // HTTP GET TIMEOUT, the\r
+                                                                      // thread will be held for x\r
+                                                                      // secs while connecting to\r
+                                                                      // device\r
+  public static final int HTTP_STATUS_OK = 200;\r
+  public static final int HTTP_STATUS_OK_WITH_NO_CONTENT = 204;\r
+  public static final int HTTP_OP_SUCCESS = 0;\r
+  public static final Long HTTP_CONNECTION_IDLE_TIMEOUT = 5 * 1000L;\r
+\r
+  // Request Processor Retry and Delay constants\r
+  public static final Integer MAX_RETRY_LIMIT = 5; // Max retry count by request processor while\r
+                                                   // processing Informs and Device RPC Responses\r
+  public static final Long DELAY = 10000L; // A delay befoee retrying\r
+\r
+  // RPC Timer Execution Constants\r
+  public static final Long DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS = 30L; // Timeout for the RPC,\r
+                                                                       // Timer starts after\r
+                                                                       // persisting the RPC. On\r
+                                                                       // timeout, timedout RPC\r
+                                                                       // response shall be sent\r
+                                                                       // to device\r
+  public static final Long DEVICE_RESPONSE_TIMEOUT = 30 * 1000L; // Session timeout, each session\r
+                                                                 // on moving to processing state\r
+                                                                 // will timeout after the\r
+                                                                 // configured value, will restart\r
+                                                                 // the timer if RPOC isn't\r
+                                                                 // timedout yet\r
+  public static final String SESSION_TIMEOUT_CALLBACK_JNDI = "SessionTimeoutHandler";\r
+  public static final String WAITING_FOR_DEVICE_RESPONSE = "WAITING_FOR_DEVICE_RESPONSE";\r
+  public static final String WAITING_FOR_NBI_RESPONSE = "WAITING_FOR_NBI_RESPONSE";\r
+\r
+  // Timeout operation status codes\r
+  public static final int OPERATION_EXPIRATION_TIMEOUT = 3;\r
+\r
+  // Custom function constants\r
+  public static final String SESSION_ID = "SESSION_ID";\r
+  public static final String NUMBER_REGEX = "[.][0-9]+[.]";\r
+  public static final String SUCCESS = "SUCCESS";\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/ErrorCode.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/ErrorCode.java
new file mode 100644 (file)
index 0000000..6c5c6eb
--- /dev/null
@@ -0,0 +1,59 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.common.utils;\r
+\r
+/**\r
+ * Class Description: All the error definitions\r
+ * \r
+ */\r
+\r
+public enum ErrorCode {\r
+\r
+  UNKNOWN_ERROR("UNKNOWN_ERROR"),\r
+\r
+  UNSUPPORTED_CHARACTER_ENCODING("UNSUPPORTED_CHARACTER_ENCODING"), UNAUTHORIZED_EVENT(\r
+      "UNAUTHORIZED_EVENT"), OUI_OR_PC_MISMATCH("OUI_OR_PC_MISMATCH"), INVALID_PARAMS_IN_INFORM(\r
+          "INVALID_PARAMS_IN_INFORM"), FAILED_PROCESSING_INFORM(\r
+              "FAILED_PROCESSING_INFORM"), FAILED_PROCESSING_RPC_RESPONSE(\r
+                  "FAILED_PROCESSING_RPC_RESPONSE"), EMPTY_REQUEST_PROCESSING_ERROR(\r
+                      "EMPTY_REQUEST_PROCESSING_ERROR"),\r
+\r
+  // TR069 NBI Service Module errors\r
+  DEVICE_NOT_ACTIVATED("DEVICE_NOT_ACTIVATED"), DEVICE_NOT_EXISTS("DEVICE_NOT_EXISTS"),\r
+\r
+  // TR069 NBI Request Processor Module errors\r
+  INVALID_NBI_REQUEST("INVALID_NBI_REQUEST"), MISSING_OPERATION_DETAILS(\r
+      "MISSING_OPERATION_DETAILS"),\r
+\r
+  // Session Manager Module errors\r
+  SESSION_CREATION_ERROR("SESSION_CREATION_ERROR"), SESSION_ALREADY_LOCKED(\r
+      "SESSION_ALREADY_LOCKED"), SESSION_EXPIRED(\r
+          "SESSION_EXPIRED"), SESSION_INITIATION_FAILED("SESSION_INITIATION_FAILED");\r
+\r
+  private String errorCodeKey;\r
+\r
+  private ErrorCode(String errorCodeKey) {\r
+    this.errorCodeKey = errorCodeKey;\r
+  }\r
+\r
+  public String getErrorCodeKey() {\r
+    return errorCodeKey;\r
+  }\r
+}\r
diff --git a/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/Utility.java b/acs/common/src/main/java/org/commscope/tr069adapter/acs/common/utils/Utility.java
new file mode 100644 (file)
index 0000000..6c4d6de
--- /dev/null
@@ -0,0 +1,60 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.common.utils;\r
+\r
+import java.text.MessageFormat;\r
+import java.util.ResourceBundle;\r
+\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public class Utility {\r
+\r
+  private Utility() {}\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(Utility.class);\r
+\r
+  private static final String ERROR_MESSAGE_PROPS = "config/ErrorMessages_tr069";\r
+\r
+  private static ResourceBundle resourceBundle = ResourceBundle.getBundle(ERROR_MESSAGE_PROPS);\r
+\r
+  /**\r
+   * Utility method for reading the error messages from the error message property file.\r
+   * \r
+   * @param key - The key of the message\r
+   * @param args - Arguments of the messages if any\r
+   * @return\r
+   * @throws ReplanExecutorFailedException\r
+   */\r
+  public static String getMessage(String key, String... args) {\r
+    try {\r
+      String result = resourceBundle.getString(key);\r
+      if (args != null && args.length > 0) {\r
+        MessageFormat messageForm = new MessageFormat(result);\r
+        result = messageForm.format(args);\r
+      }\r
+      return result;\r
+    } catch (Exception e) {\r
+      logger.error("Unable to get the message for the given key {}", key);\r
+      return "Unresolved key: " + key;\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/common/src/main/resources/config/ErrorMessages_tr069.properties b/acs/common/src/main/resources/config/ErrorMessages_tr069.properties
new file mode 100644 (file)
index 0000000..12b34c2
--- /dev/null
@@ -0,0 +1,39 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+\r
+TR069.UNKNOWN_ERROR= An unknown error occurred, Error: {0}\r
+\r
+TR069.UNSUPPORTED_CHARACTER_ENCODING=The character encoding {0} is not supported\r
+TR069.UNAUTHORIZED_EVENT=Unauthorized request, hence not honoring the request. Reason: {0}\r
+TR069.OUI_OR_PC_MISMATCH=OUI/Product Class validation failed, The persisted device OUI/Product class is not matching with OUI/PC sent by device\r
+TR069.INVALID_PARAMS_IN_INFORM=Device Inform do not contain all the basic required parameters\r
+TR069.FAILED_PROCESSING_INFORM=Failed processing the Inform event from device, Reason: {0}\r
+TR069.FAILED_PROCESSING_RPC_RESPONSE=Failed processing the Device RPC response {0}, Reason: {1}\r
+TR069.EMPTY_REQUEST_PROCESSING_ERROR=Failed processing the empty request from device, Reason: {0}\r
+\r
+TR069.DEVICE_NOT_ACTIVATED=Device is not activated. Device should contact ACS via BOOTSTRAP Inform to be activated\r
+TR069.DEVICE_NOT_EXISTS=Device {0} does not exist. Device must be factory imported before contacting ACS.\r
+\r
+TR069.INVALID_NBI_REQUEST=An Empty/NULL device RPC request received from mapper.\r
+TR069.MISSING_OPERATION_DETAILS=Device RPC request does not contain valid operation details like operation code.\r
+\r
+TR069.SESSION_CREATION_ERROR=An error occurred during session creation, Reason: {0}\r
+TR069.SESSION_ALREADY_LOCKED=Session lock could not be acquired, Session is already busy honoring another request. Lock acquire failure reason: {0}\r
+TR069.SESSION_EXPIRED=Session with ID {0}, for the device is expired.\r
+TR069.SESSION_INITIATION_FAILED=Device {0} - HTTP Get on Connection request URL to initiate device session failed after MAX retry.
\ No newline at end of file
diff --git a/acs/cpe/pom.xml b/acs/cpe/pom.xml
new file mode 100644 (file)
index 0000000..198023e
--- /dev/null
@@ -0,0 +1,141 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+    <modelVersion>4.0.0</modelVersion>\r
+    <groupId>org.commscope.tr069adapter.acs.cpe</groupId>\r
+    <artifactId>cpe</artifactId>\r
+    <name>CPE Management</name>\r
+\r
+    <parent>\r
+       <groupId>org.commscope.tr069adapter.acs</groupId>\r
+       <artifactId>acs</artifactId>\r
+       <version>1.0.0</version>\r
+    </parent>\r
+\r
+    <dependencies>\r
+       <dependency>\r
+               <groupId>org.springframework</groupId>\r
+               <artifactId>spring-jms</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-web</artifactId>\r
+               <exclusions>\r
+                <exclusion>\r
+                    <groupId>org.springframework.boot</groupId>\r
+                    <artifactId>spring-boot-starter-logging</artifactId>\r
+                </exclusion>\r
+            </exclusions>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-log4j2</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+            <groupId>com.lmax</groupId>\r
+            <artifactId>disruptor</artifactId>\r
+            <version>3.4.2</version>\r
+        </dependency>\r
+       <dependency>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-starter-activemq</artifactId>\r
+        </dependency>\r
+       <dependency>\r
+               <groupId>org.apache.activemq</groupId>\r
+               <artifactId>activemq-broker</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>com.fasterxml.jackson.core</groupId>\r
+               <artifactId>jackson-databind</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>javax.ws.rs</groupId>\r
+               <artifactId>javax.ws.rs-api</artifactId>\r
+               <version>2.0</version>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>com.sun.xml.messaging.saaj</groupId>\r
+               <artifactId>saaj-impl</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>javax.xml.bind</groupId>\r
+               <artifactId>jaxb-api</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>commons-httpclient</groupId>\r
+               <artifactId>commons-httpclient</artifactId>\r
+               <version>3.1</version>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.commscope.tr069adapter.common</groupId>\r
+               <artifactId>common</artifactId>\r
+               <version>1.0.0</version>\r
+       </dependency>\r
+       <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+    </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/CPEManagementService.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/CPEManagementService.java
new file mode 100644 (file)
index 0000000..6f07e36
--- /dev/null
@@ -0,0 +1,577 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.ACS_SESSIONID;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CWMP_VERSION;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.INFORM;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.TRANSFER_COMPLETE;\r
+\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.InputStreamReader;\r
+import java.io.OutputStream;\r
+import java.io.OutputStreamWriter;\r
+import java.io.PipedInputStream;\r
+import java.io.PipedOutputStream;\r
+import java.io.Reader;\r
+import java.io.UnsupportedEncodingException;\r
+import java.io.Writer;\r
+import java.net.URLDecoder;\r
+import java.nio.charset.StandardCharsets;\r
+import java.util.Enumeration;\r
+\r
+import javax.servlet.http.Cookie;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import javax.ws.rs.core.Context;\r
+import javax.xml.soap.MessageFactory;\r
+import javax.xml.soap.MimeHeaders;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPMessage;\r
+\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.response.DeviceInformResponse;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.cpe.handler.DeviceEventHandler;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Fault;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.InformResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.TransferComplete;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.TransferCompleteResponse;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping("/CPEMgmt")\r
+public class CPEManagementService {\r
+\r
+  private static final String UTF_8 = "UTF-8";\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(CPEManagementService.class);\r
+\r
+  private static final int MY_MAX_ENVELOPES = 1;\r
+\r
+  @Autowired\r
+  DeviceEventHandler deviceEventHandler;\r
+\r
+  /**\r
+   * @param request\r
+   * @param response\r
+   */\r
+  @SuppressWarnings("static-access")\r
+  @PostMapping("/acs")\r
+  public void processDeviceEvent(@Context HttpServletRequest request,\r
+      @Context HttpServletResponse response) {\r
+\r
+    logger.debug("A device event occurred");\r
+    logHeaderElements(request.getHeaderNames());\r
+\r
+    try {\r
+      Boolean isEmptyCPERequest = true;\r
+      SOAPMessage soapMsg = null;\r
+      ByteArrayOutputStream out = new ByteArrayOutputStream();\r
+\r
+      String ct = request.getContentType();\r
+      int csix = -1;\r
+      String csFrom = "ISO-8859-1";\r
+      if (ct != null) {\r
+        csix = ct.indexOf("charset=");\r
+        response.setContentType(ct);\r
+      } else {\r
+        response.setContentType("text/xml;charset=UTF-8");\r
+      }\r
+\r
+      if (csix != -1)\r
+        csFrom = ct.substring(csix + 8).replaceAll("\"", "");\r
+\r
+      Cookie[] cookies = request.getCookies();\r
+      String acsSessionID = getACSSessionCookieData(cookies);\r
+      String cwmpVersion = getCWMPVersionCookieData(cookies);\r
+\r
+      XmlFilterInputStream f =\r
+          new XmlFilterInputStream(request.getInputStream(), request.getContentLength());\r
+      MessageFactory mf = getSOAPMessageFactory();\r
+      while (f.next()) {\r
+        isEmptyCPERequest = false;\r
+        MimeHeaders hdrs = new MimeHeaders();\r
+        hdrs.setHeader("Content-Type", "text/xml; charset=UTF-8");\r
+        InputStream in = getInputStream(csFrom, f);\r
+        soapMsg = mf.createMessage(hdrs, in);\r
+\r
+        logSoapMsg(soapMsg);\r
+\r
+        TR069RPC msg = null;\r
+        msg = TR069RPC.parse(soapMsg);\r
+\r
+        String reqType = getRequestType(msg);\r
+        logger.info("Event notified by the device is of type: {}", reqType);\r
+\r
+        if (reqType != null) {\r
+          if (reqType.equals(INFORM)) {\r
+            processDeviceInform(msg, request, response, out);\r
+          } else if (reqType.equals(TRANSFER_COMPLETE)) {\r
+            processTransferComplete(msg, response, out);\r
+          } else {\r
+            processOperationResult(msg, response, reqType, acsSessionID, out);\r
+          }\r
+        }\r
+      }\r
+\r
+      if (isEmptyCPERequest.booleanValue()) {\r
+        processEmptyCPERequest(response, cwmpVersion, acsSessionID, out);\r
+      }\r
+\r
+      if (out.size() < 1) {// To delete dm_sessionId cookie\r
+        clearCookies(cookies, response);\r
+      }\r
+\r
+      response.setContentLength(out.size());\r
+      response.setHeader("SOAPAction", "");\r
+      String sout = out.toString().trim();\r
+      logger.info(sout);\r
+      response.getOutputStream().print(sout);\r
+      response.getOutputStream().flush();\r
+      logger.debug("End of processing");\r
+\r
+    } catch (Exception e) {\r
+      logger.error("An error occurred while processing device event, Exception: {}",\r
+          e.getMessage());\r
+      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
+    }\r
+\r
+    logger.debug("End of processing the HTTP post request");\r
+  }\r
+\r
+  private InputStream getInputStream(String csFrom, XmlFilterInputStream f) throws IOException {\r
+    InputStream in = null;\r
+    if (csFrom.equalsIgnoreCase(UTF_8)) {\r
+      in = new XmlFilterNS(f);\r
+    } else {\r
+      in = new CharsetConverterInputStream(csFrom, UTF_8, new XmlFilterNS(f));\r
+    }\r
+    return in;\r
+  }\r
+\r
+  private void processDeviceInform(TR069RPC msg, HttpServletRequest request,\r
+      HttpServletResponse response, ByteArrayOutputStream out) throws IOException {\r
+    Inform inform = (Inform) msg;\r
+    DeviceInformResponse deviceInformResponse = null;\r
+    try {\r
+      deviceInformResponse =\r
+          deviceEventHandler.processDeviceInform(inform, request.getHeader("Authorization"));\r
+      Cookie cookie = new Cookie(ACS_SESSIONID, deviceInformResponse.getSessionId());\r
+      Cookie cwmpVerCookie = new Cookie(CWMP_VERSION, msg.getCWMPVersion());\r
+      response.addCookie(cookie);\r
+      response.addCookie(cwmpVerCookie);\r
+    } catch (TR069EventProcessingException tr069ex) {\r
+      ErrorCode errorCode = tr069ex.getErrorCode();\r
+      if (ErrorCode.OUI_OR_PC_MISMATCH.equals(errorCode)) {\r
+        sendFault(response, out, Fault.FCODE_ACS_REQUEST_DENIED, "OUIandProductClassNotValid",\r
+            inform.getId());\r
+      } else {\r
+        int httpStatusCode = deviceEventHandler.handleException(tr069ex);\r
+        response.setStatus(httpStatusCode);\r
+      }\r
+      int httpStatusCode = deviceEventHandler.handleException(tr069ex);\r
+      response.setStatus(httpStatusCode);\r
+    }\r
+\r
+    InformResponse resp = new InformResponse(inform.getId(), MY_MAX_ENVELOPES);\r
+    resp.setCWMPVersion(msg.getCWMPVersion());\r
+    resp.writeTo(out);\r
+  }\r
+\r
+  private void processTransferComplete(TR069RPC msg, HttpServletResponse response,\r
+      ByteArrayOutputStream out) {\r
+    TransferComplete tc = (TransferComplete) msg;\r
+    try {\r
+      DeviceInformResponse deviceInformResponse = deviceEventHandler.processTransferComplete(tc);\r
+      Cookie cookie = new Cookie(ACS_SESSIONID, deviceInformResponse.getSessionId());\r
+      Cookie cwmpVerCookie = new Cookie(CWMP_VERSION, msg.getCWMPVersion() + ";");\r
+      response.addCookie(cookie);\r
+      response.addCookie(cwmpVerCookie);\r
+    } catch (Exception e) {\r
+      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
+      return;\r
+    }\r
+    TransferCompleteResponse tr = new TransferCompleteResponse(tc.getId());\r
+    tr.setCWMPVersion(msg.getCWMPVersion());\r
+    tr.writeTo(out);\r
+  }\r
+\r
+  private void processOperationResult(TR069RPC msg, HttpServletResponse response, String reqType,\r
+      String acsSessionID, ByteArrayOutputStream out) {\r
+    logger.debug("Received Operation Result response {}", msg);\r
+    if (null == acsSessionID) {\r
+      logger.error("Received response without session ID, response: {}", reqType);\r
+    } else {\r
+      try {\r
+        TR069RPC message = deviceEventHandler.processRPCResponse(msg, acsSessionID);\r
+        if (null != message) {\r
+          message.setCWMPVersion(msg.getCWMPVersion());\r
+          message.writeTo(out);\r
+        } else {\r
+          response.setStatus(HttpServletResponse.SC_NO_CONTENT);\r
+        }\r
+      } catch (TR069EventProcessingException tr069ex) {\r
+        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
+      }\r
+    }\r
+  }\r
+\r
+  private void processEmptyCPERequest(HttpServletResponse response, String cwmpVersion,\r
+      String acsSessionID, ByteArrayOutputStream out) {\r
+    if (null == acsSessionID) {\r
+      logger.error("Received empty response without session ID");\r
+      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
+      return;\r
+    }\r
+\r
+    try {\r
+      logger.info("Received Empty Device response");\r
+      TR069RPC message = deviceEventHandler.processEmptyRequest(acsSessionID);\r
+      if (null != message) {\r
+        message.setCWMPVersion(cwmpVersion);\r
+        message.writeTo(out);\r
+      } else {\r
+        response.setStatus(HttpServletResponse.SC_NO_CONTENT);\r
+      }\r
+    } catch (TR069EventProcessingException tr069ex) {\r
+      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
+    }\r
+  }\r
+\r
+  private void clearCookies(Cookie[] cookies, HttpServletResponse response) {\r
+    Cookie cookieToDelete = null;\r
+    if (null != cookies) {\r
+      logger.debug("Clearing the cookies");\r
+      for (int i = 0; i < cookies.length; i++) {\r
+        if (cookies[i].getName().equals(ACS_SESSIONID)\r
+            || cookies[i].getName().equals(CWMP_VERSION)) {\r
+          cookieToDelete = cookies[i];\r
+          cookieToDelete.setMaxAge(0);\r
+          response.addCookie(cookieToDelete);\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  private static class XmlFilterInputStream extends InputStream {\r
+\r
+    private InputStream istream;\r
+    private int lvl;\r
+    private int lastchar;\r
+    @SuppressWarnings("unused")\r
+    private int len;\r
+    private int nextchar;\r
+    private boolean intag = false;\r
+    private StringBuilder buff = new StringBuilder(16);\r
+\r
+    /** Creates a new instance of xmlFilterInputStream */\r
+    public XmlFilterInputStream(InputStream is, int l) {\r
+      len = l;\r
+      istream = is;\r
+    }\r
+\r
+    @Override\r
+    public int read() throws IOException {\r
+      if (lastchar == '>' && lvl == 0) {\r
+        return -1;\r
+      }\r
+      int l = lastchar;\r
+      if (!readLastChar())\r
+        return lastchar;\r
+\r
+      if (!intag && lastchar == '&') {\r
+        int amppos = buff.length();\r
+        updateBuffer();\r
+        String s = buff.substring(amppos);\r
+        replaceSpecialChars(s, amppos);\r
+        return read();\r
+      }\r
+\r
+      if (l == '<') {\r
+        intag = true;\r
+        if (lastchar == '/') {\r
+          lvl--;\r
+        } else {\r
+          lvl++;\r
+        }\r
+      }\r
+\r
+      len--;\r
+      return lastchar;\r
+    }\r
+\r
+    public boolean next() throws IOException {\r
+      if ((nextchar = istream.read()) == -1) {\r
+        logger.debug("Next char is {}", nextchar);\r
+        lvl = 0;\r
+        lastchar = 0;\r
+      }\r
+      return (nextchar != -1);\r
+    }\r
+\r
+    private boolean readLastChar() throws IOException {\r
+      if (nextchar != -1) {\r
+        lastchar = nextchar;\r
+        nextchar = -1;\r
+      } else {\r
+        if (buff.length() > 0) {\r
+          lastchar = buff.charAt(0);\r
+          buff.deleteCharAt(0);\r
+          return false;\r
+        } else {\r
+          lastchar = istream.read();\r
+        }\r
+      }\r
+\r
+      if (lastchar == '<') {\r
+        intag = true;\r
+      } else if (lastchar == '>') {\r
+        intag = false;\r
+      }\r
+\r
+      return true;\r
+    }\r
+\r
+    private void updateBuffer() throws IOException {\r
+      // fix up broken xml not encoding &\r
+      buff.append((char) lastchar);\r
+      for (int c = 0; c < 10; c++) {\r
+        int ch = istream.read();\r
+        boolean breakLoop = false;\r
+        if (ch == -1) {\r
+          breakLoop = true;\r
+        }\r
+        if (ch == '&') {\r
+          nextchar = ch;\r
+          breakLoop = true;\r
+        }\r
+        if (breakLoop)\r
+          break;\r
+\r
+        buff.append((char) ch);\r
+      }\r
+    }\r
+\r
+    private void replaceSpecialChars(String s, int amppos) {\r
+      if (!s.startsWith("&amp;") && !s.startsWith("&lt;") && !s.startsWith("&gt;")\r
+          && !s.startsWith("&apos;") && !s.startsWith("&quot;") && !s.startsWith("&#")) {\r
+        buff.replace(amppos, amppos + 1, "&amp;");\r
+      }\r
+    }\r
+  }\r
+\r
+  private static class XmlFilterNS extends InputStream {\r
+    // Dumb class to filter out declaration of default xmlns\r
+\r
+    private String pat = "xmlns=\"urn:dslforum-org:cwmp-1-0\"";\r
+    private String pat2 = "xmlns=\"urn:dslforum-org:cwmp-1-1\"";\r
+    private int length = 0;\r
+    private int pos = 0;\r
+    private boolean f = false;\r
+    private byte[] buff = new byte[1024];\r
+    private InputStream is;\r
+\r
+    @Override\r
+    public int read() throws IOException {\r
+      if (!f) {\r
+        length = is.read(buff);\r
+        if (length < buff.length) {\r
+          byte[] b2 = new byte[length];\r
+          System.arraycopy(buff, 0, b2, 0, length);\r
+          buff = b2;\r
+        }\r
+\r
+        String b = new String(buff, StandardCharsets.UTF_8);\r
+        b = b.replace(pat, "");\r
+        b = b.replace(pat2, "");\r
+        buff = b.getBytes(StandardCharsets.UTF_8);\r
+        length = buff.length;\r
+        f = true;\r
+      }\r
+\r
+      if (pos < length) {\r
+        return buff[pos++] & 0xFF;\r
+      }\r
+      return is.read();\r
+    }\r
+\r
+    public XmlFilterNS(InputStream is) {\r
+      this.is = is;\r
+    }\r
+  }\r
+\r
+  private static class CharsetConverterInputStream extends InputStream {\r
+\r
+    @SuppressWarnings("unused")\r
+    private InputStream in;\r
+    private PipedInputStream pipein;\r
+    private OutputStream pipeout;\r
+    private Reader r;\r
+    private Writer w;\r
+\r
+    public CharsetConverterInputStream(String csFrom, String csTo, InputStream in)\r
+        throws IOException {\r
+      this.in = in;\r
+      r = new InputStreamReader(in, csFrom);\r
+      pipein = new PipedInputStream();\r
+      pipeout = new PipedOutputStream(pipein);\r
+      w = new OutputStreamWriter(pipeout, csTo);\r
+    }\r
+\r
+    @Override\r
+    public int read() throws IOException {\r
+      if (pipein.available() > 0) {\r
+        return pipein.read();\r
+      }\r
+      int c = r.read();\r
+      if (c == -1) {\r
+        return -1;\r
+      }\r
+      w.write(c);\r
+      w.flush();\r
+      return pipein.read();\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   * @throws Exception\r
+   */\r
+  private MessageFactory getSOAPMessageFactory() throws SOAPException {\r
+    MessageFactory mf = null;\r
+    mf = MessageFactory.newInstance();\r
+    return mf;\r
+  }\r
+\r
+  /**\r
+   * @param cookies\r
+   * @return\r
+   */\r
+  private String getACSSessionCookieData(Cookie[] cookies) {\r
+    String acsSessionID = null;\r
+    if (null != cookies) {\r
+      for (Cookie cookie : cookies) {\r
+        if (cookie.getName().equals(ACS_SESSIONID)) {\r
+          acsSessionID = cookie.getValue();\r
+          logger.debug("The session id is {}", acsSessionID);\r
+        }\r
+      }\r
+    }\r
+    return acsSessionID;\r
+  }\r
+\r
+  /**\r
+   * @param cookies\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  private String getCWMPVersionCookieData(Cookie[] cookies) throws TR069EventProcessingException {\r
+    String cwmpVersion = null;\r
+    try {\r
+      if (null != cookies) {\r
+        for (Cookie cookie : cookies) {\r
+          if (cookie.getName().equals(CWMP_VERSION)) {\r
+            cwmpVersion = cookie.getValue();\r
+            if (cwmpVersion != null) {\r
+              cwmpVersion = URLDecoder.decode(cwmpVersion, StandardCharsets.UTF_8.name());\r
+            }\r
+            logger.debug("The CWMP version supported by the device is: {}", cwmpVersion);\r
+          }\r
+        }\r
+      }\r
+    } catch (UnsupportedEncodingException e) {\r
+      logger.error(e.getMessage());\r
+      TR069EventProcessingException ex = new TR069EventProcessingException(\r
+          ErrorCode.UNSUPPORTED_CHARACTER_ENCODING, StandardCharsets.UTF_8.name());\r
+      logger.error(ex.getMessage());\r
+      throw ex;\r
+    }\r
+    return cwmpVersion;\r
+  }\r
+\r
+  /**\r
+   * @param soapMsg\r
+   */\r
+  private void logSoapMsg(SOAPMessage soapMsg) {\r
+    StringBuilder buffer = new StringBuilder();\r
+    buffer.append(soapMsg.toString());\r
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
+    try {\r
+      soapMsg.writeTo(baos);\r
+    } catch (SOAPException | IOException e) {\r
+      logger.error("Error while writting soap message");\r
+    }\r
+    buffer.append(baos);\r
+    String soapMessage = buffer.toString();\r
+    logger.debug(soapMessage);\r
+  }\r
+\r
+  /**\r
+   * @param response\r
+   * @param out\r
+   * @param fcodeAcsRequestDenied\r
+   * @param faultString\r
+   * @param id\r
+   * @throws IOException\r
+   */\r
+  private void sendFault(HttpServletResponse response, ByteArrayOutputStream out,\r
+      String fcodeAcsRequestDenied, String faultString, String id) throws IOException {\r
+    Fault fault = new Fault(fcodeAcsRequestDenied, faultString, id);\r
+    fault.writeTo(out);\r
+    response.setContentLength(out.size());\r
+    String sout = out.toString(UTF_8);\r
+    sout = sout.replace('\'', '"');\r
+    response.getOutputStream().print(sout);\r
+  }\r
+\r
+  private void logHeaderElements(Enumeration<String> headerName) {\r
+    while (headerName.hasMoreElements()) {\r
+      String requestHeader = headerName.nextElement();\r
+      logger.debug("Request Headers {}", requestHeader);\r
+    }\r
+  }\r
+\r
+  private String getRequestType(TR069RPC msg) {\r
+    String requestType = msg.getName();\r
+    if (requestType == null)\r
+      requestType = "Empty Request";\r
+\r
+    return requestType;\r
+  }\r
+\r
+  /******************************************************************************************************************/\r
+\r
+  public DeviceEventHandler getDeviceEventHandler() {\r
+    return deviceEventHandler;\r
+  }\r
+\r
+  public void setDeviceEventHandler(DeviceEventHandler deviceEventHandler) {\r
+    this.deviceEventHandler = deviceEventHandler;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/TR069RPC.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/TR069RPC.java
new file mode 100644 (file)
index 0000000..e3da5e9
--- /dev/null
@@ -0,0 +1,434 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.cpe;\r
+\r
+import java.io.IOException;\r
+import java.io.OutputStream;\r
+import java.io.Serializable;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.Random;\r
+\r
+import javax.xml.soap.MessageFactory;\r
+import javax.xml.soap.Name;\r
+import javax.xml.soap.Node;\r
+import javax.xml.soap.SOAPBody;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPEnvelope;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+import javax.xml.soap.SOAPHeader;\r
+import javax.xml.soap.SOAPHeaderElement;\r
+import javax.xml.soap.SOAPMessage;\r
+import javax.xml.soap.SOAPPart;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Fault;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public abstract class TR069RPC implements Serializable {\r
+\r
+  private static final String HTTP_SCHEMA_ENCODING = "http://schemas.xmlsoap.org/soap/encoding/";\r
+\r
+  private static final long serialVersionUID = 7270475819053880884L;\r
+\r
+  protected static final Logger logger = LoggerFactory.getLogger(TR069RPC.class);\r
+\r
+  private Random mrandom = new Random();\r
+\r
+  /** Creates a new instance of Message */\r
+  public TR069RPC() {}\r
+\r
+  public static final String ENVELOPE_NAMESPACE = "http://schemas.xmlsoap.org/soap/envelope/";\r
+\r
+  protected abstract void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException;\r
+\r
+  protected abstract void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException;\r
+\r
+  protected class ArrayType {\r
+\r
+    public ArrayType() {\r
+      super();\r
+    }\r
+\r
+    private String type;\r
+\r
+    public String getType() {\r
+      return type;\r
+    }\r
+\r
+    public Name getType(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+      int i = type.indexOf(':');\r
+      if (i == -1) {\r
+        return spf.createName(type);\r
+      } else {\r
+        String prefix = type.substring(0, i);\r
+        SOAPBody b = (SOAPBody) body.getParentElement();\r
+        SOAPEnvelope e = (SOAPEnvelope) b.getParentElement();\r
+        SOAPHeader h = e.getHeader();\r
+        String uri = null;\r
+        try {\r
+          uri = h.lookupNamespaceURI(prefix);\r
+        } catch (Exception ee) {\r
+          logger.error("While geting namespace URI 1 {}", ee.toString());\r
+        }\r
+        if (uri == null) {\r
+          try {\r
+            uri = e.lookupNamespaceURI(prefix);\r
+          } catch (Exception ee) {\r
+            logger.error("While geting namespace URI 2 {}", ee.toString());\r
+          }\r
+        }\r
+        if (uri == null) {\r
+          try {\r
+            uri = b.lookupNamespaceURI(prefix);\r
+          } catch (Exception ee) {\r
+            logger.error("While geting namespace URI {} ", ee.toString());\r
+          }\r
+        }\r
+        return spf.createName(type.substring(i + 1), prefix, uri);\r
+      }\r
+    }\r
+\r
+    public void setType(String type) {\r
+      this.type = type;\r
+    }\r
+  }\r
+\r
+  public static SOAPBodyElement getRequest(SOAPMessage msg) throws SOAPException {\r
+    SOAPBodyElement request = null;\r
+    Iterator<Node> i1 = msg.getSOAPBody().getChildElements();\r
+    while (i1.hasNext()) {\r
+      Node n = i1.next();\r
+      if (n.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {\r
+        request = (SOAPBodyElement) n;\r
+      }\r
+    }\r
+    return request;\r
+  }\r
+\r
+  private static String getRequestName(SOAPMessage msg) throws SOAPException {\r
+    if (msg.getSOAPBody().hasFault()) {\r
+      return "Fault";\r
+    }\r
+    String name = "";\r
+    SOAPBodyElement element = getRequest(msg);\r
+    if (element != null) {\r
+      name = element.getNodeName();\r
+    }\r
+    if (name.startsWith("cwmp:")) {\r
+      name = name.substring(5);\r
+    } else if (name.startsWith("cwmp_x:")) {\r
+      name = name.substring(7);\r
+    } else if (name.indexOf(':') != -1) {\r
+      name = name.substring(name.indexOf(':') + 1, name.length());\r
+    }\r
+    return name;\r
+  }\r
+\r
+  public static TR069RPC parse(SOAPMessage soapMsg)\r
+      throws SOAPException, InstantiationException, IllegalAccessException, ClassNotFoundException {\r
+    String reqname = TR069RPC.getRequestName(soapMsg);\r
+\r
+    TR069RPC msg = null;\r
+    try {\r
+      msg = (TR069RPC) Class.forName("org.commscope.tr069adapter.acs.cpe.rpc." + reqname)\r
+          .newInstance();\r
+    } catch (Exception e) {\r
+      msg = (TR069RPC) Class.forName("org.commscope.tr069adapter.acs.cpe.rpc." + reqname)\r
+          .newInstance();\r
+    }\r
+    msg = msg.parseSoapMessage(soapMsg);\r
+    return msg;\r
+  }\r
+\r
+  @SuppressWarnings("unchecked")\r
+  private TR069RPC parseSoapMessage(SOAPMessage soapMsg) throws SOAPException {\r
+    SOAPEnvelope env = soapMsg.getSOAPPart().getEnvelope();\r
+\r
+    Iterator<String> pfxs = env.getNamespacePrefixes();\r
+    while (pfxs.hasNext()) {\r
+      String pfx = pfxs.next();\r
+      String uri = env.getNamespaceURI(pfx);\r
+      if (uri.startsWith("urn:dslforum-org:cwmp-")) {\r
+        urnCWMP = uri;\r
+      }\r
+    }\r
+    SOAPFactory spf = SOAPFactory.newInstance();\r
+    SOAPBodyElement soaprequest = getRequest(soapMsg);\r
+    SOAPHeader hdr = soapMsg.getSOAPHeader();\r
+    id = "device_did_not_send_id"; // or make it null?...\r
+    if (hdr != null) {\r
+      try {\r
+        id = getHeaderElement(spf, hdr, "ID");\r
+      } catch (Exception e) {\r
+        logger.error("While parsing the soap message {}", e.toString());\r
+      }\r
+    }\r
+    name = getRequestName(soapMsg);\r
+    if (soaprequest != null) {\r
+      Fault fault = parseSOAPRequest(soaprequest, spf);\r
+      if (fault != null)\r
+        return fault;\r
+    }\r
+    return this;\r
+  }\r
+\r
+  private Fault parseSOAPRequest(SOAPBodyElement soaprequest, SOAPFactory spf)\r
+      throws SOAPException {\r
+    if (soaprequest != null) {\r
+      try {\r
+        parseBody(soaprequest, spf);\r
+      } catch (Exception e) {\r
+        SOAPElement se = getRequestChildElement(spf, soaprequest, FAULT_CODE);\r
+        String fc = (se != null) ? se.getValue() : "0";\r
+        SOAPElement se2 = getRequestChildElement(spf, soaprequest, FAULT_STRING);\r
+        String fs = (se2 != null) ? se2.getValue() : "0";\r
+\r
+        if (se != null || se2 != null) {\r
+          return new Fault(fc, fs, id);\r
+        }\r
+        throw e;\r
+      }\r
+    }\r
+    return null;\r
+  }\r
+\r
+  public void writeTo(OutputStream out) {\r
+    try {\r
+      SOAPFactory spf = SOAPFactory.newInstance();\r
+      MessageFactory factory = MessageFactory.newInstance();\r
+      SOAPMessage soapMsg = factory.createMessage();\r
+      SOAPPart part = soapMsg.getSOAPPart();\r
+\r
+      SOAPEnvelope envelope = part.getEnvelope();\r
+      SOAPHeader header = envelope.getHeader();\r
+      SOAPBody body = envelope.getBody();\r
+\r
+      String responseId = getId();\r
+\r
+      envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");\r
+      envelope.addNamespaceDeclaration("cwmp", urnCWMP);\r
+      envelope.addNamespaceDeclaration("SOAP-ENC", HTTP_SCHEMA_ENCODING);\r
+      envelope.addNamespaceDeclaration("SOAP-ENV", ENVELOPE_NAMESPACE);\r
+      envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");\r
+\r
+      SOAPElement element = header.addChildElement(spf.createName("ID", "cwmp", urnCWMP));\r
+      element.addAttribute(spf.createName("mustUnderstand", "SOAP-ENV", ENVELOPE_NAMESPACE),\r
+          responseId);\r
+      element.addTextNode("1");\r
+\r
+      body.setEncodingStyle(HTTP_SCHEMA_ENCODING);\r
+      SOAPBodyElement bd = body.addBodyElement(spf.createName(name, CWMP, urnCWMP));\r
+\r
+      if (name == null || name.equals("")) {\r
+        name = this.getClass().getSimpleName();\r
+      }\r
+      createBody(bd, spf, id);\r
+\r
+      soapMsg.writeTo(out);\r
+    } catch (SOAPException ex) {\r
+      logger.error("Exception occurred while constructing SOAP message: {}", ex.getMessage());\r
+    } catch (IOException e) {\r
+      logger.error("Exception occurred while constructing SOAP message: {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf, String key)\r
+      throws SOAPException {\r
+    logger.debug("Key element is: {}", key);\r
+    createBody(body, spf);\r
+  }\r
+\r
+  protected SOAPElement getRequestChildElement(SOAPFactory f, SOAPElement req, String name) {\r
+    @SuppressWarnings("unchecked")\r
+    Iterator<Object> i = req.getChildElements();\r
+    f.getClass();\r
+    while (i.hasNext()) {\r
+      Object o = i.next();\r
+      try {\r
+        Node nn = (Node) o;\r
+        String n = nn.getLocalName();\r
+        if (n != null && n.equals(name)) {\r
+          return (SOAPElement) o;\r
+        }\r
+      } catch (Exception e) {\r
+        logger.debug("Exception: {}, {}", e.getMessage(), e.getClass().getName());\r
+      }\r
+    }\r
+    return null;\r
+  }\r
+\r
+  protected SOAPElement getRequestChildElement2(SOAPFactory f, SOAPElement req, String name)\r
+      throws SOAPException {\r
+    return (SOAPElement) req.getChildElements(f.createName(name, CWMP, urnCWMP)).next();\r
+  }\r
+\r
+  protected String getRequestElement(SOAPFactory f, SOAPElement req, String name) {\r
+    return getRequestChildElement(f, req, name).getValue();\r
+  }\r
+\r
+  protected String getRequestElement(SOAPFactory f, SOAPElement req, String name, String def) {\r
+    String v = getRequestChildElement(f, req, name).getValue();\r
+    return (v != null) ? v : def;\r
+  }\r
+\r
+  protected SOAPElement getRequestChildElement(SOAPElement req, Name name) {\r
+    return (SOAPElement) req.getChildElements(name).next();\r
+  }\r
+\r
+  protected String getRequestElement(SOAPElement req, Name name) {\r
+    return getRequestChildElement(req, name).getValue();\r
+  }\r
+\r
+  protected String getHeaderElement(SOAPFactory f, SOAPHeader hdr, String name)\r
+      throws SOAPException {\r
+    return ((SOAPHeaderElement) hdr.getChildElements(f.createName(name, CWMP, urnCWMP)).next())\r
+        .getValue();\r
+  }\r
+\r
+  protected HashMap<String, String> parseParamList(SOAPElement body, SOAPFactory spf)\r
+      throws SOAPException {\r
+    return parseParamList(body, spf, "ParameterValueStruct", "Value");\r
+  }\r
+\r
+  protected HashMap<String, String> parseParamList(SOAPElement body, SOAPFactory spf, String sn,\r
+      String vn) throws SOAPException {\r
+    Iterator<SOAPElement> pi =\r
+        getRequestChildElement(spf, body, "ParameterList").getChildElements(spf.createName(sn));\r
+    Name nameKey = spf.createName("Name");\r
+    Name nameValue = spf.createName(vn);\r
+    HashMap<String, String> pl = new HashMap<>();\r
+    while (pi.hasNext()) {\r
+      SOAPElement param = pi.next();\r
+      String key = getRequestElement(param, nameKey);\r
+      String value = getRequestElement(param, nameValue);\r
+      if (value == null) {\r
+        value = "";\r
+      }\r
+      pl.put(key, value);\r
+    }\r
+    return pl;\r
+  }\r
+\r
+  protected int getArrayCount(SOAPFactory spf, SOAPElement e) throws SOAPException {\r
+    return getArrayCount(spf, e, null);\r
+  }\r
+\r
+  protected int getArrayCount(SOAPFactory spf, SOAPElement e, ArrayType type) throws SOAPException {\r
+    Name nameArray = spf.createName("arrayType", "soap-enc", HTTP_SCHEMA_ENCODING);\r
+    String attr = e.getAttributeValue(nameArray);\r
+    if (attr == null) {\r
+      return 0;\r
+    }\r
+    attr = attr.replace(" ", "");\r
+    int i = attr.indexOf('[');\r
+    String c = attr.substring(i + 1, attr.length() - 1);\r
+    if (type != null) {\r
+      type.setType(attr.substring(0, i));\r
+    }\r
+    return Integer.parseInt(c);\r
+  }\r
+\r
+  public boolean isFault() {\r
+    return name.equals("Fault");\r
+  }\r
+\r
+  protected String b2s(boolean b) {\r
+    return (b) ? "1" : "0";\r
+  }\r
+\r
+  protected String name;\r
+\r
+  public String getName() {\r
+    return name;\r
+  }\r
+\r
+  protected String id;\r
+\r
+  public String getId() {\r
+    if (id == null) {\r
+      id = "" + mrandom.nextInt(99999);\r
+    }\r
+    return id;\r
+  }\r
+\r
+  protected void println(StringBuilder b, String n, String v) {\r
+    b.append(n);\r
+    b.append(": ");\r
+    b.append(v);\r
+    b.append("\n");\r
+  }\r
+\r
+  protected void println(StringBuilder b, String n, String n2, String v) {\r
+    b.append(n);\r
+    println(b, n2, v);\r
+  }\r
+\r
+  public String getCWMPVersion() {\r
+    return urnCWMP;\r
+  }\r
+\r
+  public void setCWMPVersion(String cwmpVersion) {\r
+    urnCWMP = cwmpVersion;\r
+  }\r
+\r
+  protected String urnCWMP = "urn:dslforum-org:cwmp-1-0";\r
+  protected static final String CWMP = "cwmp";\r
+  protected static final String PARAMETER_KEY = "ParameterKey";\r
+  protected static final String COMMAND_KEY = "CommandKey";\r
+  protected static final String XSI_TYPE = "xsi:type";\r
+  protected static final String XSD_STRING = "xsd:string";\r
+  protected static final String XSD_UNSIGNEDINT = "xsd:unsignedInt";\r
+  protected static final String XSD_INT = "xsd:int";\r
+  protected static final String XSD_BOOLEAN = "xsd:boolean";\r
+  protected static final String XSD_DATETIME = "xsd:dateTime";\r
+  protected static final String XSD_BASE64 = "xsd:base64";\r
+  protected static final String SOAP_ARRAY_TYPE = "SOAP-ENC:arrayType";\r
+  public static final String FAULT_CODE = "FaultCode";\r
+  public static final String FAULT_STRING = "FaultString";\r
+  public static final String TYPE_OBJECT = "object";\r
+  public static final String TYPE_STRING = "string";\r
+  public static final String TYPE_BOOLEAN = "boolean";\r
+  public static final String TYPE_DATETIME = "dateTime";\r
+  public static final String TYPE_UNSIGNEDINT = "unsignedInt";\r
+  public static final String TYPE_INT = "int";\r
+  public static final String TYPE_BASE64 = "base64";\r
+\r
+  public String getXmlType(String type) {\r
+    if (type.equals(TYPE_BASE64)) {\r
+      return TR069RPC.XSD_BASE64;\r
+    } else if (type.equals(TYPE_BOOLEAN)) {\r
+      return TR069RPC.XSD_BOOLEAN;\r
+    } else if (type.equals(TYPE_DATETIME)) {\r
+      return TR069RPC.XSD_DATETIME;\r
+    } else if (type.equals(TYPE_INT)) {\r
+      return TR069RPC.XSD_INT;\r
+    } else if (type.equals(TYPE_OBJECT)) {\r
+      return "";\r
+    } else if (type.equals(TYPE_STRING)) {\r
+      return TR069RPC.XSD_STRING;\r
+    } else if (type.equals(TYPE_UNSIGNEDINT)) {\r
+      return TR069RPC.XSD_UNSIGNEDINT;\r
+    }\r
+    return type;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceInformBuilder.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceInformBuilder.java
new file mode 100644 (file)
index 0000000..7090acd
--- /dev/null
@@ -0,0 +1,165 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.builder;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+import java.util.Set;\r
+\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.inform.AbstractDeviceInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.acs.common.inform.ConnectionRequestInform;\r
+import org.commscope.tr069adapter.acs.common.inform.PeriodicInform;\r
+import org.commscope.tr069adapter.acs.common.inform.TransferCompleteInform;\r
+import org.commscope.tr069adapter.acs.common.inform.ValueChangeInform;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceInformBuilder {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceInformBuilder.class);\r
+\r
+  /**\r
+   * @param inform\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public AbstractDeviceInform constructDeviceInform(Inform inform)\r
+      throws TR069EventProcessingException {\r
+\r
+    AbstractDeviceInform deviceInform = null;\r
+\r
+    try {\r
+      TR069DeviceDetails deviceDetails = buildDeviceDetailsFromInform(inform);\r
+\r
+      List<InformType> informTypeList = new ArrayList<>();\r
+      for (Entry<String, String> obj : inform.getEvents()) {\r
+        if (null != TR069InformType.getTR069NotificationType(obj.getKey())) {\r
+          informTypeList.add(TR069InformType.getTR069NotificationType(obj.getKey()));\r
+        } else {\r
+          logger.error("Invalid Event code: {}", obj.getValue());\r
+        }\r
+      }\r
+\r
+      logger.debug("Building Device Inform event based on the event codes sent by the device");\r
+\r
+      if (informTypeList.contains(TR069InformType.BOOTSTRAP)) {\r
+        logger.debug("Constructing BOOTSTRAP Inform");\r
+        BootstrapInform bootstrapInform = new BootstrapInform();\r
+        bootstrapInform.setDeviceDetails(deviceDetails);\r
+        bootstrapInform.setInformTypeList(informTypeList);\r
+        bootstrapInform.setParameters(getParameterList(inform.getParams()));\r
+        if (informTypeList.contains(TR069InformType.VALUECHANGE)) {\r
+          ValueChangeInform vcNotification = new ValueChangeInform();\r
+          bootstrapInform.setValueChangeNotification(vcNotification);\r
+        }\r
+        deviceInform = bootstrapInform;\r
+      } else if (informTypeList.contains(TR069InformType.BOOT)) {\r
+        logger.debug("Constructing BOOT Inform");\r
+        BootInform bootInform = new BootInform();\r
+        bootInform.setDeviceDetails(deviceDetails);\r
+        bootInform.setInformTypeList(informTypeList);\r
+        bootInform.setParameters(getParameterList(inform.getParams()));\r
+        if (informTypeList.contains(TR069InformType.VALUECHANGE)) {\r
+          ValueChangeInform vcNotification = new ValueChangeInform();\r
+          bootInform.setValueChangeNotification(vcNotification);\r
+        }\r
+        deviceInform = bootInform;\r
+      } else if (informTypeList.contains(TR069InformType.PERIODIC)) {\r
+        logger.debug("Constructing PERIODIC Inform");\r
+        PeriodicInform periodicInform = new PeriodicInform();\r
+        periodicInform.setDeviceDetails(deviceDetails);\r
+        periodicInform.setInformTypeList(informTypeList);\r
+        periodicInform.setParameters(getParameterList(inform.getParams()));\r
+        deviceInform = periodicInform;\r
+      } else if (informTypeList.contains(TR069InformType.VALUECHANGE)) {\r
+        logger.debug("Constructing VALUECHANGE Inform");\r
+        ValueChangeInform valueChangeInform = new ValueChangeInform();\r
+        valueChangeInform.setDeviceDetails(deviceDetails);\r
+        valueChangeInform.setInformTypeList(informTypeList);\r
+        valueChangeInform.setParameters(getParameterList(inform.getParams()));\r
+        deviceInform = valueChangeInform;\r
+      } else if (informTypeList.contains(TR069InformType.TRANSFER_COMPLETE)) {\r
+        logger.debug("Constructing Transfer Complete Inform");\r
+        TransferCompleteInform transferCompleteInform = new TransferCompleteInform();\r
+        transferCompleteInform.setDeviceDetails(deviceDetails);\r
+        transferCompleteInform.setInformTypeList(informTypeList);\r
+        transferCompleteInform.setParameters(getParameterList(inform.getParams()));\r
+        deviceInform = transferCompleteInform;\r
+      } else if (informTypeList.contains(TR069InformType.CONNECTIONREQUEST)) {\r
+        logger.debug("Constructing Connection Request Inform");\r
+        ConnectionRequestInform connectionRequestInform = new ConnectionRequestInform();\r
+        connectionRequestInform.setDeviceDetails(deviceDetails);\r
+        connectionRequestInform.setInformTypeList(informTypeList);\r
+        connectionRequestInform.setParameters(getParameterList(inform.getParams()));\r
+        deviceInform = connectionRequestInform;\r
+      }\r
+    } catch (Exception e) {\r
+      throw new TR069EventProcessingException(ErrorCode.FAILED_PROCESSING_INFORM, e.getMessage());\r
+    }\r
+    return deviceInform;\r
+  }\r
+\r
+  /**\r
+   * @param inform\r
+   * @return\r
+   */\r
+  private TR069DeviceDetails buildDeviceDetailsFromInform(Inform inform) {\r
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+    tr069DeviceDetails.setDeviceId(inform.getSn());\r
+    tr069DeviceDetails.setSoftwareVersion(inform.getSoftwareVersion());\r
+    tr069DeviceDetails.setHardwareVersion(inform.getHardwareVersion());\r
+    tr069DeviceDetails.setOui(inform.getOui());\r
+    tr069DeviceDetails.setProductClass(inform.getProductClass());\r
+    tr069DeviceDetails.setConnectionRequestURL(inform.getURL());\r
+    tr069DeviceDetails.setUsername(inform.getConreqUser());\r
+    tr069DeviceDetails.setPassword(inform.getConreqPass());\r
+\r
+    return tr069DeviceDetails;\r
+  }\r
+\r
+  /**\r
+   * @param parameterList\r
+   * @return\r
+   */\r
+  private List<ParameterDTO> getParameterList(Map<String, String> parameterList) {\r
+    List<ParameterDTO> parameterDTOList = new ArrayList<>();\r
+    Set<String> keys = parameterList.keySet();\r
+    for (String key : keys) {\r
+      ParameterDTO param = new ParameterDTO();\r
+      param.setParamName(key);\r
+      param.setParamValue(parameterList.get(key));\r
+      parameterDTOList.add(param);\r
+    }\r
+\r
+    return parameterDTOList;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceRPCBuilder.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceRPCBuilder.java
new file mode 100644 (file)
index 0000000..b64b5e9
--- /dev/null
@@ -0,0 +1,176 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.builder;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.AddObject;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.DeleteObject;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Download;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.FactoryReset;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterAttributes;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterValues;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Reboot;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.SetParameterAttributes;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.SetParameterValues;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceRPCBuilder {\r
+\r
+  /**\r
+   * @param deviceRPCRequest\r
+   * @return\r
+   */\r
+  public TR069RPC constructDeviceRPC(DeviceRPCRequest deviceRPCRequest) {\r
+    TR069RPC message = null;\r
+\r
+    OperationDetails opDetails = deviceRPCRequest.getOpDetails();\r
+    if (null == opDetails || null == opDetails.getOpCode()) {\r
+      return null;\r
+    }\r
+\r
+    OperationCode opCode = opDetails.getOpCode();\r
+    if (opCode.equals(TR069OperationCode.SET_PARAMETER_VALUES)) {\r
+      message = buildSetParameterValues(opDetails);\r
+    } else if (opCode.equals(TR069OperationCode.GET_PARAMETER_VALUES)) {\r
+      message = buildGetParameterValues(opDetails);\r
+    } else if (opCode.equals(TR069OperationCode.SET_PARAMETER_ATTRIBUTES)) {\r
+      message = buildSetParameterAttributes(opDetails);\r
+    } else if (opCode.equals(TR069OperationCode.GET_PARAMETER_ATTRIBUTES)) {\r
+      message = buildGetParameterAttributes(opDetails);\r
+    } else if (opCode.equals(TR069OperationCode.ADD_OBJECT)) {\r
+      List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();\r
+      for (ParameterDTO param : poarameterDTOs) {\r
+        AddObject addObject = new AddObject(param.getParamName(), String.valueOf(hashCode()));\r
+        message = addObject;\r
+      }\r
+    } else if (opCode.equals(TR069OperationCode.DELETE_OBJECT)) {\r
+      List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();\r
+      for (ParameterDTO param : poarameterDTOs) {\r
+        DeleteObject deleteObject =\r
+            new DeleteObject(param.getParamName(), String.valueOf(hashCode()));\r
+        message = deleteObject;\r
+      }\r
+    } else if (opCode.equals(TR069OperationCode.DOWNLOAD)) {\r
+      String deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();\r
+      List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();\r
+      message = populateDownloadParams(deviceId, poarameterDTOs);\r
+    } else if (opCode.equals(TR069OperationCode.FACTORY_RESET)) {\r
+      message = new FactoryReset();\r
+    } else if (opCode.equals(TR069OperationCode.REBOOT)) {\r
+      message = new Reboot();\r
+    }\r
+\r
+    return message;\r
+  }\r
+\r
+  /**\r
+   * @param poarameterDTOs\r
+   * @return\r
+   */\r
+  private Download populateDownloadParams(String deviceId, List<ParameterDTO> poarameterDTOs) {\r
+    Download download = new Download();\r
+    for (ParameterDTO param : poarameterDTOs) {\r
+      if (param.getParamName().equals("FileType")) {\r
+        download.setFileType(param.getParamValue());\r
+      } else if (param.getParamName().equals("URL")) {\r
+        download.setUrl(param.getParamValue());\r
+      } else if (param.getParamName().equals("Username")) {\r
+        download.setUserName(param.getParamValue());\r
+      } else if (param.getParamName().equals("Password")) {\r
+        download.setPassword(param.getParamValue());\r
+      } else if (param.getParamName().equals("FileSize")) {\r
+        download.setFileSize(Long.parseLong(param.getParamValue()));\r
+      } else if (param.getParamName().equals("TargetFileName")) {\r
+        download.setTargetFileName(param.getParamValue());\r
+      } else if (param.getParamName().equals("DelaySeconds")) {\r
+        download.setDelaySeconds(Integer.parseInt(param.getParamValue()));\r
+      } else if (param.getParamName().equals("SuccessURL")) {\r
+        download.setSuccessUrl(param.getParamValue());\r
+      } else if (param.getParamName().equals("FailureURL")) {\r
+        download.setFailureUrl(param.getParamValue());\r
+      }\r
+    }\r
+    download.setCommandKey(String.valueOf(deviceId));\r
+\r
+    return download;\r
+  }\r
+\r
+  private SetParameterValues buildSetParameterValues(OperationDetails opDetails) {\r
+    SetParameterValues spv = new SetParameterValues();\r
+    List<ParameterDTO> parmeters = opDetails.getParmeters();\r
+    for (ParameterDTO param : parmeters) {\r
+      spv.addValue(param.getParamName(), param.getParamValue(), param.getDataType());\r
+    }\r
+\r
+    return spv;\r
+  }\r
+\r
+  private GetParameterValues buildGetParameterValues(OperationDetails opDetails) {\r
+    GetParameterValues gpv = new GetParameterValues();\r
+    List<ParameterDTO> parmeters = opDetails.getParmeters();\r
+    List<String> paramNamelist = new ArrayList<>();\r
+    for (ParameterDTO param : parmeters) {\r
+      paramNamelist.add(param.getParamName());\r
+    }\r
+    String[] parameterNames = new String[paramNamelist.size()];\r
+    for (int i = 0; i < paramNamelist.size(); i++) {\r
+      parameterNames[i] = paramNamelist.get(i);\r
+    }\r
+    gpv.setParameterNames(parameterNames);\r
+    return gpv;\r
+  }\r
+\r
+  private SetParameterAttributes buildSetParameterAttributes(OperationDetails opDetails) {\r
+    SetParameterAttributes spa = new SetParameterAttributes();\r
+    List<ParameterDTO> parameterAttributes = opDetails.getParmeters();\r
+    for (ParameterDTO parameterDTO : parameterAttributes) {\r
+      ParameterAttributeDTO parameterAttributeDTO = (ParameterAttributeDTO) parameterDTO;\r
+      spa.addAttribute(parameterAttributeDTO.getParamName(),\r
+          parameterAttributeDTO.getNotificationChange(), parameterAttributeDTO.getNotification(),\r
+          parameterAttributeDTO.getAccesslistChange(), parameterAttributeDTO.getAccessList());\r
+    }\r
+    return spa;\r
+  }\r
+\r
+  private GetParameterAttributes buildGetParameterAttributes(OperationDetails opDetails) {\r
+    GetParameterAttributes gpa = new GetParameterAttributes();\r
+    List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();\r
+    List<String> paramNamelist = new ArrayList<>();\r
+    for (ParameterDTO param : poarameterDTOs) {\r
+      paramNamelist.add(param.getParamName());\r
+    }\r
+    String[] parameterNames = new String[paramNamelist.size()];\r
+    for (int i = 0; i < paramNamelist.size(); i++) {\r
+      parameterNames[i] = paramNamelist.get(i);\r
+    }\r
+    gpa.setParameterNames(parameterNames);\r
+\r
+    return gpa;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceRPCResponseBuilder.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/builder/DeviceRPCResponseBuilder.java
new file mode 100644 (file)
index 0000000..758ef5a
--- /dev/null
@@ -0,0 +1,227 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.builder;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.AddObjectResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.DeleteObjectResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.DownloadResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.FactoryResetResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterAttributesResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterAttributesResponse.ParameterAttributeStruct;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterValuesResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.RebootResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.SetParameterAttributesResponse;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.SetParameterValuesResponse;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceRPCResponseBuilder {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceRPCResponseBuilder.class);\r
+\r
+  /**\r
+   * @param message\r
+   * @return\r
+   */\r
+  public OperationResponse constructDeviceRPCResponse(TR069RPC message) {\r
+    OperationResponse operationResponse = null;\r
+    if (message instanceof SetParameterValuesResponse) {\r
+      logger.debug("Response Msg is SPVResponse");\r
+      SetParameterValuesResponse values = (SetParameterValuesResponse) message;\r
+      operationResponse = buildSetParameterValuesResponse(values.getStatus());\r
+    } else if (message instanceof GetParameterValuesResponse) {\r
+      logger.debug("Response Msg is GPVResponse");\r
+      GetParameterValuesResponse values = (GetParameterValuesResponse) message;\r
+      operationResponse = buildGetParameterValuesResponse(values.getValues());\r
+    } else if (message instanceof SetParameterAttributesResponse) {\r
+      logger.debug("Response Msg is SPAResponse");\r
+      operationResponse = buildSetParameterAttributesResponse();\r
+    } else if (message instanceof GetParameterAttributesResponse) {\r
+      logger.debug("Response Msg is GPAResponse");\r
+      GetParameterAttributesResponse values = (GetParameterAttributesResponse) message;\r
+      operationResponse = buildGetParameterAttributeResponse(values.getAttributes());\r
+    } else if (message instanceof AddObjectResponse) {\r
+      logger.debug("Response Msg is AOResponse");\r
+      AddObjectResponse values = (AddObjectResponse) message;\r
+      operationResponse = buildAddObjectResponse(values.getInstanceNumber(), values.getStatus());\r
+    } else if (message instanceof DeleteObjectResponse) {\r
+      logger.debug("Response Msg is DOResponse");\r
+      DeleteObjectResponse values = (DeleteObjectResponse) message;\r
+      operationResponse = buildDeleteObjectResponse(values.getStatus());\r
+    } else if (message instanceof FactoryResetResponse) {\r
+      logger.debug("Response Msg is FRResponse");\r
+      operationResponse = buildFactoryResetResponse();\r
+    } else if (message instanceof RebootResponse) {\r
+      logger.debug("Response Msg is RebootResponse");\r
+      operationResponse = buildRebootResponse();\r
+    } else if (message instanceof DownloadResponse) {\r
+      logger.debug("Response Msg is DownloadResponse");\r
+      DownloadResponse values = (DownloadResponse) message;\r
+      operationResponse = buildDownloadResponse(values.getStatus());\r
+    }\r
+\r
+    return operationResponse;\r
+  }\r
+\r
+  /**\r
+   * @param status\r
+   * @return\r
+   */\r
+  private OperationResponse buildSetParameterValuesResponse(int status) {\r
+    org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse setParameterValueResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse();\r
+    setParameterValueResponse.setStatus(status);\r
+    setParameterValueResponse.setOperationCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
+\r
+    return setParameterValueResponse;\r
+  }\r
+\r
+  /**\r
+   * @param parameterList\r
+   * @return\r
+   */\r
+  private OperationResponse buildGetParameterValuesResponse(Map<String, String> parameterList) {\r
+    org.commscope.tr069adapter.acs.common.response.GetParameterValueResponse getParameterValuesResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.GetParameterValueResponse();\r
+\r
+    List<ParameterDTO> parameterDTOs = new ArrayList<>();\r
+    for (Entry<String, String> entry : parameterList.entrySet()) {\r
+      ParameterDTO parameterDTO = new ParameterDTO();\r
+      parameterDTO.setParamName(entry.getKey());\r
+      parameterDTO.setParamValue(entry.getValue());\r
+      parameterDTOs.add(parameterDTO);\r
+    }\r
+\r
+    getParameterValuesResponse.setParameterDTOs(parameterDTOs);\r
+    getParameterValuesResponse.setOperationCode(TR069OperationCode.GET_PARAMETER_VALUES);\r
+\r
+    return getParameterValuesResponse;\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  private OperationResponse buildSetParameterAttributesResponse() {\r
+    org.commscope.tr069adapter.acs.common.response.SetParameterAttributeResponse setParameterAttributeResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.SetParameterAttributeResponse();\r
+    setParameterAttributeResponse.setOperationCode(TR069OperationCode.SET_PARAMETER_ATTRIBUTES);\r
+    return setParameterAttributeResponse;\r
+  }\r
+\r
+  /**\r
+   * @param attributes\r
+   * @return\r
+   */\r
+  private OperationResponse buildGetParameterAttributeResponse(\r
+      ParameterAttributeStruct[] attributes) {\r
+    org.commscope.tr069adapter.acs.common.response.GetParameterAttributeResponse getParameterAttributeResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.GetParameterAttributeResponse();\r
+\r
+    List<ParameterDTO> parameterAttributeList = new ArrayList<>();\r
+    for (int i = 0; i < attributes.length; i++) {\r
+      ParameterAttributeStruct parameterAttributeStruct = attributes[i];\r
+      ParameterAttributeDTO parameterAttributeDTO = new ParameterAttributeDTO();\r
+      parameterAttributeDTO.setParamName(parameterAttributeStruct.getName());\r
+      parameterAttributeDTO.setNotification(parameterAttributeStruct.getNotification());\r
+      parameterAttributeDTO.setAccessList(parameterAttributeStruct.getAccessList());\r
+      parameterAttributeList.add(parameterAttributeDTO);\r
+    }\r
+\r
+    getParameterAttributeResponse.setParameterDTOs(parameterAttributeList);\r
+    getParameterAttributeResponse.setOperationCode(TR069OperationCode.GET_PARAMETER_ATTRIBUTES);\r
+\r
+    return getParameterAttributeResponse;\r
+  }\r
+\r
+  /**\r
+   * @param instanceNumber\r
+   * @param status\r
+   * @return\r
+   */\r
+  private OperationResponse buildAddObjectResponse(long instanceNumber, int status) {\r
+    org.commscope.tr069adapter.acs.common.response.AddObjectResponse addObjectResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.AddObjectResponse();\r
+    addObjectResponse.setInstanceNumber(instanceNumber);\r
+    addObjectResponse.setStatus(status);\r
+    addObjectResponse.setOperationCode(TR069OperationCode.ADD_OBJECT);\r
+\r
+    return addObjectResponse;\r
+  }\r
+\r
+  /**\r
+   * @param status\r
+   * @return\r
+   */\r
+  private OperationResponse buildDeleteObjectResponse(int status) {\r
+    org.commscope.tr069adapter.acs.common.response.DeleteObjectResponse deleteObjectResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.DeleteObjectResponse();\r
+    deleteObjectResponse.setStatus(status);\r
+    deleteObjectResponse.setOperationCode(TR069OperationCode.DELETE_OBJECT);\r
+\r
+    return deleteObjectResponse;\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  private OperationResponse buildFactoryResetResponse() {\r
+    org.commscope.tr069adapter.acs.common.response.FactoryResetResponse factoryResetResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.FactoryResetResponse();\r
+    factoryResetResponse.setOperationCode(TR069OperationCode.FACTORY_RESET);\r
+\r
+    return factoryResetResponse;\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  private OperationResponse buildRebootResponse() {\r
+    org.commscope.tr069adapter.acs.common.response.RebootResponse rebootResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.RebootResponse();\r
+    rebootResponse.setOperationCode(TR069OperationCode.REBOOT);\r
+\r
+    return rebootResponse;\r
+  }\r
+\r
+  /**\r
+   * @param status\r
+   * @return\r
+   */\r
+  private OperationResponse buildDownloadResponse(int status) {\r
+    org.commscope.tr069adapter.acs.common.response.DownloadResponse downloadResponse =\r
+        new org.commscope.tr069adapter.acs.common.response.DownloadResponse();\r
+    downloadResponse.setStatus(status);\r
+    downloadResponse.setOperationCode(TR069OperationCode.DOWNLOAD);\r
+\r
+    return downloadResponse;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/ConnectionReqEventHandler.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/ConnectionReqEventHandler.java
new file mode 100644 (file)
index 0000000..c8e76f7
--- /dev/null
@@ -0,0 +1,69 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.cpe.handler;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_REQ_CF;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_REQ_Q;\r
+\r
+import java.io.IOException;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.cpe.processor.ConnectionReqEventProcessor;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.jms.annotation.JmsListener;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component\r
+public class ConnectionReqEventHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(ConnectionReqEventHandler.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private ConnectionReqEventProcessor connectionReqEventProcessor;\r
+\r
+  @JmsListener(destination = CR_REQ_Q, containerFactory = CR_REQ_CF)\r
+  @Transactional(rollbackFor = Exception.class)\r
+  public void onMessage(TR069DeviceDetails tr069DeviceDetails) {\r
+    try {\r
+      if (tr069DeviceDetails != null) {\r
+        MDC.put(CLIENT_STR, tr069DeviceDetails.getDeviceId());\r
+        logger.info(\r
+            "Received a JMS message from Request Processor for initiating connection request");\r
+        connectionReqEventProcessor.initiateConnectionRequest(tr069DeviceDetails, false);\r
+        logger.debug("Sent TR069 connection request to device");\r
+      } else {\r
+        logger.warn(\r
+            "Received a JMS message for initiating connection request with no device details, "\r
+                + "hence could not initiate connection request");\r
+      }\r
+    } catch (SessionManagerException | IOException e) {\r
+      logger.error(e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/ConnectionReqTimeoutHandler.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/ConnectionReqTimeoutHandler.java
new file mode 100644 (file)
index 0000000..c4a43ce
--- /dev/null
@@ -0,0 +1,61 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.handler;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_TIMEOUT_CALLBACK;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.cpe.processor.ConnectionReqEventProcessor;\r
+import org.commscope.tr069adapter.common.timer.TimerListener;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component(CR_TIMEOUT_CALLBACK)\r
+public class ConnectionReqTimeoutHandler implements TimerListener {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(ConnectionReqTimeoutHandler.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private ConnectionReqEventProcessor connectionReqEventProcessor;\r
+\r
+  @Override\r
+  public void notifyTimeout(String timerId, Serializable data) {\r
+    TR069DeviceDetails deviceDetails = (TR069DeviceDetails) data;\r
+    MDC.put(CLIENT_STR, deviceDetails.getDeviceId());\r
+    logger.debug(\r
+        "Connection request initiation has timed out, where as device has not sent INFORM event");\r
+\r
+    try {\r
+      connectionReqEventProcessor.initiateConnectionRequest(deviceDetails, true);\r
+      logger.debug("Successfully initiated Connection request on device");\r
+    } catch (Exception e) {\r
+      logger.error("Couldn't initiate connection request, an error occurred: {}", e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/DeviceEventHandler.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/DeviceEventHandler.java
new file mode 100644 (file)
index 0000000..4597cbb
--- /dev/null
@@ -0,0 +1,423 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.handler;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CONNECTION_REQUEST;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SEPERATOR;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.DeviceOperationRequestDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.inform.AbstractDeviceInform;\r
+import org.commscope.tr069adapter.acs.common.inform.TransferCompleteInform;\r
+import org.commscope.tr069adapter.acs.common.requestprocessor.service.TR069DeviceEventHandler;\r
+import org.commscope.tr069adapter.acs.common.response.DeviceInformResponse;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+import org.commscope.tr069adapter.acs.cpe.builder.DeviceInformBuilder;\r
+import org.commscope.tr069adapter.acs.cpe.builder.DeviceRPCBuilder;\r
+import org.commscope.tr069adapter.acs.cpe.builder.DeviceRPCResponseBuilder;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Fault;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.TransferComplete;\r
+import org.commscope.tr069adapter.common.timer.TimerException;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceEventHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceEventHandler.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private DeviceInformBuilder deviceInformBuilder;\r
+\r
+  @Autowired\r
+  private DeviceRPCBuilder deviceRPCBuilder;\r
+\r
+  @Autowired\r
+  private DeviceRPCResponseBuilder deviceRPCResponseBuilder;\r
+\r
+  @Autowired\r
+  private TR069DeviceEventHandler tr069DeviceEventHandler;\r
+\r
+  @Autowired\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  private DeviceValidator deviceValidtor;\r
+\r
+  private static Map<String, List<String>> informParameter = null;\r
+\r
+  static {\r
+    informParameter = new HashMap<>();\r
+    List<String> parameters = new ArrayList<>();\r
+    parameters.add("InternetGatewayDevice.DeviceInfo.HardwareVersion");\r
+    parameters.add("InternetGatewayDevice.DeviceInfo.SoftwareVersion");\r
+    parameters.add("InternetGatewayDevice.DeviceInfo.ProvisioningCode");\r
+    parameters.add("InternetGatewayDevice.ManagementServer.ConnectionRequestURL");\r
+    parameters.add("InternetGatewayDevice.ManagementServer.ParameterKey");\r
+    informParameter.put("InternetGatewayDevice", parameters);\r
+\r
+    List<String> deviceParameters = new ArrayList<>();\r
+    deviceParameters.add("Device.DeviceInfo.HardwareVersion");\r
+    deviceParameters.add("Device.DeviceInfo.SoftwareVersion");\r
+    deviceParameters.add("Device.DeviceInfo.ProvisioningCode");\r
+    deviceParameters.add("Device.ManagementServer.ConnectionRequestURL");\r
+    deviceParameters.add("Device.ManagementServer.ParameterKey");\r
+    informParameter.put("Device", deviceParameters);\r
+  }\r
+\r
+  /**\r
+   * @param inform\r
+   * @param authorizationHeader\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public DeviceInformResponse processDeviceInform(Inform inform, String authorizationHeader)\r
+      throws TR069EventProcessingException {\r
+\r
+    DeviceInformResponse deviceInformResponse = null;\r
+    try {\r
+      String deviceId = inform.getSn();\r
+      MDC.put(CLIENT_STR, deviceId);\r
+\r
+      logger.info("Processing the device Inform event");\r
+\r
+      logger.debug("Authorization header received in the request -> {}", authorizationHeader);\r
+      Boolean isAuthorized = deviceValidtor.isDeviceAuthorized(inform, authorizationHeader);\r
+      logger.info("Is device authentication successful: {}", isAuthorized);\r
+      if (!isAuthorized.booleanValue()) {\r
+        TR069EventProcessingException ex =\r
+            new TR069EventProcessingException(ErrorCode.UNAUTHORIZED_EVENT, "Authorization failed");\r
+        logger.error(ex.getMessage());\r
+        throw ex;\r
+      }\r
+\r
+      logger.debug("The root element is: {}", inform.getRoot());\r
+      // Canceling any connection initiator timer running, due to inform event\r
+      stopConnectionInitiatorTimer(inform.getSn());\r
+\r
+      if (!deviceValidtor.validateDevice(inform.getSn(), inform.getOui(), inform.getProductClass())\r
+          .booleanValue()) {\r
+        TR069EventProcessingException ex =\r
+            new TR069EventProcessingException(ErrorCode.OUI_OR_PC_MISMATCH);\r
+        logger.error(ex.getMessage());\r
+        throw ex;\r
+      }\r
+\r
+      if (!validateInformParameters(inform)) {\r
+        TR069EventProcessingException ex =\r
+            new TR069EventProcessingException(ErrorCode.INVALID_PARAMS_IN_INFORM);\r
+        logger.error(ex.getMessage());\r
+        throw ex;\r
+      }\r
+\r
+      AbstractDeviceInform deviceInform = deviceInformBuilder.constructDeviceInform(inform);\r
+      if (deviceInform == null) {\r
+        TR069EventProcessingException ex =\r
+            new TR069EventProcessingException(ErrorCode.INVALID_PARAMS_IN_INFORM);\r
+        logger.error(ex.getMessage());\r
+        throw ex;\r
+      }\r
+\r
+      logger.debug("Sending the device inform to TR069 Request Processor to process");\r
+      deviceInformResponse = tr069DeviceEventHandler.processDeviceInform(deviceInform);\r
+\r
+    } catch (TR069EventProcessingException tr069Ex) {\r
+      throw tr069Ex;\r
+    } catch (Exception e) {\r
+      TR069EventProcessingException ex =\r
+          new TR069EventProcessingException(ErrorCode.FAILED_PROCESSING_INFORM, e.getMessage());\r
+      logger.error(ex.getMessage());\r
+      throw ex;\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+\r
+    return deviceInformResponse;\r
+\r
+  }\r
+\r
+  /**\r
+   * @param tc\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public DeviceInformResponse processTransferComplete(TransferComplete tc)\r
+      throws TR069EventProcessingException {\r
+\r
+    logger.debug("Processing Transfer Complete");\r
+\r
+    String startTime = tc.getStartTime();\r
+    String completeTime = tc.getCompleteTime();\r
+    int faultCode = tc.getFaultCode();\r
+    String faultString = tc.getFaultString();\r
+    String commandKey = tc.getCommandKey();\r
+\r
+    DeviceInformResponse deviceInformResponse = null;\r
+\r
+    try {\r
+      MDC.put(CLIENT_STR, commandKey);\r
+      TransferCompleteInform transferCompleteInform = new TransferCompleteInform();\r
+      transferCompleteInform.setCommandKey(tc.getCommandKey());\r
+      transferCompleteInform.setCompleteTime(completeTime);\r
+      transferCompleteInform.setFaultCode(faultCode);\r
+      transferCompleteInform.setFaultString(faultString);\r
+      transferCompleteInform.setStartTime(startTime);\r
+\r
+      logger.debug("TransferComplete inform received with Start time");\r
+\r
+      transferCompleteInform.setDeviceDetails(tr069DeviceEventHandler.getDeviceDetails(commandKey));\r
+      deviceInformResponse = tr069DeviceEventHandler.processDeviceInform(transferCompleteInform);\r
+      logger.debug("Successfully processed the TRANSFER COMPLETE Inform");\r
+\r
+    } catch (Exception e) {\r
+      throw new TR069EventProcessingException(ErrorCode.FAILED_PROCESSING_INFORM, e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+\r
+    return deviceInformResponse;\r
+  }\r
+\r
+  /**\r
+   * @param msg\r
+   * @param sessionId\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public TR069RPC processRPCResponse(TR069RPC msg, String sessionId)\r
+      throws TR069EventProcessingException {\r
+    DeviceOperationRequestDetails deviceOperationRequestDetails = null;\r
+    try {\r
+      deviceOperationRequestDetails =\r
+          tr069DeviceEventHandler.getOpRequestDetailsBySessionId(sessionId);\r
+      if (null == deviceOperationRequestDetails\r
+          || null == deviceOperationRequestDetails.getDeviceDetails()) {\r
+        logger.error("Response with invalid session ID: {}", sessionId);\r
+        return null;\r
+      }\r
+\r
+      String deviceId = deviceOperationRequestDetails.getDeviceDetails().getDeviceId();\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();\r
+      deviceRPCResponse.setDeviceDetails(deviceOperationRequestDetails.getDeviceDetails());\r
+      deviceRPCResponse.setOperationId(deviceOperationRequestDetails.getOperationId());\r
+      OperationResponse operationResponse = null;\r
+      if (msg instanceof Fault) {\r
+        Fault values = (Fault) msg;\r
+        logger.info("{} ID->{} faultCode->{} faultString->{}", values.getName(), values.getId(),\r
+            values.getCwmpFaultCode(), values.getFaultStringCwmp());\r
+        deviceRPCResponse.setFaultKey(values.getCwmpFaultCode());\r
+        deviceRPCResponse.setFaultString(\r
+            values.getFaultStringCwmp() + ": Error code: " + values.getCwmpFaultCode());\r
+\r
+        TR069OperationCode operationCode =\r
+            (TR069OperationCode) deviceOperationRequestDetails.getOpCode();\r
+        operationResponse = constructResponseForFault(operationCode);\r
+        if (operationResponse != null) {\r
+          operationResponse.setStatus(1);\r
+          operationResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        }\r
+      } else {\r
+        operationResponse = deviceRPCResponseBuilder.constructDeviceRPCResponse(msg);\r
+      }\r
+      deviceRPCResponse.setOperationResponse(operationResponse);\r
+\r
+      DeviceRPCRequest deviceRPCRequest =\r
+          tr069DeviceEventHandler.processDeviceRPCResponse(deviceRPCResponse);\r
+      if (null != deviceRPCRequest) {\r
+        return deviceRPCBuilder.constructDeviceRPC(deviceRPCRequest);\r
+      }\r
+    } catch (SessionManagerException e) {\r
+      logger.error("Error while getting device detail for the session id: {}", sessionId);\r
+    } catch (Exception e) {\r
+      throw new TR069EventProcessingException(ErrorCode.FAILED_PROCESSING_RPC_RESPONSE,\r
+          msg.getName(), e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+\r
+    return null;\r
+  }\r
+\r
+  /**\r
+   * @param sessionId\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public TR069RPC processEmptyRequest(String sessionId) throws TR069EventProcessingException {\r
+    try {\r
+      DeviceOperationRequestDetails deviceOperationRequestDetails =\r
+          tr069DeviceEventHandler.getOpRequestDetailsBySessionId(sessionId);\r
+      DeviceRPCRequest deviceRPCRequest = null;\r
+      String deviceId = deviceOperationRequestDetails.getDeviceDetails().getDeviceId();\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      deviceRPCRequest = tr069DeviceEventHandler\r
+          .processEmptyDeviceRequest(deviceOperationRequestDetails.getDeviceDetails());\r
+      if (null == deviceRPCRequest) {\r
+        return null;\r
+      } else {\r
+        logger.debug("There exists a NBI request to process.");\r
+        return deviceRPCBuilder.constructDeviceRPC(deviceRPCRequest);\r
+      }\r
+    } catch (SessionManagerException e) {\r
+      logger.error("Error while processing empty request, reason: {}", e.getMessage());\r
+    } catch (Exception e) {\r
+      throw new TR069EventProcessingException(ErrorCode.EMPTY_REQUEST_PROCESSING_ERROR,\r
+          e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+    return null;\r
+  }\r
+\r
+  /**\r
+   * @param operationCode\r
+   * @return\r
+   */\r
+  private OperationResponse constructResponseForFault(TR069OperationCode operationCode) {\r
+    OperationResponse operationResponse = null;\r
+    if (operationCode.equals(TR069OperationCode.ADD_OBJECT)) {\r
+      operationResponse = new org.commscope.tr069adapter.acs.common.response.AddObjectResponse();\r
+    } else if (operationCode.equals(TR069OperationCode.DELETE_OBJECT)) {\r
+      operationResponse = new org.commscope.tr069adapter.acs.common.response.DeleteObjectResponse();\r
+    } else if (operationCode.equals(TR069OperationCode.SET_PARAMETER_VALUES)) {\r
+      operationResponse =\r
+          new org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse();\r
+    } else if (operationCode.equals(TR069OperationCode.GET_PARAMETER_VALUES)) {\r
+      operationResponse =\r
+          new org.commscope.tr069adapter.acs.common.response.GetParameterValueResponse();\r
+    } else if (operationCode.equals(TR069OperationCode.GET_PARAMETER_ATTRIBUTES)) {\r
+      operationResponse =\r
+          new org.commscope.tr069adapter.acs.common.response.GetParameterAttributeResponse();\r
+    }\r
+    return operationResponse;\r
+  }\r
+\r
+  /**\r
+   * @param serialNumber\r
+   */\r
+  public void stopConnectionInitiatorTimer(String serialNumber) {\r
+    String timerId = serialNumber + SEPERATOR + CONNECTION_REQUEST;\r
+    try {\r
+      logger\r
+          .debug("Canceling the Connection initiation timer, as Inform is been sent by the device");\r
+      timerServiceManagerAPI.stopTimer(timerId);\r
+    } catch (TimerException e) {\r
+      logger.error(\r
+          "An exception occurred while stopping the connection initiator session timer, Reason: {}",\r
+          e.getMessage());\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param lastInform\r
+   * @return\r
+   */\r
+  private boolean validateInformParameters(Inform lastInform) {\r
+    boolean validate = false;\r
+    String root = lastInform.getRoot();\r
+    if (!informParameter.containsKey(root))\r
+      return validate;\r
+    List<String> params = informParameter.get(root);\r
+    Set<String> keySet = lastInform.getParams().keySet();\r
+    validate = true;\r
+    for (String param : params) {\r
+      if (!keySet.contains(param)) {\r
+        logger.warn("This param Not found in the inform {}", param);\r
+        validate = false;\r
+        break;\r
+      }\r
+    }\r
+    return validate;\r
+  }\r
+\r
+  /**\r
+   * @param tr069ex\r
+   * @return\r
+   */\r
+  public int handleException(TR069EventProcessingException tr069ex) {\r
+\r
+    int errorresponseCode = 0;\r
+\r
+    ErrorCode errorCode = tr069ex.getErrorCode();\r
+    switch (errorCode) {\r
+      case UNSUPPORTED_CHARACTER_ENCODING:\r
+      case INVALID_PARAMS_IN_INFORM:\r
+      case FAILED_PROCESSING_INFORM:\r
+        errorresponseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;\r
+        break;\r
+      case UNAUTHORIZED_EVENT:\r
+        errorresponseCode = HttpServletResponse.SC_UNAUTHORIZED;\r
+        break;\r
+      default:\r
+        break;\r
+    }\r
+\r
+    return errorresponseCode;\r
+  }\r
+\r
+  /***************************************************************************************************************************/\r
+\r
+  public void setDeviceInformBuilder(DeviceInformBuilder deviceInformBuilder) {\r
+    this.deviceInformBuilder = deviceInformBuilder;\r
+  }\r
+\r
+  public void setDeviceRPCBuilder(DeviceRPCBuilder deviceRPCBuilder) {\r
+    this.deviceRPCBuilder = deviceRPCBuilder;\r
+  }\r
+\r
+  public void setDeviceRPCResponseBuilder(DeviceRPCResponseBuilder deviceRPCResponseBuilder) {\r
+    this.deviceRPCResponseBuilder = deviceRPCResponseBuilder;\r
+  }\r
+\r
+  public void setTr069DeviceEventHandler(TR069DeviceEventHandler tr069DeviceEventHandler) {\r
+    this.tr069DeviceEventHandler = tr069DeviceEventHandler;\r
+  }\r
+\r
+  public void setTimerServiceManagerAPI(TimerServiceManagerAPI timerServiceManagerAPI) {\r
+    this.timerServiceManagerAPI = timerServiceManagerAPI;\r
+  }\r
+\r
+  public void setDeviceAuthenticator(DeviceValidator deviceAuthenticator) {\r
+    this.deviceValidtor = deviceAuthenticator;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/DeviceValidator.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/handler/DeviceValidator.java
new file mode 100644 (file)
index 0000000..5caeb50
--- /dev/null
@@ -0,0 +1,193 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.handler;\r
+\r
+import java.nio.charset.StandardCharsets;\r
+import java.util.Base64;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.DeviceData;\r
+import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
+import org.commscope.tr069adapter.acs.cpe.utils.FactorySrvcDependencyConfig;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.ResponseEntity;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class DeviceValidator {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceValidator.class);\r
+\r
+  @Autowired\r
+  FactorySrvcDependencyConfig factorySrvcDependencyConfig;\r
+\r
+  @Autowired\r
+  RestTemplate restTemplate;\r
+\r
+  public void setFactorySrvcDependencyConfig(\r
+      FactorySrvcDependencyConfig factorySrvcDependencyConfig) {\r
+    this.factorySrvcDependencyConfig = factorySrvcDependencyConfig;\r
+  }\r
+\r
+  /**\r
+   * @param inform\r
+   * @param authorization\r
+   * @return\r
+   */\r
+  public Boolean isDeviceAuthorized(Inform inform, String authorization) {\r
+    if (authorization == null) {\r
+      logger.debug("HTTP Challenge failed as Authorization header does not exist");\r
+      return false;\r
+    }\r
+\r
+    Boolean isAuthorized = true;\r
+    if (authorization.toLowerCase().startsWith("basic")) {\r
+      isAuthorized = performBasicAuthentication(inform, authorization);\r
+    } else if (authorization.toLowerCase().startsWith("digest")) {\r
+      isAuthorized = performDigestAuthentication(inform, authorization);\r
+    }\r
+\r
+    return isAuthorized;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param oui\r
+   * @param pc\r
+   * @return\r
+   */\r
+  public Boolean validateDevice(String deviceId, String oui, String pc) {\r
+    if (oui == null || pc == null) {\r
+      logger.error(\r
+          "OUI or Product Class cannot be null, Device has not sent the OUI or Product class in the Inform!");\r
+      return false;\r
+    }\r
+\r
+    Boolean isValid = true;\r
+    try {\r
+      if (factorySrvcDependencyConfig.getDeviceValidationURL() == null) {\r
+        logger.debug(\r
+            "Device Validation URL is not configured, hence not performing device validation against factory data");\r
+        return isValid;\r
+      }\r
+\r
+      DeviceData deviceData = new DeviceData();\r
+      deviceData.setSerialNumber(deviceId);\r
+      deviceData.setOui(oui);\r
+      deviceData.setProductClass(pc);\r
+      ResponseEntity<Boolean> restResponse = restTemplate.postForEntity(\r
+          factorySrvcDependencyConfig.getDeviceValidationURL(), deviceData, Boolean.class);\r
+      isValid = restResponse.getBody();\r
+      logger.debug("Is Device valid : {}", isValid);\r
+    } catch (Exception e) {\r
+      logger.error("An error occurred while validating the device with Factory data, Reason: {}",\r
+          e.getMessage());\r
+      isValid = false;\r
+    }\r
+\r
+    return isValid;\r
+  }\r
+\r
+  /**\r
+   * @param inform\r
+   * @param authorization\r
+   * @return\r
+   */\r
+  private Boolean performBasicAuthentication(Inform inform, String authorization) {\r
+    Boolean isAuthorized = false;\r
+    // Authorization: Basic base64credentials\r
+    String base64Credentials = authorization.substring("Basic".length()).trim();\r
+    logger.debug("Authorizing by basic authentication");\r
+    DeviceData deviceData = buildAuthorizationRequest(inform.getSn(), base64Credentials);\r
+\r
+    logger.debug("Doing authentication from rest service: {}",\r
+        factorySrvcDependencyConfig.getBasicAuthorizationURL());\r
+    try {\r
+      if (factorySrvcDependencyConfig.getBasicAuthorizationURL() == null) {\r
+        logger.debug(\r
+            "Device Basic Authentication URL is not configured, hence not performing device authentication against factory data");\r
+        isAuthorized = true;\r
+      } else {\r
+        ResponseEntity<Boolean> restResponse = restTemplate.postForEntity(\r
+            factorySrvcDependencyConfig.getBasicAuthorizationURL(), deviceData, Boolean.class);\r
+        isAuthorized = restResponse.getBody();\r
+        if (isAuthorized.booleanValue()) {\r
+          logger.debug("Updating the username and password");\r
+          byte[] credDecoded = Base64.getDecoder().decode(base64Credentials);\r
+          String credentials = new String(credDecoded, StandardCharsets.UTF_8);\r
+          // credentials = username:password\r
+          final String[] values = credentials.split(":", 2);\r
+          inform.getParams().put(inform.getRoot() + ".ManagementServer.ConnectionRequestUsername",\r
+              values[0]);\r
+          inform.getParams().put(inform.getRoot() + ".ManagementServer.ConnectionRequestPassword",\r
+              values[1]);\r
+        }\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("Unable to authenticate the HTTP request, Reason: {}", e.getMessage());\r
+    }\r
+\r
+    return isAuthorized;\r
+  }\r
+\r
+  /**\r
+   * @param inform\r
+   * @param authorization\r
+   * @return\r
+   */\r
+  private Boolean performDigestAuthentication(Inform inform, String authorization) {\r
+    Boolean isAuthorized = false;\r
+    // Authorization: Basic base64credentials\r
+    String authenticationString = authorization.substring("Digest".length()).trim();\r
+    logger.debug("Authorizing by digest authentication");\r
+    DeviceData deviceData = buildAuthorizationRequest(inform.getSn(), authenticationString);\r
+\r
+    logger.debug("Doing authentication from rest service: {}",\r
+        factorySrvcDependencyConfig.getDigestAuthorizationURL());\r
+    try {\r
+      if (factorySrvcDependencyConfig.getDigestAuthorizationURL() == null) {\r
+        logger.debug(\r
+            "Device Digest Authentication URL is not configured, hence not performing device authentication against factory data");\r
+        isAuthorized = true;\r
+      } else {\r
+        ResponseEntity<Boolean> restResponse = restTemplate.postForEntity(\r
+            factorySrvcDependencyConfig.getDigestAuthorizationURL(), deviceData, Boolean.class);\r
+        isAuthorized = restResponse.getBody();\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("Unable to authenticate the HTTP request, Reason: {}", e.getMessage());\r
+    }\r
+\r
+    return isAuthorized;\r
+  }\r
+\r
+  /**\r
+   * @param serialNumber\r
+   * @param base64Credentials\r
+   * @return\r
+   */\r
+  private DeviceData buildAuthorizationRequest(String serialNumber, String base64Credentials) {\r
+    DeviceData deviceData = new DeviceData();\r
+    deviceData.setSerialNumber(serialNumber);\r
+    deviceData.setAutenticationString(base64Credentials);\r
+    return deviceData;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/processor/ConnectionReqEventProcessor.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/processor/ConnectionReqEventProcessor.java
new file mode 100644 (file)
index 0000000..f43e938
--- /dev/null
@@ -0,0 +1,126 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.processor;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CONNECTION_REQUEST;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CONNECTION_RETRY_SLEEP_TIME;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_TIMEOUT_CALLBACK;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_OP_FAILED;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.MAX_CONNECT_RETRY_COUNT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SEPERATOR;\r
+\r
+import java.io.IOException;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.cpe.utils.DeviceConnector;\r
+import org.commscope.tr069adapter.common.timer.TimerException;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class ConnectionReqEventProcessor {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(ConnectionReqEventProcessor.class);\r
+\r
+  @Autowired\r
+  private DeviceConnector deviceConnector;\r
+\r
+  @Autowired\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  public void initiateConnectionRequest(TR069DeviceDetails tr069DeviceDetails, Boolean isRetry)\r
+      throws SessionManagerException, IOException {\r
+    DeviceRPCResponse deviceRPCResponse = null;\r
+\r
+    for (int retryCount = 0; retryCount < MAX_CONNECT_RETRY_COUNT; retryCount++) {\r
+      logger.info("Initiating connection request on the device. Connection request URL is : {}",\r
+          tr069DeviceDetails.getConnectionRequestURL());\r
+      deviceRPCResponse = deviceConnector.requestConnectionHttp(tr069DeviceDetails);\r
+\r
+      if (deviceRPCResponse.getOperationResponse().getStatus() == HTTP_OP_FAILED) {\r
+        onFailedHTTPGetOperation(deviceRPCResponse);\r
+        logger.debug("Connection Request Retry attempt - {}", retryCount + 1);\r
+\r
+        if ((retryCount + 1) == MAX_CONNECT_RETRY_COUNT) {\r
+          SessionManagerException e = new SessionManagerException(\r
+              ErrorCode.SESSION_INITIATION_FAILED, tr069DeviceDetails.getDeviceId());\r
+          logger.error(e.getMessage());\r
+          throw e;\r
+        }\r
+      } else {\r
+        onSuccessHTTPGetOperation(tr069DeviceDetails, isRetry);\r
+        break;\r
+      }\r
+    }\r
+  }\r
+\r
+  private void onFailedHTTPGetOperation(DeviceRPCResponse deviceRPCResponse) {\r
+    logger.warn("Connection request failed with device, Error: {}",\r
+        deviceRPCResponse.getFaultString());\r
+    logger.debug("Waiting for " + CONNECTION_RETRY_SLEEP_TIME + " millisec before retry");\r
+    try {\r
+      Thread.sleep(CONNECTION_RETRY_SLEEP_TIME);\r
+    } catch (InterruptedException e1) {\r
+      logger.error("Interrupted exception while waiting for CR retry");\r
+      Thread.currentThread().interrupt();\r
+    }\r
+  }\r
+\r
+  private void onSuccessHTTPGetOperation(TR069DeviceDetails tr069DeviceDetails, Boolean isRetry) {\r
+    try {\r
+      String timerId = tr069DeviceDetails.getDeviceId() + SEPERATOR + CONNECTION_REQUEST;\r
+      if (isRetry.booleanValue()) {\r
+        timerServiceManagerAPI.modifyTimer(timerId, CR_TIMEOUT, tr069DeviceDetails);\r
+      } else {\r
+        timerServiceManagerAPI.startTimer(timerId, CR_TIMEOUT_CALLBACK, CR_TIMEOUT,\r
+            tr069DeviceDetails);\r
+      }\r
+      logger.debug(\r
+          "Successfully started the timer task for connection request initiation on device : {}",\r
+          tr069DeviceDetails.getDeviceId());\r
+    } catch (TimerException e) {\r
+      logger.error("Couldn't start the timer task for connection request initiation on device : {}",\r
+          tr069DeviceDetails.getDeviceId());\r
+    }\r
+  }\r
+\r
+  public DeviceConnector getDeviceConnector() {\r
+    return deviceConnector;\r
+  }\r
+\r
+  public void setDeviceConnector(DeviceConnector deviceConnector) {\r
+    this.deviceConnector = deviceConnector;\r
+  }\r
+\r
+  public TimerServiceManagerAPI getTimerServiceManagerAPI() {\r
+    return timerServiceManagerAPI;\r
+  }\r
+\r
+  public void setTimerServiceManagerAPI(TimerServiceManagerAPI timerServiceManagerAPI) {\r
+    this.timerServiceManagerAPI = timerServiceManagerAPI;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AbstractObject.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AbstractObject.java
new file mode 100644 (file)
index 0000000..5604a55
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class AbstractObject extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 416107715167714733L;\r
+\r
+  protected String parameterKey = "";\r
+  protected String objectName = "";\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement("ObjectName").setValue(objectName);\r
+    body.addChildElement(PARAMETER_KEY).setValue(parameterKey);\r
+  }\r
+\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AddObject.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AddObject.java
new file mode 100644 (file)
index 0000000..eeb65f1
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+public class AddObject extends AbstractObject {\r
+\r
+  private static final long serialVersionUID = 5348882615121635477L;\r
+\r
+  public AddObject() {\r
+    name = "AddObject";\r
+  }\r
+\r
+  public AddObject(String objectName, String commandKey) {\r
+    this();\r
+    this.parameterKey = commandKey;\r
+    this.objectName = objectName;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AddObjectResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/AddObjectResponse.java
new file mode 100644 (file)
index 0000000..6e56db2
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class AddObjectResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 8605925303995349848L;\r
+\r
+  public AddObjectResponse() {\r
+    name = "AddObjectResponse";\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    instanceNumber = Integer.parseInt(getRequestElement(spf, body, "InstanceNumber"));\r
+    status = Integer.parseInt(getRequestElement(spf, body, "Status"));\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return name + ": status=" + status + " instance=" + instanceNumber;\r
+  }\r
+\r
+  private int instanceNumber;\r
+  private int status;\r
+\r
+  public int getInstanceNumber() {\r
+    return instanceNumber;\r
+  }\r
+\r
+  public void setInstanceNumber(int instanceNumber) {\r
+    this.instanceNumber = instanceNumber;\r
+  }\r
+\r
+  public int getStatus() {\r
+    return status;\r
+  }\r
+\r
+  public void setStatus(int status) {\r
+    this.status = status;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeleteObject.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeleteObject.java
new file mode 100644 (file)
index 0000000..d9e37ed
--- /dev/null
@@ -0,0 +1,34 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+public class DeleteObject extends AbstractObject {\r
+\r
+  private static final long serialVersionUID = -7149678582391913235L;\r
+\r
+  public DeleteObject() {\r
+    name = "DeleteObject";\r
+  }\r
+\r
+  public DeleteObject(String objectName, String commandKey) {\r
+    this();\r
+    this.parameterKey = commandKey;\r
+    this.objectName = objectName;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeleteObjectResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeleteObjectResponse.java
new file mode 100644 (file)
index 0000000..f3ebba5
--- /dev/null
@@ -0,0 +1,54 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class DeleteObjectResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -1222125166910757757L;\r
+\r
+  public DeleteObjectResponse() {\r
+    name = "DeleteObjectResponse";\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    status = Integer.parseInt(getRequestElement(spf, body, "Status"));\r
+  }\r
+\r
+  private int status;\r
+\r
+  public static long getSerialversionuid() {\r
+    return serialVersionUID;\r
+  }\r
+\r
+  public int getStatus() {\r
+    return status;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeviceInfo.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DeviceInfo.java
new file mode 100644 (file)
index 0000000..2e88804
--- /dev/null
@@ -0,0 +1,302 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.Date;\r
+\r
+public class DeviceInfo {\r
+\r
+  Date lastcontact;\r
+  Date confupTime;\r
+  String hardware;\r
+  String serialno;\r
+  String url;\r
+  String username;\r
+  String password;\r
+  Integer authtype;\r
+  byte[] props;\r
+  Integer hwid;\r
+  String hardwareModelName;\r
+  String oui;\r
+  String pClass;\r
+  String conrequser;\r
+  String conreqpass;\r
+  String profileName;\r
+  String softVersion;\r
+  String configVersion;\r
+  Boolean forcePasswords;\r
+  Boolean reboot;\r
+  String autoConfigurationFilePath;\r
+\r
+  public DeviceInfo(String serialno, String username, String password, String m,\r
+      Boolean forcePasswords, Integer authType) {\r
+    this.serialno = serialno;\r
+    this.username = username;\r
+    this.password = password;\r
+    this.hardwareModelName = m;\r
+    this.forcePasswords = forcePasswords;\r
+    this.authtype = authType;\r
+  }\r
+\r
+  /**\r
+   * @param authtype the authtype to set\r
+   */\r
+  public void setAuthtype(Integer authtype) {\r
+    this.authtype = authtype;\r
+  }\r
+\r
+  /**\r
+   * @param conrequser the conrequser to set\r
+   */\r
+  public void setConrequser(String conrequser) {\r
+    this.conrequser = conrequser;\r
+  }\r
+\r
+  /**\r
+   * @param conreqpass the conreqpass to set\r
+   */\r
+  public void setConreqpass(String conreqpass) {\r
+    this.conreqpass = conreqpass;\r
+  }\r
+\r
+  /**\r
+   * @param confupTime the confupTime to set\r
+   */\r
+  public void setConfupTime(Date confupTime) {\r
+    this.confupTime = confupTime;\r
+  }\r
+\r
+  /**\r
+   * @param url the url to set\r
+   */\r
+  public void setUrl(String url) {\r
+    this.url = url;\r
+  }\r
+\r
+  /**\r
+   * @return the username\r
+   */\r
+  public String getUsername() {\r
+    return username;\r
+  }\r
+\r
+  /**\r
+   * @return the password\r
+   */\r
+  public String getPassword() {\r
+    return password;\r
+  }\r
+\r
+  /**\r
+   * @return the authtype\r
+   */\r
+  public Integer getAuthtype() {\r
+    return authtype;\r
+  }\r
+\r
+  /**\r
+   * @return the props\r
+   */\r
+  public byte[] getProps() {\r
+    return props;\r
+  }\r
+\r
+  /**\r
+   * @param props the props to set\r
+   */\r
+  public void setProps(byte[] props) {\r
+    this.props = props;\r
+  }\r
+\r
+  /**\r
+   * @return the hwid\r
+   */\r
+  public Integer getHwid() {\r
+    return hwid;\r
+  }\r
+\r
+  /**\r
+   * @param hwid the hwid to set\r
+   */\r
+  public void setHwid(Integer hwid) {\r
+    this.hwid = hwid;\r
+  }\r
+\r
+  /**\r
+   * @return the profileName\r
+   */\r
+  public String getProfileName() {\r
+    return profileName;\r
+  }\r
+\r
+  /**\r
+   * @param profileName the profileName to set\r
+   */\r
+  public void setProfileName(String profileName) {\r
+    this.profileName = profileName;\r
+  }\r
+\r
+  /**\r
+   * @return the forcePasswords\r
+   */\r
+  public Boolean getForcePasswords() {\r
+    return forcePasswords;\r
+  }\r
+\r
+  /**\r
+   * @param forcePasswords the forcePasswords to set\r
+   */\r
+  public void setForcePasswords(Boolean forcePasswords) {\r
+    this.forcePasswords = forcePasswords;\r
+  }\r
+\r
+  /**\r
+   * @return the reboot\r
+   */\r
+  public Boolean getReboot() {\r
+    return reboot;\r
+  }\r
+\r
+  /**\r
+   * @param reboot the reboot to set\r
+   */\r
+  public void setReboot(Boolean reboot) {\r
+    this.reboot = reboot;\r
+  }\r
+\r
+  /**\r
+   * @return the lastcontact\r
+   */\r
+  public Date getLastcontact() {\r
+    return lastcontact;\r
+  }\r
+\r
+  /**\r
+   * @param lastcontact the lastcontact to set\r
+   */\r
+  public void setLastcontact(Date lastcontact) {\r
+    this.lastcontact = lastcontact;\r
+  }\r
+\r
+  /**\r
+   * @return the hardware\r
+   */\r
+  public String getHardware() {\r
+    return hardware;\r
+  }\r
+\r
+  /**\r
+   * @param hardware the hardware to set\r
+   */\r
+  public void setHardware(String hardware) {\r
+    this.hardware = hardware;\r
+  }\r
+\r
+  /**\r
+   * @return the conrequser\r
+   */\r
+  public String getConrequser() {\r
+    return conrequser;\r
+  }\r
+\r
+  /**\r
+   * @return the conreqpass\r
+   */\r
+  public String getConreqpass() {\r
+    return conreqpass;\r
+  }\r
+\r
+  /**\r
+   * @return the confupTime\r
+   */\r
+  public Date getConfupTime() {\r
+    return confupTime;\r
+  }\r
+\r
+  /**\r
+   * @return the url\r
+   */\r
+  public String getUrl() {\r
+    return url;\r
+  }\r
+\r
+  /**\r
+   * @return the softVersion\r
+   */\r
+  public String getSoftVersion() {\r
+    return softVersion;\r
+  }\r
+\r
+  /**\r
+   * @param softVersion the softVersion to set\r
+   */\r
+  public void setSoftVersion(String softVersion) {\r
+    this.softVersion = softVersion;\r
+  }\r
+\r
+  /**\r
+   * @return the configVersion\r
+   */\r
+  public String getConfigVersion() {\r
+    return configVersion;\r
+  }\r
+\r
+  /**\r
+   * @param configVersion the configVersion to set\r
+   */\r
+  public void setConfigVersion(String configVersion) {\r
+    this.configVersion = configVersion;\r
+  }\r
+\r
+  /**\r
+   * @return the serialno\r
+   */\r
+  public String getSerialno() {\r
+    return serialno;\r
+  }\r
+\r
+  /**\r
+   * @return the hardwareModelName\r
+   */\r
+  public String getHardwareModelName() {\r
+    return hardwareModelName;\r
+  }\r
+\r
+  /**\r
+   * @param hardwareModelName the hardwareModelName to set\r
+   */\r
+  public void setHardwareModelName(String hardwareModelName) {\r
+    this.hardwareModelName = hardwareModelName;\r
+  }\r
+\r
+  /**\r
+   * @return the autoConfigurationFilePath\r
+   */\r
+  public String getAutoConfigurationFilePath() {\r
+    return autoConfigurationFilePath;\r
+  }\r
+\r
+  /**\r
+   * @param autoConfigurationFilePath the autoConfigurationFilePath to set\r
+   */\r
+  public void setAutoConfigurationFilePath(String autoConfigurationFilePath) {\r
+    this.autoConfigurationFilePath = autoConfigurationFilePath;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Download.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Download.java
new file mode 100644 (file)
index 0000000..a67aa2e
--- /dev/null
@@ -0,0 +1,153 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Download extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 8989750644171761861L;\r
+\r
+  /** Creates a new instance of Download */\r
+  public Download() {\r
+    name = "Download";\r
+  }\r
+\r
+  public Download(String commandKey, String url, String fileType) {\r
+    name = "Download";\r
+    this.commandKey = commandKey;\r
+    this.url = url;\r
+    this.fileType = fileType;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement(COMMAND_KEY).setValue(commandKey);\r
+    body.addChildElement("FileType").setValue(fileType);\r
+    body.addChildElement("URL").setValue(url);\r
+    body.addChildElement("Username").setValue(userName);\r
+    body.addChildElement("Password").setValue(password);\r
+    body.addChildElement("FileSize").setValue(String.valueOf(fileSize));\r
+    body.addChildElement("TargetFileName").setValue(targetFileName);\r
+    body.addChildElement("DelaySeconds").setValue(String.valueOf(delaySeconds));\r
+    body.addChildElement("SuccessURL").setValue(successUrl);\r
+    body.addChildElement("FailureURL").setValue(failureUrl);\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    body.getAllAttributes();\r
+  }\r
+\r
+  private String commandKey = "";\r
+  private String fileType = "";\r
+  private String url = "";\r
+  private String userName = "";\r
+  private String password = "";\r
+  private long fileSize = 0;\r
+  private String targetFileName = "";\r
+  private int delaySeconds = 0;\r
+  private String successUrl = "";\r
+  private String failureUrl = "";\r
+  public static final String FT_FIRMWARE = "1 Firmware Upgrade Image";\r
+  public static final String FT_WEBCONTENT = "2 Web Content";\r
+  public static final String FT_CONFIG = "3 Vendor Configuration File";\r
+\r
+  public String getCommandKey() {\r
+    return commandKey;\r
+  }\r
+\r
+  public void setCommandKey(String commandKey) {\r
+    this.commandKey = commandKey;\r
+  }\r
+\r
+  public String getFileType() {\r
+    return fileType;\r
+  }\r
+\r
+  public void setFileType(String fileType) {\r
+    this.fileType = fileType;\r
+  }\r
+\r
+  public String getUrl() {\r
+    return url;\r
+  }\r
+\r
+  public void setUrl(String url) {\r
+    this.url = url;\r
+  }\r
+\r
+  public String getUserName() {\r
+    return userName;\r
+  }\r
+\r
+  public void setUserName(String userName) {\r
+    this.userName = userName;\r
+  }\r
+\r
+  public String getPassword() {\r
+    return password;\r
+  }\r
+\r
+  public void setPassword(String password) {\r
+    this.password = password;\r
+  }\r
+\r
+  public long getFileSize() {\r
+    return fileSize;\r
+  }\r
+\r
+  public void setFileSize(long fileSize) {\r
+    this.fileSize = fileSize;\r
+  }\r
+\r
+  public String getTargetFileName() {\r
+    return targetFileName;\r
+  }\r
+\r
+  public void setTargetFileName(String targetFileName) {\r
+    this.targetFileName = targetFileName;\r
+  }\r
+\r
+  public int getDelaySeconds() {\r
+    return delaySeconds;\r
+  }\r
+\r
+  public void setDelaySeconds(int delaySeconds) {\r
+    this.delaySeconds = delaySeconds;\r
+  }\r
+\r
+  public String getSuccessUrl() {\r
+    return successUrl;\r
+  }\r
+\r
+  public void setSuccessUrl(String successUrl) {\r
+    this.successUrl = successUrl;\r
+  }\r
+\r
+  public String getFailureUrl() {\r
+    return failureUrl;\r
+  }\r
+\r
+  public void setFailureUrl(String failureUrl) {\r
+    this.failureUrl = failureUrl;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DownloadResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/DownloadResponse.java
new file mode 100644 (file)
index 0000000..770a3b2
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class DownloadResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 8724815762898304925L;\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    startTime = getRequestElement(spf, body, "StartTime");\r
+    completeTime = getRequestElement(spf, body, "CompleteTime");\r
+    status = Integer.parseInt(getRequestElement(spf, body, "Status"));\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "DownloadResponse: Status = " + status + " StartTime " + startTime + " CompleteTime "\r
+        + completeTime;\r
+  }\r
+\r
+  private String startTime;\r
+  private String completeTime;\r
+  private int status;\r
+\r
+  public String getStartTime() {\r
+    return startTime;\r
+  }\r
+\r
+  public void setStartTime(String startTime) {\r
+    this.startTime = startTime;\r
+  }\r
+\r
+  public String getCompleteTime() {\r
+    return completeTime;\r
+  }\r
+\r
+  public void setCompleteTime(String completeTime) {\r
+    this.completeTime = completeTime;\r
+  }\r
+\r
+  public int getStatus() {\r
+    return status;\r
+  }\r
+\r
+  public void setStatus(int status) {\r
+    this.status = status;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/FactoryReset.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/FactoryReset.java
new file mode 100644 (file)
index 0000000..9657d5b
--- /dev/null
@@ -0,0 +1,42 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class FactoryReset extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 3735699002741536893L;\r
+\r
+  public FactoryReset() {\r
+    name = "FactoryReset";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/FactoryResetResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/FactoryResetResponse.java
new file mode 100644 (file)
index 0000000..77fe71b
--- /dev/null
@@ -0,0 +1,42 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class FactoryResetResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -7588187136709330841L;\r
+\r
+  public FactoryResetResponse() {\r
+    name = "FactoryResetResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Fault.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Fault.java
new file mode 100644 (file)
index 0000000..2ab2c97
--- /dev/null
@@ -0,0 +1,201 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.IOException;\r
+import java.io.OutputStream;\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+\r
+import javax.xml.soap.Detail;\r
+import javax.xml.soap.MessageFactory;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+import javax.xml.soap.SOAPFault;\r
+import javax.xml.soap.SOAPHeaderElement;\r
+import javax.xml.soap.SOAPMessage;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Fault extends TR069RPC {\r
+  private static final String FAULTSTRING = "FaultString";\r
+  private static final String FAULTCODE = "FaultCode";\r
+  private static final String FAULT_RPC = "Fault";\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  public Fault() {\r
+    name = FAULT_RPC;\r
+  }\r
+\r
+  public Fault(String soapFaultCode, String soapFaultString, String id) {\r
+    name = FAULT_RPC;\r
+    this.faultCodeCwmp = this.soapFaultCode = soapFaultCode;\r
+    this.faultStringCwmp = this.soapFaultString = soapFaultString;\r
+    this.id = id;\r
+  }\r
+\r
+  @Override\r
+  public void writeTo(OutputStream out) {\r
+    try {\r
+      MessageFactory mf = MessageFactory.newInstance();\r
+      SOAPFactory spf = SOAPFactory.newInstance();\r
+\r
+      String s = "<soapenv:Envelope";\r
+      s += " xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"";\r
+      s += " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"";\r
+      s += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"";\r
+      s += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";\r
+      s += " xmlns:cwmp=\"" + urnCWMP\r
+          + "\"><soapenv:Header></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>";\r
+      ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes());\r
+      SOAPMessage msg = mf.createMessage(null, in);\r
+\r
+      SOAPHeaderElement elmntId =\r
+          msg.getSOAPHeader().addHeaderElement(spf.createName("ID", CWMP, urnCWMP));\r
+      elmntId.setValue(getId());\r
+      elmntId.setAttribute("soapenv:mustUnderstand", "1");\r
+      SOAPFault fault = msg.getSOAPBody().addFault();\r
+      fault.addChildElement(spf.createName("faultcode")).setValue(String.valueOf("Server"));\r
+      fault.addChildElement(spf.createName("faultstring")).setValue(String.valueOf("CWMP Fault"));\r
+\r
+      if (name == null || name.equals("")) {\r
+        name = this.getClass().getSimpleName();\r
+      }\r
+      msg.writeTo(out);\r
+    } catch (SOAPException ex) {\r
+      logger.error("Exception  : {}", ex.getMessage());\r
+    } catch (IOException e) {\r
+      logger.error("Exception  : {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void createBody(Detail body, SOAPFactory spf) throws SOAPException {\r
+\r
+    SOAPElement element = spf.createElement(FAULT_RPC, CWMP, urnCWMP);\r
+    element.addChildElement(spf.createName(FAULTCODE)).setValue(String.valueOf(this.faultCodeCwmp));\r
+    element.addChildElement(spf.createName(FAULTSTRING))\r
+        .setValue(String.valueOf(this.faultStringCwmp));\r
+    body.addChildElement(element);\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    try {\r
+      soapFaultCode = getRequestElement(spf, body, "faultcode");\r
+    } catch (Exception e) {\r
+      logger.error("Exception while parseBody faultcode {}", e.toString());\r
+    }\r
+    try {\r
+      soapFaultString = getRequestElement(spf, body, "faultstring");\r
+    } catch (Exception e) {\r
+      logger.error("Exception while parseBody faultstring {}", e.toString());\r
+    }\r
+    SOAPElement detail = null;\r
+    try {\r
+      detail = getRequestChildElement(spf, body, "detail");\r
+    } catch (Exception e) {\r
+      logger.error("Exception while parseBody detail {}", e.toString());\r
+    }\r
+    if (detail == null) {\r
+      detail = body; // for one broken cpe\r
+    }\r
+    SOAPElement cwmpfault = getRequestChildElement2(spf, detail, FAULT_RPC);\r
+    faultCodeCwmp = getRequestElement(spf, cwmpfault, FAULTCODE);\r
+    faultStringCwmp = getRequestElement(spf, cwmpfault, FAULTSTRING);\r
+\r
+    Iterator<?> i = cwmpfault.getChildElements(spf.createName("SetParameterValuesFault"));\r
+    if (i.hasNext()) {\r
+      setParameterValuesFaults = new ArrayList<>();\r
+    }\r
+    while (i.hasNext()) {\r
+      SOAPElement f = (SOAPElement) i.next();\r
+      SetParameterValueFault vf =\r
+          new SetParameterValueFault(getRequestElement(spf, f, "ParameterName"),\r
+              getRequestElement(spf, f, FAULTCODE), getRequestElement(spf, f, FAULTSTRING));\r
+      setParameterValuesFaults.add(vf);\r
+    }\r
+    if (setParameterValuesFaults != null) {\r
+      for (SetParameterValueFault f : setParameterValuesFaults) {\r
+        logger.error("n={} c={} s={}", f.getParameterName(), f.getFaultCode(), f.getFaultString());\r
+      }\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "FAULT: code=" + soapFaultCode + " msg=" + soapFaultString + " code=" + faultCodeCwmp\r
+        + " cmsg=" + faultStringCwmp;\r
+  }\r
+\r
+  private String soapFaultCode;\r
+  private String soapFaultString;\r
+  private String faultCodeCwmp;\r
+  private String faultStringCwmp;\r
+  private ArrayList<SetParameterValueFault> setParameterValuesFaults;\r
+\r
+  public String getFaultString() {\r
+    return soapFaultString;\r
+  }\r
+\r
+  public String getFaultStringCwmp() {\r
+    return faultStringCwmp;\r
+  }\r
+\r
+  public String getFaultCode() {\r
+    return soapFaultCode;\r
+  }\r
+\r
+  public String getCwmpFaultCode() {\r
+    return faultCodeCwmp;\r
+  }\r
+\r
+  public static final String FCODE_REQUEST_DENIED = "9001";\r
+  public static final String FCODE_INTERNAL = "9002";\r
+  public static final String FCODE_INVALID_ARGS = "9003";\r
+  public static final String FCODE_RESOURCE_EXCEEDED = "9004";\r
+  public static final String FCODE_INVALID_PARAMETER_NAME = "9005";\r
+  public static final String FCODE_INVALID_PARAMETER_TYPE = "9006";\r
+  public static final String FCODE_INVALID_PARAMETER_VALUE = "9007";\r
+  public static final String FCODE_PARAMETER_READONLY = "9008";\r
+  public static final String FCODE_NOTIFICATION_REJECTED = "9009";\r
+  public static final String FCODE_DOWNLOAD_FAILURE = "9010";\r
+  public static final String FCODE_UPLOAD_FAILURE = "9011";\r
+  public static final String FCODE_FILE_TRANSFER_AUTHENTICATION_FAILURE = "9012";\r
+  public static final String FCODE_PROTOCOL_NOT_SUPPORTED = "9013";\r
+  public static final String FCODE_DLF_MULTICAST = "9014";\r
+  public static final String FCODE_DLF_NO_CONTACT = "9015";\r
+  public static final String FCODE_DLF_FILE_ACCESS = "9016";\r
+  public static final String FCODE_DLF_UNABLE_TO_COMPLETE = "9017";\r
+  public static final String FCODE_DLF_FILE_CORRUPTED = "9018";\r
+  public static final String FCODE_DLF_FILE_AUTHENTICATION = "9019";\r
+  public static final String FCODE_ACS_METHOD_NOT_SUPPORTED = "8000";\r
+  public static final String FCODE_ACS_REQUEST_DENIED = "8001";\r
+  public static final String FCODE_ACS_INTERNAL_ERROR = "8002";\r
+  public static final String FCODE_ACS_INVALID_ARGS = "8003";\r
+  public static final String FCODE_ACS_RESOURCE_EXCEEDED = "8004";\r
+  public static final String FCODE_ACS_RETRY = "8005";\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetOptions.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetOptions.java
new file mode 100644 (file)
index 0000000..502c1f9
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetOptions extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -2337523798125454936L;\r
+\r
+  public GetOptions() {\r
+    name = "GetOptions";\r
+  }\r
+\r
+  public GetOptions(String option) {\r
+    name = "GetOptions";\r
+    optionName = option;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement("OptionName").setValue(optionName);\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String optionName = "";\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetOptionsResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetOptionsResponse.java
new file mode 100644 (file)
index 0000000..6e7f0be
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import javax.xml.soap.Name;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetOptionsResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -9160354248384671344L;\r
+\r
+  public class OptionStruct {\r
+    private String optionName;\r
+    private String voucherSN;\r
+    private int state;\r
+    private int mode;\r
+    private String startDate;\r
+    private String expirationDate;\r
+    private boolean isTransferable;\r
+\r
+    public String getOptionName() {\r
+      return optionName;\r
+    }\r
+\r
+    public String getVoucherSN() {\r
+      return voucherSN;\r
+    }\r
+\r
+    public int getState() {\r
+      return state;\r
+    }\r
+\r
+    public int getMode() {\r
+      return mode;\r
+    }\r
+\r
+    public String getStartDate() {\r
+      return startDate;\r
+    }\r
+\r
+    public String getExpirationDate() {\r
+      return expirationDate;\r
+    }\r
+\r
+    public boolean isTransferable() {\r
+      return isTransferable;\r
+    }\r
+  }\r
+\r
+  public GetOptionsResponse() {\r
+    name = "GetOptionsResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @SuppressWarnings("rawtypes")\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    Iterator<SOAPElement> pi = getRequestChildElement(spf, body, "OptionList")\r
+        .getChildElements(spf.createName("OptionStruct"));\r
+    Name nameOptionName = spf.createName("OptionName");\r
+    Name nameVoucherSN = spf.createName("VoucherSN");\r
+    Name nameState = spf.createName("State");\r
+    Name nameMode = spf.createName("Mode");\r
+    Name nameStartDate = spf.createName("StartDate");\r
+    Name nameExpirationDate = spf.createName("ExpirationDate");\r
+    Name nameIsTransferable = spf.createName("IsTransferable");\r
+\r
+    List<OptionStruct> optionList = new ArrayList<>();\r
+\r
+    while (pi.hasNext()) {\r
+      SOAPElement option = pi.next();\r
+      OptionStruct o = new OptionStruct();\r
+      o.optionName = getRequestElement(option, nameOptionName);\r
+      o.voucherSN = getRequestElement(option, nameVoucherSN);\r
+      o.state = Integer.parseInt(getRequestElement(option, nameState));\r
+      o.mode = Integer.parseInt(getRequestElement(option, nameMode));\r
+      o.startDate = getRequestElement(option, nameStartDate);\r
+      o.expirationDate = getRequestElement(option, nameExpirationDate);\r
+      o.isTransferable = Boolean.parseBoolean(getRequestElement(option, nameIsTransferable));\r
+      optionList.add(o);\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterAttributes.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterAttributes.java
new file mode 100644 (file)
index 0000000..5070f5d
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetParameterAttributes extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  /** Creates a new instance of GetParameterAttributes */\r
+  public GetParameterAttributes() {\r
+    name = "GetParameterAttributes";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement elm = body.addChildElement(spf.createName("ParameterNames"));\r
+    elm.setAttribute(SOAP_ARRAY_TYPE, "xsd:string[" + parameterNames.length + "]");\r
+    for (int i = 0; i < parameterNames.length; i++) {\r
+      elm.addChildElement("string").setValue(parameterNames[i]);\r
+    }\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String[] parameterNames;\r
+\r
+  public String[] getParameterNames() {\r
+    return parameterNames;\r
+  }\r
+\r
+  public void setParameterNames(String[] parameterNames) {\r
+    this.parameterNames = parameterNames;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterAttributesResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterAttributesResponse.java
new file mode 100644 (file)
index 0000000..9e7e52a
--- /dev/null
@@ -0,0 +1,107 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.io.Serializable;\r
+import java.util.Iterator;\r
+\r
+import javax.xml.soap.Name;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetParameterAttributesResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 5241691699448063027L;\r
+\r
+  /** Creates a new instance of GetParameterAttributes */\r
+  public GetParameterAttributesResponse() {\r
+    name = "GetParameterAttributesResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @SuppressWarnings({"rawtypes", "unused"})\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement ml = getRequestChildElement(spf, body, "ParameterList");\r
+    int i = getArrayCount(spf, ml);\r
+    Iterator<SOAPElement> mlist = ml.getChildElements(spf.createName("ParameterAttributeStruct"));\r
+    attributes = new ParameterAttributeStruct[i];\r
+    Name nameKey = spf.createName("Name");\r
+    Name nameNotification = spf.createName("Notification");\r
+    Name nameString = spf.createName("string");\r
+    i = 0;\r
+    while (mlist.hasNext()) {\r
+      SOAPElement param = mlist.next();\r
+      attributes[i] = new ParameterAttributeStruct();\r
+      attributes[i].name = getRequestElement(param, nameKey);\r
+      attributes[i].notification = Integer.parseInt(getRequestElement(param, nameNotification));\r
+      // get acl array\r
+      SOAPElement elementAccessList = getRequestChildElement(spf, param, "AccessList");\r
+      int ii = getArrayCount(spf, elementAccessList);\r
+      attributes[i].accessList = new String[ii];\r
+\r
+      ii = 0;\r
+      Iterator<SOAPElement> iteratorAccessList = elementAccessList.getChildElements(nameString);\r
+      while (iteratorAccessList.hasNext()) {\r
+        attributes[i].accessList[ii++] = ((SOAPElement) iteratorAccessList.next()).getValue();\r
+      }\r
+      i++;\r
+    }\r
+\r
+  }\r
+\r
+  private ParameterAttributeStruct[] attributes;\r
+\r
+  public ParameterAttributeStruct[] getAttributes() {\r
+    return attributes;\r
+  }\r
+\r
+  public void setAttributes(ParameterAttributeStruct[] attributes) {\r
+    this.attributes = attributes;\r
+  }\r
+\r
+  public class ParameterAttributeStruct implements Serializable {\r
+\r
+    private static final long serialVersionUID = -5185719453218694220L;\r
+\r
+    ParameterAttributeStruct() {}\r
+\r
+    private String name;\r
+    private int notification;\r
+    private String[] accessList;\r
+\r
+    public String getName() {\r
+      return name;\r
+    }\r
+\r
+    public int getNotification() {\r
+      return notification;\r
+    }\r
+\r
+    public String[] getAccessList() {\r
+      return accessList;\r
+    }\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterNames.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterNames.java
new file mode 100644 (file)
index 0000000..85581b2
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetParameterNames extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 184260558169451279L;\r
+\r
+  /** Creates a new instance of GetParameterNames */\r
+  public GetParameterNames() {\r
+    name = "GetParameterNames";\r
+    parameterPath = ".";\r
+    nextLevel = false;\r
+  }\r
+\r
+  public GetParameterNames(String parameterPath, boolean nextLevel) {\r
+    this();\r
+    this.parameterPath = parameterPath;\r
+    this.nextLevel = nextLevel;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement(spf.createName("ParameterPath")).setValue(parameterPath);\r
+    body.addChildElement(spf.createName("NextLevel")).setValue(nextLevel ? "1" : "0");\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String parameterPath;\r
+  private boolean nextLevel;\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterNamesResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterNamesResponse.java
new file mode 100644 (file)
index 0000000..cd90629
--- /dev/null
@@ -0,0 +1,69 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.Arrays;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetParameterNamesResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 8724736185069683719L;\r
+\r
+  /** Creates a new instance of GetParameterNamesResponse */\r
+  public GetParameterNamesResponse() {\r
+    name = "GetParameterNamesResponse";\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    names = parseParamList(body, spf, "ParameterInfoStruct", "Writable");\r
+  }\r
+\r
+  public int[] getMultiInstanceNames(String prefix) {\r
+    int[] r = new int[names.size()];\r
+    int ix = 0;\r
+    int pfxlength = prefix.length();\r
+    for (Entry<String, String> e : names.entrySet()) {\r
+      String k = e.getKey();\r
+      String n;\r
+      if (k.endsWith(".")) {\r
+        n = k.substring(pfxlength, k.length() - 1);\r
+      } else {\r
+        n = k.substring(pfxlength);\r
+      }\r
+      r[ix++] = Integer.parseInt(n);\r
+    }\r
+    Arrays.sort(r);\r
+    return r;\r
+  }\r
+\r
+  private Map<String, String> names;\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterValues.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterValues.java
new file mode 100644 (file)
index 0000000..7234b3c
--- /dev/null
@@ -0,0 +1,89 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.Map;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetParameterValues extends TR069RPC {\r
+\r
+  private static final String GET_PARAMETER_VALUES = "GetParameterValues";\r
+  private static final long serialVersionUID = -2247007005513782433L;\r
+\r
+  /** Creates a new instance of GetParameterValues */\r
+  public GetParameterValues() {\r
+    name = GET_PARAMETER_VALUES;\r
+  }\r
+\r
+  public GetParameterValues(String[] parameterNames) {\r
+    name = GET_PARAMETER_VALUES;\r
+    this.parameterNames = parameterNames;\r
+  }\r
+\r
+  public GetParameterValues(Map<String, String> parameters) {\r
+    name = GET_PARAMETER_VALUES;\r
+    parameters.keySet().toArray(parameterNames);\r
+  }\r
+\r
+  public GetParameterValues(String paramName) {\r
+    name = GET_PARAMETER_VALUES;\r
+    this.parameterNames = new String[1];\r
+    this.parameterNames[0] = paramName;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement elm = body.addChildElement(spf.createName("ParameterNames"));\r
+    elm.setAttribute(SOAP_ARRAY_TYPE, "xsd:string[" + parameterNames.length + "]");\r
+    for (int i = 0; i < parameterNames.length; i++) {\r
+      SOAPElement s = elm.addChildElement("string");\r
+      s.setValue(parameterNames[i]);\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    StringBuilder s = new StringBuilder();\r
+    for (int i = 0; i < parameterNames.length; i++) {\r
+      s.append('\t');\r
+      s.append(parameterNames[i]);\r
+      s.append("'\t");\r
+    }\r
+    return s.toString();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String[] parameterNames;\r
+\r
+  public String[] getParameterNames() {\r
+    return parameterNames;\r
+  }\r
+\r
+  public void setParameterNames(String[] parameterNames) {\r
+    this.parameterNames = parameterNames;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterValuesResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetParameterValuesResponse.java
new file mode 100644 (file)
index 0000000..ddf3bc2
--- /dev/null
@@ -0,0 +1,94 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetParameterValuesResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 6927206690856966492L;\r
+\r
+  /** Creates a new instance of GetParameterValuesResponse */\r
+  public GetParameterValuesResponse() {\r
+    name = "GetParameterValuesResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    values = parseParamList(body, spf);\r
+  }\r
+\r
+  private Map<String, String> values;\r
+\r
+  public Integer getParamInt(String name) {\r
+    String v = values.get(name);\r
+    if (v != null) {\r
+      try {\r
+        return Integer.parseInt(v);\r
+      } catch (NumberFormatException e) {\r
+        logger.error("Exception while getParamInt detail {}", e.toString());\r
+      }\r
+    }\r
+    return null;\r
+  }\r
+\r
+  public Integer getParamInt(String name, int defaultValue) {\r
+    Integer value = getParamInt(name);\r
+    return (value != null) ? value : defaultValue;\r
+  }\r
+\r
+  public String getParam(String name) {\r
+    return values.get(name);\r
+  }\r
+\r
+  public String getParam(String name, String defaultValue) {\r
+    String value = getParam(name);\r
+    return (value != null) ? value : defaultValue;\r
+  }\r
+\r
+  public Map<String, String> getValues() {\r
+    return values;\r
+  }\r
+\r
+  public void setValues(Map<String, String> values) {\r
+    this.values = values;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    StringBuilder b = new StringBuilder(1024);\r
+    for (Entry<String, String> e : values.entrySet()) {\r
+      b.append(e.getKey());\r
+      b.append("=");\r
+      b.append(e.getValue());\r
+      b.append("\n");\r
+    }\r
+    return b.toString();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetQueuedTransfers.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetQueuedTransfers.java
new file mode 100644 (file)
index 0000000..9c23416
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetQueuedTransfers extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -268523725158801441L;\r
+\r
+  public GetQueuedTransfers() {\r
+    name = "GetQueuedTransfers";\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetQueuedTransfersResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetQueuedTransfersResponse.java
new file mode 100644 (file)
index 0000000..5a2b988
--- /dev/null
@@ -0,0 +1,59 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+import javax.xml.soap.Name;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetQueuedTransfersResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 8169512570542407908L;\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  @SuppressWarnings("rawtypes")\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    Iterator<SOAPElement> pi = getRequestChildElement(spf, body, "TransferList")\r
+        .getChildElements(spf.createName("QueuedTransferStruct"));\r
+    Name nameCommandKey = spf.createName(COMMAND_KEY);\r
+    Name nameState = spf.createName("State");\r
+    Map<String, String> transferList = new HashMap<>();\r
+    while (pi.hasNext()) {\r
+      SOAPElement param = pi.next();\r
+      String key = getRequestElement(param, nameCommandKey);\r
+      String state = getRequestElement(param, nameState);\r
+      transferList.put(key, state);\r
+    }\r
+\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetRPCMethods.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetRPCMethods.java
new file mode 100644 (file)
index 0000000..a39afb3
--- /dev/null
@@ -0,0 +1,46 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.*;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetRPCMethods extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 8453064006159695558L;\r
+\r
+  /** Creates a new instance of GetRPCMethods */\r
+  public GetRPCMethods() {\r
+    name = "GetRPCMethods";\r
+  }\r
+\r
+  public GetRPCMethods(String id) {\r
+    name = "GetRPCMethods";\r
+    this.id = id;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetRPCMethodsResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/GetRPCMethodsResponse.java
new file mode 100644 (file)
index 0000000..17f5815
--- /dev/null
@@ -0,0 +1,78 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class GetRPCMethodsResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -2718028310071462414L;\r
+\r
+  /** Creates a new instance of GetRPCMethodsResponse */\r
+  public GetRPCMethodsResponse() {}\r
+\r
+  public GetRPCMethodsResponse(GetRPCMethods req) {\r
+    this.id = req.getId();\r
+    methods = new String[] {"Inform", "TransferComplete", "GetRPCMethods"};\r
+    name = "GetRPCMethodsResponse";\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement mlst = body.addChildElement(spf.createName("MethodList"));\r
+    mlst.setAttribute(SOAP_ARRAY_TYPE, "xsd:string[" + methods.length + "]");\r
+    for (String m : methods) {\r
+      mlst.addChildElement("string").setValue(m);\r
+    }\r
+\r
+  }\r
+\r
+  @SuppressWarnings({"rawtypes", "unused"})\r
+  @Override\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement ml = getRequestChildElement(spf, body, "MethodList");\r
+    getArrayCount(spf, ml);\r
+    Iterator<Object> mlist = ml.getChildElements();\r
+    ArrayList<String> m = new ArrayList<>();\r
+    while (mlist.hasNext()) {\r
+      Object e = mlist.next();\r
+      if (e instanceof SOAPElement) {\r
+        SOAPElement el = (SOAPElement) e;\r
+        if (el.getElementQName().getLocalPart().equals("string")) {\r
+          m.add(el.getValue());\r
+        }\r
+      }\r
+    }\r
+    methods = m.toArray(new String[1]);\r
+  }\r
+\r
+  private String[] methods;\r
+\r
+  public String[] getMethods() {\r
+    return methods;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Inform.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Inform.java
new file mode 100644 (file)
index 0000000..fce3790
--- /dev/null
@@ -0,0 +1,320 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.LinkedHashSet;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+import java.util.Set;\r
+\r
+import javax.xml.soap.Name;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Inform extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 929353181551497549L;\r
+\r
+  public class Event implements Entry<String, String> {\r
+\r
+    private String eventCode;\r
+    private String cmdKey;\r
+\r
+    public Event(String event, String cmdKey) {\r
+      this.eventCode = event;\r
+      this.cmdKey = cmdKey;\r
+    }\r
+\r
+    public String getKey() {\r
+      return eventCode;\r
+    }\r
+\r
+    public String getValue() {\r
+      return cmdKey;\r
+    }\r
+\r
+    public String setValue(String value) {\r
+      cmdKey = value;\r
+      return cmdKey;\r
+    }\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+\r
+  @SuppressWarnings("rawtypes")\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement deviceid = getRequestChildElement(spf, body, "DeviceId");\r
+    defns = deviceid.getNamespaceURI();\r
+\r
+    oui = getRequestElement(spf, deviceid, "OUI");\r
+    sn = getRequestElement(spf, deviceid, "SerialNumber");\r
+    manufacturer = getRequestElement(spf, deviceid, "Manufacturer");\r
+    productClass = getRequestElement(spf, deviceid, "ProductClass");\r
+    if (productClass == null) {\r
+      productClass = "";\r
+    }\r
+    maxEnvelopes = Integer.parseInt(getRequestElement(spf, body, "MaxEnvelopes"));\r
+    retryCount = Integer.parseInt(getRequestElement(spf, body, "RetryCount"));\r
+    currentTime = getRequestElement(spf, body, "CurrentTime");\r
+\r
+    Iterator<SOAPElement> pi = getRequestChildElement(spf, body, "ParameterList")\r
+        .getChildElements(spf.createName("ParameterValueStruct"));\r
+    Name nameKey = spf.createName("Name");\r
+    Name nameValue = spf.createName("Value");\r
+    params = new HashMap<>();\r
+    while (pi.hasNext()) {\r
+      SOAPElement param = pi.next();\r
+      String key = getRequestElement(param, nameKey);\r
+      if (root == null && !key.startsWith(".")) {\r
+        if (key.startsWith("Device.")) {\r
+          root = "Device";\r
+        } else {\r
+          root = "InternetGatewayDevice";\r
+        }\r
+      }\r
+      String value = "";\r
+      try {\r
+        value = getRequestElement(param, nameValue);\r
+        value = setEmptyValueIfNull(value);\r
+      } catch (Exception e) {\r
+        logger.error("Exception while Inform parseBody. {}", e.toString());\r
+      }\r
+      params.put(key, value);\r
+    }\r
+\r
+    if (root == null) {\r
+      throw new SOAPException("Invalid root. Must be InternetGatewayDevice or Device");\r
+    }\r
+\r
+    pi = getRequestChildElement(spf, body, "Event").getChildElements(spf.createName("EventStruct"));\r
+    Name eventCode = spf.createName("EventCode");\r
+    Name commandKey = spf.createName(COMMAND_KEY);\r
+    events = new LinkedHashSet<>();\r
+    while (pi.hasNext()) {\r
+      SOAPElement param = pi.next();\r
+      String event = getRequestElement(param, eventCode);\r
+      String cmdKey = getRequestElement(param, commandKey);\r
+      cmdKey = setEmptyValueIfNull(cmdKey);\r
+      events.add(new Event(event, cmdKey));\r
+    }\r
+\r
+  }\r
+\r
+  private String setEmptyValueIfNull(String value) {\r
+    if (value == null)\r
+      value = "";\r
+\r
+    return value;\r
+  }\r
+\r
+  public String getSoftwareVersion() {\r
+    String v = params.get(root + ".DeviceInfo.SoftwareVersion");\r
+    if (v != null) {\r
+      v = v.replace('-', '.');\r
+      v = v.replace(',', ' ');\r
+    }\r
+    return v;\r
+  }\r
+\r
+  public String getHardwareVersion() {\r
+    return params.get(root + ".DeviceInfo.HardwareVersion");\r
+  }\r
+\r
+  public String getConfigVersion() {\r
+    return params.get(root + ".DeviceInfo.VendorConfigFile.1.Version");\r
+  }\r
+\r
+  public String getURL() {\r
+    String url = params.get(root + ".ManagementServer.ConnectionRequestURL");\r
+    if (url != null) {\r
+      return url;\r
+    }\r
+    url = params.get(root + ".ManagementServer.UDPConnectionRequestAddress");\r
+    if (url != null) {\r
+      url = (url.indexOf(':') == -1) ? "udp://" + url + ":80" : "udp://" + url;\r
+    }\r
+    return url;\r
+  }\r
+\r
+  public String getConreqUser() {\r
+    return params.get(root + ".ManagementServer.ConnectionRequestUsername");\r
+  }\r
+\r
+  public String getConreqPass() {\r
+    return params.get(root + ".ManagementServer.ConnectionRequestPassword");\r
+  }\r
+\r
+  public String getProvisiongCode() {\r
+    return params.get(root + ".DeviceInfo.ProvisioningCode");\r
+  }\r
+\r
+  public void setProvisiongCode(String code) {\r
+    params.put(root + ".DeviceInfo.ProvisioningCode", code);\r
+  }\r
+\r
+  public String getRoot() {\r
+    return root;\r
+  }\r
+\r
+  public boolean isEvent(String event) {\r
+    for (Entry<String, String> e : events) {\r
+      if (e.getKey().equals(event)) {\r
+        return true;\r
+      }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    StringBuilder s = new StringBuilder(1024);\r
+    s.append("Inform:\n");\r
+    println(s, "\toui: ", oui);\r
+    println(s, "\tsn: ", sn);\r
+    println(s, "\tManufacturer: ", manufacturer);\r
+\r
+    s.append("\tEvents:\n");\r
+    for (Entry<String, String> ev : events) {\r
+      println(s, "\t\t", ev.getKey(), ev.getValue());\r
+    }\r
+\r
+    s.append("\tParams:\n");\r
+    for (Entry<String, String> k : params.entrySet()) {\r
+      println(s, "\t\t", k.getKey(), k.getValue());\r
+    }\r
+    return s.toString();\r
+  }\r
+\r
+  private String oui;\r
+  private String sn;\r
+  private String productClass;\r
+  private String manufacturer;\r
+  private int retryCount;\r
+  private String currentTime;\r
+  private Map<String, String> params;\r
+  private transient Set<Entry<String, String>> events;\r
+  private transient Set<Entry<String, String>> response;\r
+  private int maxEnvelopes;\r
+  private String defns;\r
+  private String root = null;\r
+  public static final String EVENT_BOOT_STRAP = "0 BOOTSTRAP";\r
+  public static final String EVENT_BOOT = "1 BOOT";\r
+  public static final String EVENT_PERIODIC = "2 PERIODIC";\r
+  public static final String EVENT_SCHEDULED = "3 SCHEDULED";\r
+  public static final String EVENT_VALUE_CHANGE = "4 VALUE CHANGE";\r
+  public static final String EVENT_KICKED = "5 KICKED";\r
+  public static final String EVENT_CONNECTION_REQUEST = "6 CONNECTION REQUEST";\r
+  public static final String EVENT_TRANSFER_COMPLETE = "7 TRANSFER COMPLETE";\r
+\r
+  public String getOui() {\r
+    return oui;\r
+  }\r
+\r
+  public void setOui(String oui) {\r
+    this.oui = oui;\r
+  }\r
+\r
+  public String getSn() {\r
+    return sn;\r
+  }\r
+\r
+  public void setSn(String sn) {\r
+    this.sn = sn;\r
+  }\r
+\r
+  public String getProductClass() {\r
+    return productClass;\r
+  }\r
+\r
+  public void setProductClass(String productClass) {\r
+    this.productClass = productClass;\r
+  }\r
+\r
+  public String getManufacturer() {\r
+    return manufacturer;\r
+  }\r
+\r
+  public void setManufacturer(String manufacturer) {\r
+    this.manufacturer = manufacturer;\r
+  }\r
+\r
+  public int getRetryCount() {\r
+    return retryCount;\r
+  }\r
+\r
+  public void setRetryCount(int retryCount) {\r
+    this.retryCount = retryCount;\r
+  }\r
+\r
+  public String getCurrentTime() {\r
+    return currentTime;\r
+  }\r
+\r
+  public void setCurrentTime(String currentTime) {\r
+    this.currentTime = currentTime;\r
+  }\r
+\r
+  public Map<String, String> getParams() {\r
+    return params;\r
+  }\r
+\r
+  public void setParams(Map<String, String> params) {\r
+    this.params = params;\r
+  }\r
+\r
+  public Set<Entry<String, String>> getResponse() {\r
+    return response;\r
+  }\r
+\r
+  public void setResponse(Set<Entry<String, String>> response) {\r
+    this.response = response;\r
+  }\r
+\r
+  public int getMaxEnvelopes() {\r
+    return maxEnvelopes;\r
+  }\r
+\r
+  public void setMaxEnvelopes(int maxEnvelopes) {\r
+    this.maxEnvelopes = maxEnvelopes;\r
+  }\r
+\r
+  public Set<Entry<String, String>> getEvents() {\r
+    return events;\r
+  }\r
+\r
+  public void setEvents(Set<Entry<String, String>> events) {\r
+    this.events = events;\r
+  }\r
+\r
+  public String getDefns() {\r
+    return defns;\r
+  }\r
+\r
+  public void setDefns(String defns) {\r
+    this.defns = defns;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/InformResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/InformResponse.java
new file mode 100644 (file)
index 0000000..87e5521
--- /dev/null
@@ -0,0 +1,51 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class InformResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -6630956520797380374L;\r
+\r
+  /** Creates a new instance of InformResponse */\r
+  public InformResponse() {\r
+    name = "InformResponse";\r
+  }\r
+\r
+  public InformResponse(String id, int me) {\r
+    name = "InformResponse";\r
+    this.id = id;\r
+    maxEnvelopes = me;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement(spf.createName("MaxEnvelopes")).setValue(String.valueOf(maxEnvelopes));\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private int maxEnvelopes;\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Reboot.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Reboot.java
new file mode 100644 (file)
index 0000000..4abbd96
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Reboot extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -8168326873272603522L;\r
+\r
+  /** Creates a new instance of Reboot */\r
+  public Reboot() {\r
+    name = "Reboot";\r
+  }\r
+\r
+  public Reboot(String commandKey) {\r
+    this();\r
+    this.commandKey = commandKey;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement(COMMAND_KEY).setValue(commandKey);\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String commandKey = "";\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/RebootResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/RebootResponse.java
new file mode 100644 (file)
index 0000000..e29ed05
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class RebootResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 2908052291627129613L;\r
+\r
+  /** Creates a new instance of RebootResponse */\r
+  public RebootResponse() {\r
+    name = "RebootResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/ScheduleInform.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/ScheduleInform.java
new file mode 100644 (file)
index 0000000..c36cf6d
--- /dev/null
@@ -0,0 +1,60 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class ScheduleInform extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -8331857985546047109L;\r
+\r
+  public ScheduleInform() {\r
+    name = "ScheduleInform";\r
+  }\r
+\r
+  public ScheduleInform(int delaySeconds, String commandKey) {\r
+    this();\r
+    this.commandKey = commandKey;\r
+    this.delaySeconds = delaySeconds;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement(COMMAND_KEY).setValue(commandKey);\r
+    body.addChildElement("DelaySeconds").setValue(((Integer) delaySeconds).toString());\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String commandKey;\r
+  private int delaySeconds;\r
+\r
+  public String getCommandKey() {\r
+    return commandKey;\r
+  }\r
+\r
+  public int getDelaySeconds() {\r
+    return delaySeconds;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/ScheduleInformResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/ScheduleInformResponse.java
new file mode 100644 (file)
index 0000000..d0374bc
--- /dev/null
@@ -0,0 +1,42 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class ScheduleInformResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -5748334144003159571L;\r
+\r
+  public ScheduleInformResponse() {\r
+    name = "ScheduleInformResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributes.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributes.java
new file mode 100644 (file)
index 0000000..26de442
--- /dev/null
@@ -0,0 +1,82 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class SetParameterAttributes extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  public SetParameterAttributes() {\r
+    name = "SetParameterAttributes";\r
+    attrs = new ArrayList<>();\r
+  }\r
+\r
+  public void addAttribute(String name, boolean notificationChange, int notification,\r
+      boolean accessListChange, String[] accessList) {\r
+    attrs.add(new SetParameterAttributesStruct(name, notificationChange, notification,\r
+        accessListChange, accessList));\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement elm = body.addChildElement(spf.createName("ParameterList"));\r
+    elm.setAttribute(SOAP_ARRAY_TYPE, "cwmp:SetParameterAttributesStruct[" + attrs.size() + "]");\r
+    int c = attrs.size();\r
+    for (int i = 0; i < c; i++) {\r
+      SOAPElement param = elm.addChildElement("SetParameterAttributesStruct");\r
+      param.addChildElement("Name").setValue(attrs.get(i).getName());\r
+      param.addChildElement("NotificationChange")\r
+          .setValue(b2s(attrs.get(i).isNotificationChange()));\r
+      param.addChildElement("Notification")\r
+          .setValue(String.valueOf(attrs.get(i).getNotification()));\r
+\r
+      param.addChildElement("AccessListChange").setValue(b2s(attrs.get(i).isAccessListChange()));\r
+\r
+      SOAPElement al = param.addChildElement(spf.createName("AccessList"));\r
+      if (null != attrs.get(i).getAccessList()) {\r
+        String[] acl = attrs.get(i).getAccessList();\r
+        int ca = 0;\r
+        if (acl != null)\r
+          ca = acl.length;\r
+        al.setAttribute(SOAP_ARRAY_TYPE, "xsd:string[" + ca + "]");\r
+        for (int i2 = 0; i2 < ca; i2++) {\r
+          SOAPElement acle = al.addChildElement("string");\r
+          acle.setValue(acl[i2]);\r
+          acle.setAttribute(XSI_TYPE, XSD_STRING);\r
+        }\r
+      }\r
+\r
+    }\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private List<SetParameterAttributesStruct> attrs;\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributesResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributesResponse.java
new file mode 100644 (file)
index 0000000..581a7b4
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class SetParameterAttributesResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 6042501590465284932L;\r
+\r
+  /** Creates a new instance of RebootResponse */\r
+  public SetParameterAttributesResponse() {\r
+    name = "SetParameterAttributesResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributesStruct.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterAttributesStruct.java
new file mode 100644 (file)
index 0000000..3e6bc97
--- /dev/null
@@ -0,0 +1,125 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlRootElement;\r
+import javax.xml.bind.annotation.XmlType;\r
+\r
+@XmlRootElement(name = "SetParameterAttributesStruct",\r
+    namespace = "urn:NbiService.notification.nbi.com")\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+@XmlType(name = "SetParameterAttributesStruct",\r
+    propOrder = {"Name", "NotificationChange", "Notification", "AccessListChange", "AccessList"})\r
+public class SetParameterAttributesStruct implements Serializable {\r
+\r
+  private static final long serialVersionUID = 3800958675601111274L;\r
+\r
+  /**\r
+   * @return the name\r
+   */\r
+  public String getName() {\r
+    return name;\r
+  }\r
+\r
+  /**\r
+   * @param name the name to set\r
+   */\r
+  public void setName(String name) {\r
+    this.name = name;\r
+  }\r
+\r
+  /**\r
+   * @return the notificationChange\r
+   */\r
+  public boolean isNotificationChange() {\r
+    return notificationChange;\r
+  }\r
+\r
+  /**\r
+   * @param notificationChange the notificationChange to set\r
+   */\r
+  public void setNotificationChange(boolean notificationChange) {\r
+    this.notificationChange = notificationChange;\r
+  }\r
+\r
+  /**\r
+   * @return the notification\r
+   */\r
+  public int getNotification() {\r
+    return notification;\r
+  }\r
+\r
+  /**\r
+   * @param notification the notification to set\r
+   */\r
+  public void setNotification(int notification) {\r
+    this.notification = notification;\r
+  }\r
+\r
+  /**\r
+   * @return the accessListChange\r
+   */\r
+  public boolean isAccessListChange() {\r
+    return accessListChange;\r
+  }\r
+\r
+  /**\r
+   * @param accessListChange the accessListChange to set\r
+   */\r
+  public void setAccessListChange(boolean accessListChange) {\r
+    this.accessListChange = accessListChange;\r
+  }\r
+\r
+  /**\r
+   * @return the accessList\r
+   */\r
+  public String[] getAccessList() {\r
+    return accessList;\r
+  }\r
+\r
+  /**\r
+   * @param accessList the accessList to set\r
+   */\r
+  public void setAccessList(String[] accessList) {\r
+    this.accessList = accessList;\r
+  }\r
+\r
+  private String name;\r
+  private boolean notificationChange;\r
+  private int notification;\r
+  private boolean accessListChange;\r
+  private String[] accessList;\r
+\r
+  public SetParameterAttributesStruct() {\r
+\r
+  }\r
+\r
+  public SetParameterAttributesStruct(String name, boolean notificationChange, int notification,\r
+      boolean accessListChange, String[] accessList) {\r
+    this.name = name;\r
+    this.notificationChange = notificationChange;\r
+    this.notification = notification;\r
+    this.accessList = accessList;\r
+    this.accessListChange = accessListChange;\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValueFault.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValueFault.java
new file mode 100644 (file)
index 0000000..ad77657
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.io.Serializable;\r
+\r
+public class SetParameterValueFault implements Serializable {\r
+\r
+  private static final long serialVersionUID = -1594414731431087298L;\r
+\r
+  public SetParameterValueFault(String parameterName, String faultCode, String faultString) {\r
+    this.faultCode = faultCode;\r
+    this.faultString = faultString;\r
+    this.parameterName = parameterName;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "SetParameterValueFault: ParameterName=" + parameterName + " FaultCode=" + faultCode\r
+        + " FaultString=" + faultString;\r
+  }\r
+\r
+  private String parameterName;\r
+  private String faultCode;\r
+  private String faultString;\r
+\r
+  public String getParameterName() {\r
+    return parameterName;\r
+  }\r
+\r
+  public String getFaultCode() {\r
+    return faultCode;\r
+  }\r
+\r
+  public String getFaultString() {\r
+    return faultString;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValues.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValues.java
new file mode 100644 (file)
index 0000000..bc70860
--- /dev/null
@@ -0,0 +1,120 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class SetParameterValues extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -7143315228088632032L;\r
+\r
+  /** Creates a new instance of GetParameterValues */\r
+  public SetParameterValues() {\r
+    name = "SetParameterValues";\r
+    names = new ArrayList<>();\r
+    values = new ArrayList<>();\r
+    types = new ArrayList<>();\r
+  }\r
+\r
+  public void merge(SetParameterValues other) {\r
+    for (int i = 0; i < other.names.size(); i++) {\r
+      names.add(other.names.get(i));\r
+      values.add(other.values.get(i));\r
+      types.add(other.types.get(i));\r
+    }\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    SOAPElement elm = body.addChildElement(spf.createName("ParameterList"));\r
+    elm.setAttribute(SOAP_ARRAY_TYPE, "cwmp:ParameterValueStruct[" + names.size() + "]");\r
+    for (int i = 0; i < names.size(); i++) {\r
+      SOAPElement param = elm.addChildElement("ParameterValueStruct");\r
+      param.addChildElement("Name").setValue(names.get(i));\r
+      SOAPElement v = param.addChildElement("Value");\r
+      v.setValue(values.get(i));\r
+      v.setAttribute(XSI_TYPE, getXmlType(types.get(i)));\r
+    }\r
+    body.addChildElement(PARAMETER_KEY).setValue(key);\r
+  }\r
+\r
+  @Override\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf, String key)\r
+      throws SOAPException {\r
+    SOAPElement elm = body.addChildElement(spf.createName("ParameterList"));\r
+    elm.setAttribute(SOAP_ARRAY_TYPE, "cwmp:ParameterValueStruct[" + names.size() + "]");\r
+    for (int i = 0; i < names.size(); i++) {\r
+      SOAPElement param = elm.addChildElement("ParameterValueStruct");\r
+      param.addChildElement("Name").setValue(names.get(i));\r
+      SOAPElement v = param.addChildElement("Value");\r
+      v.setValue(values.get(i));\r
+      v.setAttribute(XSI_TYPE, getXmlType(types.get(i)));\r
+    }\r
+    body.addChildElement(PARAMETER_KEY).setValue(key);\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  public void addValue(String name, String value) {\r
+    addValue(name, value, XSD_STRING);\r
+  }\r
+\r
+  public void addValue(String name, Integer value) {\r
+    addValue(name, value.toString(), XSD_UNSIGNEDINT);\r
+  }\r
+\r
+  public void addValue(String name, String value, String type) {\r
+    names.add(name);\r
+    values.add(value);\r
+    types.add(type);\r
+  }\r
+\r
+  public boolean isEmpty() {\r
+    return names.isEmpty();\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    StringBuilder s = new StringBuilder();\r
+    for (int i = 0; i < names.size(); i++) {\r
+      s.append('\t');\r
+      s.append(names.get(i));\r
+      s.append(" (");\r
+      s.append(types.get(i));\r
+      s.append(") '");\r
+      s.append(values.get(i));\r
+      s.append("'\n");\r
+    }\r
+    return s.toString();\r
+  }\r
+\r
+  private List<String> names;\r
+  private List<String> values;\r
+  private List<String> types;\r
+  private String key = "unsetCommandKey";\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValuesResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/SetParameterValuesResponse.java
new file mode 100644 (file)
index 0000000..75ce0db
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class SetParameterValuesResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = 2548432807002795491L;\r
+\r
+  /** Creates a new instance of GetParameterValues */\r
+  public SetParameterValuesResponse() {\r
+    name = "SetParameterValuesResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    status = Integer.parseInt(getRequestElement(spf, body, "Status"));\r
+  }\r
+\r
+  private int status;\r
+\r
+  public int getStatus() {\r
+    return status;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/TransferComplete.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/TransferComplete.java
new file mode 100644 (file)
index 0000000..61af5de
--- /dev/null
@@ -0,0 +1,83 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class TransferComplete extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -2176842223562717026L;\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    startTime = getRequestElement(spf, body, "StartTime");\r
+    completeTime = getRequestElement(spf, body, "CompleteTime");\r
+    commandKey = getRequestElement(spf, body, COMMAND_KEY);\r
+    SOAPElement fault = getRequestChildElement(spf, body, "FaultStruct");\r
+    if (fault != null) {\r
+      faultCode = Integer.parseInt(getRequestElement(spf, fault, "FaultCode"));\r
+      faultString = getRequestElement(spf, fault, "FaultString");\r
+    } else {\r
+      faultCode = 0;\r
+      faultString = null;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "TransferComplete: cmdkey=" + commandKey + " faultcode=" + faultCode + " faultstring="\r
+        + faultString;\r
+  }\r
+\r
+  private String commandKey;\r
+  private String startTime;\r
+  private String completeTime;\r
+  private int faultCode;\r
+  private String faultString;\r
+\r
+  public String getCommandKey() {\r
+    return commandKey;\r
+  }\r
+\r
+  public String getStartTime() {\r
+    return startTime;\r
+  }\r
+\r
+  public String getCompleteTime() {\r
+    return completeTime;\r
+  }\r
+\r
+  public int getFaultCode() {\r
+    return faultCode;\r
+  }\r
+\r
+  public String getFaultString() {\r
+    return faultString;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/TransferCompleteResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/TransferCompleteResponse.java
new file mode 100644 (file)
index 0000000..74dfbff
--- /dev/null
@@ -0,0 +1,48 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class TransferCompleteResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -4372672275276987151L;\r
+\r
+  /** Creates a new instance of TransferCompleteResponse */\r
+  public TransferCompleteResponse() {\r
+    name = "TransferCompleteResponse";\r
+  }\r
+\r
+  public TransferCompleteResponse(String id) {\r
+    this();\r
+    this.id = id;\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Upload.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Upload.java
new file mode 100644 (file)
index 0000000..09ba567
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Upload extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -3096728959585163928L;\r
+\r
+  /** Creates a new instance of Upload */\r
+  public Upload() {\r
+    name = "Upload";\r
+    username = "";\r
+    password = "";\r
+    delaySeconds = 0;\r
+    fileType = FT_CONFIG;\r
+    url = "http://192.168.1.1:8080/acs-war/upload/tst.cfg";\r
+    commandKey = "default.command.key";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    body.addChildElement(COMMAND_KEY).setValue(commandKey);\r
+    body.addChildElement("FileType").setValue(fileType);\r
+\r
+    body.addChildElement("URL").setValue(url);\r
+    body.addChildElement("Username").setValue(username);\r
+    body.addChildElement("Password").setValue(password);\r
+    body.addChildElement("DelaySeconds").setValue(String.valueOf(delaySeconds));\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory f) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  private String commandKey;\r
+  private String fileType;\r
+  private String url;\r
+  private String username;\r
+  private String password;\r
+  private int delaySeconds;\r
+  public static final String FT_CONFIG = "1 Vendor Configuration File";\r
+  public static final String FT_LOG = "2 Vendor Log File";\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/UploadResponse.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/UploadResponse.java
new file mode 100644 (file)
index 0000000..c76ffcc
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class UploadResponse extends TR069RPC {\r
+\r
+  private static final long serialVersionUID = -4885490848398687980L;\r
+\r
+  /** Creates a new instance of GetParameterValues */\r
+  public UploadResponse() {\r
+    name = "UploadResponse";\r
+  }\r
+\r
+  protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    logger.isDebugEnabled();\r
+  }\r
+\r
+  protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+    startTime = getRequestElement(spf, body, "StartTime");\r
+    completeTime = getRequestElement(spf, body, "CompleteTime");\r
+    status = Integer.parseInt(getRequestElement(spf, body, "Status"));\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return name + ": StartTime=" + startTime + " CompleteTIme=" + completeTime + " Status="\r
+        + status;\r
+  }\r
+\r
+  private String startTime;\r
+  private String completeTime;\r
+  private int status;\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/DeviceConnector.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/DeviceConnector.java
new file mode 100644 (file)
index 0000000..9e02a65
--- /dev/null
@@ -0,0 +1,123 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.utils;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEFAULT_CONNECTION_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_CONNECTION_IDLE_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_OP_FAILED;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_OP_SUCCESS;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_STATUS_OK;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.HTTP_STATUS_OK_WITH_NO_CONTENT;\r
+\r
+import java.io.IOException;\r
+\r
+import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;\r
+import org.apache.commons.httpclient.HttpClient;\r
+import org.apache.commons.httpclient.HttpConnectionManager;\r
+import org.apache.commons.httpclient.HttpException;\r
+import org.apache.commons.httpclient.UsernamePasswordCredentials;\r
+import org.apache.commons.httpclient.auth.AuthScope;\r
+import org.apache.commons.httpclient.methods.GetMethod;\r
+import org.apache.commons.httpclient.params.HttpConnectionManagerParams;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceConnector {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceConnector.class);\r
+\r
+  /**\r
+   * Performs HTTP get on the connection request URL for the device.\r
+   * \r
+   * @param deviceDetails\r
+   * @return\r
+   * @throws IOException\r
+   * @throws Exception\r
+   */\r
+  public DeviceRPCResponse requestConnectionHttp(TR069DeviceDetails deviceDetails)\r
+      throws IOException {\r
+\r
+    HttpClient client = new HttpClient();\r
+    HttpConnectionManager hcm = client.getHttpConnectionManager();\r
+    HttpConnectionManagerParams hcmParam = hcm.getParams();\r
+    hcmParam.setConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT);\r
+    hcmParam.setSoTimeout(DEFAULT_CONNECTION_TIMEOUT);\r
+    hcm.setParams(hcmParam);\r
+    client.setHttpConnectionManager(hcm);\r
+\r
+    if (deviceDetails.getUsername() != null && deviceDetails.getPassword() != null) {\r
+      client.getState().setCredentials(new AuthScope(null, -1), new UsernamePasswordCredentials(\r
+          deviceDetails.getUsername(), deviceDetails.getPassword()));\r
+    } else {\r
+      logger.error("Insufficient HTTP arguments: UserName or password is null");\r
+      throw new HttpException("Insufficient HTTP arguments: UserName or password is null");\r
+    }\r
+\r
+    DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler(1, true);\r
+    client.getParams().setParameter("http.method.retry-handler", retryhandler);\r
+    GetMethod get = new GetMethod(deviceDetails.getConnectionRequestURL());\r
+    get.setDoAuthentication(true);\r
+\r
+    try {\r
+      int status = client.executeMethod(get);\r
+      return populateOperationResult(deviceDetails, get.getResponseBodyAsString(), status);\r
+    } finally {\r
+      get.releaseConnection();\r
+      hcm.closeIdleConnections(HTTP_CONNECTION_IDLE_TIMEOUT);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceDtails\r
+   * @param message\r
+   * @param httpStatus\r
+   * @return\r
+   */\r
+  private DeviceRPCResponse populateOperationResult(TR069DeviceDetails deviceDtails, String message,\r
+      int httpStatus) {\r
+\r
+    DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();\r
+    OperationResponse operationResponse = new OperationResponse();\r
+\r
+    operationResponse.setOperationCode(TR069OperationCode.INITIATE_CR);\r
+\r
+    // HTTP status for successful connection can be 200=Ok, 204=No Content)\r
+    if (httpStatus != HTTP_STATUS_OK && httpStatus != HTTP_STATUS_OK_WITH_NO_CONTENT) {\r
+      operationResponse.setStatus(HTTP_OP_FAILED);\r
+      deviceRPCResponse.setFaultKey(httpStatus + "");\r
+      deviceRPCResponse.setFaultString(message);\r
+    } else {\r
+      operationResponse.setStatus(HTTP_OP_SUCCESS);\r
+    }\r
+\r
+    deviceRPCResponse.setOperationResponse(operationResponse);\r
+    deviceRPCResponse.setDeviceDetails(deviceDtails);\r
+\r
+    // nBIOperationResult.setOperationId(operationId);// why operation id is here ?\r
+\r
+    return deviceRPCResponse;\r
+  }\r
+\r
+}\r
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/FactorySrvcDependencyConfig.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/utils/FactorySrvcDependencyConfig.java
new file mode 100644 (file)
index 0000000..9010702
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.utils;\r
+\r
+import org.springframework.boot.context.properties.ConfigurationProperties;\r
+import org.springframework.context.annotation.Configuration;\r
+\r
+@Configuration\r
+@ConfigurationProperties(prefix = "config")\r
+public class FactorySrvcDependencyConfig {\r
+\r
+  private String basicAuthorizationURL;\r
+\r
+  private String digestAuthorizationURL;\r
+\r
+  private String deviceValidationURL;\r
+\r
+  public String getBasicAuthorizationURL() {\r
+    return basicAuthorizationURL;\r
+  }\r
+\r
+  public void setBasicAuthorizationURL(String basicAuthorizationURL) {\r
+    this.basicAuthorizationURL = basicAuthorizationURL;\r
+  }\r
+\r
+  public String getDigestAuthorizationURL() {\r
+    return digestAuthorizationURL;\r
+  }\r
+\r
+  public void setDigestAuthorizationURL(String digestAuthorizationURL) {\r
+    this.digestAuthorizationURL = digestAuthorizationURL;\r
+  }\r
+\r
+  public String getDeviceValidationURL() {\r
+    return deviceValidationURL;\r
+  }\r
+\r
+  public void setDeviceValidationURL(String deviceValidationURL) {\r
+    this.deviceValidationURL = deviceValidationURL;\r
+  }\r
+\r
+}\r
diff --git a/acs/nbi/pom.xml b/acs/nbi/pom.xml
new file mode 100644 (file)
index 0000000..d7db474
--- /dev/null
@@ -0,0 +1,130 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+    \r
+    <modelVersion>4.0.0</modelVersion>\r
+    <groupId>org.commscope.tr069adapter.acs.nbi</groupId>\r
+    <artifactId>acsnbi</artifactId>\r
+    <name>acs nbi service</name>\r
+    \r
+    <parent>\r
+       <groupId>org.commscope.tr069adapter.acs</groupId>\r
+       <artifactId>acs</artifactId>\r
+       <version>1.0.0</version>\r
+    </parent>\r
+    \r
+    <dependencies>\r
+       <dependency>\r
+               <groupId>org.springframework</groupId>\r
+               <artifactId>spring-jms</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-web</artifactId>\r
+               <exclusions>\r
+                <exclusion>\r
+                    <groupId>org.springframework.boot</groupId>\r
+                    <artifactId>spring-boot-starter-logging</artifactId>\r
+                </exclusion>\r
+            </exclusions>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-log4j2</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+            <groupId>com.lmax</groupId>\r
+            <artifactId>disruptor</artifactId>\r
+            <version>3.4.2</version>\r
+        </dependency>\r
+       <dependency>\r
+               <groupId>org.apache.activemq</groupId>\r
+               <artifactId>activemq-broker</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>com.fasterxml.jackson.core</groupId>\r
+               <artifactId>jackson-databind</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>javax.ws.rs</groupId>\r
+               <artifactId>javax.ws.rs-api</artifactId>\r
+               <version>2.0</version>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.commscope.tr069adapter.common</groupId>\r
+               <artifactId>common</artifactId>\r
+               <version>1.0.0</version>\r
+       </dependency>\r
+       <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+       <dependency>\r
+               <groupId>org.commscope.tr069adapter.acs.requestprocessor</groupId>\r
+               <artifactId>requestprocessor</artifactId>\r
+               <version>1.0.0</version>\r
+       </dependency>\r
+    </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/ACSServiceAPIImpl.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/ACSServiceAPIImpl.java
new file mode 100644 (file)
index 0000000..835f24c
--- /dev/null
@@ -0,0 +1,100 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.impl;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.MAPPER_SERVICE_QUALILFIER;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.TR069_NBI_REQUEST_Q;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.exception.MapperServiceException;\r
+import org.commscope.tr069adapter.acs.common.mapper.ACSServiceAPI;\r
+import org.commscope.tr069adapter.acs.nbi.util.OperationIdGenerator;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.jms.core.JmsTemplate;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component(MAPPER_SERVICE_QUALILFIER)\r
+public class ACSServiceAPIImpl implements ACSServiceAPI {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(ACSServiceAPIImpl.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private OperationIdGenerator opIdGenerator;\r
+\r
+  @Autowired\r
+  private JmsTemplate jmsTemplate;\r
+\r
+  /*\r
+   * (non-Javadoc)\r
+   * \r
+   * @see org.commscope.tr069adapter.acs.mapper.ACSServiceAPI#performDeviceOperation(org.commscope.\r
+   * tr069adapter.acs.DeviceRPCRequest)\r
+   */\r
+  @Override\r
+  public long performDeviceOperation(DeviceRPCRequest deviceRPCRequest)\r
+      throws MapperServiceException {\r
+\r
+    Long opId = 0l;\r
+    try {\r
+      if (deviceRPCRequest != null && deviceRPCRequest.getDeviceDetails() != null) {\r
+        MDC.put(CLIENT_STR, deviceRPCRequest.getDeviceDetails().getDeviceId());\r
+      }\r
+\r
+      // validate the request and reject if not valid.\r
+      if (null == deviceRPCRequest) {\r
+        logger.error("Received null Mapper Request.");\r
+        throw new MapperServiceException("Received null Mapper Request.");\r
+      } else if (null == deviceRPCRequest.getOpDetails()) {\r
+        logger.error("Received null operation details.");\r
+        throw new MapperServiceException("Received null operation details.");\r
+      } else if (null == deviceRPCRequest.getOpDetails().getOpCode()) {\r
+        logger.error("Received null operation code.");\r
+        throw new MapperServiceException("Received null operation code.");\r
+      }\r
+\r
+      logger.info("Received request to perform device operation. OperationCode: {}",\r
+          deviceRPCRequest.getOpDetails().getOpCode());\r
+      opId = opIdGenerator.generateOpId();\r
+      logger.debug("The operation ID generated for processing the Device RPC request is - {}",\r
+          opId);\r
+      // set opId and forward the request\r
+      deviceRPCRequest.setOperationId(opId);\r
+      jmsTemplate.convertAndSend(TR069_NBI_REQUEST_Q, deviceRPCRequest);\r
+\r
+      logger.debug(\r
+          "Successfully posted the Mapper Request to Queue with OperationId : {} OperationCode : {}",\r
+          deviceRPCRequest.getOperationId(), deviceRPCRequest.getOpDetails().getOpCode());\r
+    } catch (Exception ex) {\r
+      MapperServiceException mapperEx =\r
+          new MapperServiceException("ACS Internal Error. Unknown Exception. Details :", ex);\r
+      logger.error(mapperEx.getMessage());\r
+      throw mapperEx;\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+\r
+    return opId;\r
+  }\r
+\r
+}\r
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/DeviceInformForwarder.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/DeviceInformForwarder.java
new file mode 100644 (file)
index 0000000..6b86297
--- /dev/null
@@ -0,0 +1,59 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.impl;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_NOTIFICATION_CF;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_NOTIFICATION_Q;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.nbi.mapper.service.DeviceEventsMapperNotificationService;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.jms.annotation.JmsListener;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component\r
+public class DeviceInformForwarder {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceInformForwarder.class);\r
+\r
+  @Autowired\r
+  private DeviceEventsMapperNotificationService deviceEventsMapperNotificationService;\r
+\r
+  @JmsListener(destination = NBI_NOTIFICATION_Q, containerFactory = NBI_NOTIFICATION_CF)\r
+  @Transactional(rollbackFor = Exception.class)\r
+  public void onMessage(DeviceInform notification) {\r
+    try {\r
+      if (null != notification) {\r
+        logger.debug(\r
+            "DeviceNotification message is received for deviceId : {} , Notification Type(s): {}",\r
+            notification.getDeviceDetails().getDeviceId(), notification.getInformTypeList());\r
+        deviceEventsMapperNotificationService.processDeviceNotification(notification);\r
+        logger.debug("Successfully processed device notification.");\r
+      } else {\r
+        logger.error("Null device response is received!!!");\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("Error while processing the notification, Reason: {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/DeviceRPCResponseForwarder.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/impl/DeviceRPCResponseForwarder.java
new file mode 100644 (file)
index 0000000..72f97a5
--- /dev/null
@@ -0,0 +1,57 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.impl;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_OP_RESULT_CF;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_OP_RESULT_Q;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.nbi.mapper.service.DeviceEventsMapperNotificationService;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.jms.annotation.JmsListener;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component\r
+public class DeviceRPCResponseForwarder {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceRPCResponseForwarder.class);\r
+\r
+  @Autowired\r
+  private DeviceEventsMapperNotificationService deviceEventsMapperNotificationService;\r
+\r
+  @JmsListener(destination = NBI_OP_RESULT_Q, containerFactory = NBI_OP_RESULT_CF)\r
+  @Transactional(rollbackFor = Exception.class)\r
+  public void onMessage(DeviceRPCResponse opResult) {\r
+    try {\r
+      if (null != opResult) {\r
+        logger.debug("NBIOperationResult message is received for deviceId : {}, , OprationId: {}",\r
+            opResult.getDeviceDetails().getDeviceId(), opResult.getOperationId());\r
+        deviceEventsMapperNotificationService.processOperationResponse(opResult);\r
+        logger.debug("Successfully processed NBI operation result.");\r
+      } else {\r
+        logger.error("Null device response is received!!!");\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("Error while processing the notification, Reason: {}", e.getMessage());\r
+    }\r
+  }\r
+}\r
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/mapper/service/DeviceEventsMapperNotificationService.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/mapper/service/DeviceEventsMapperNotificationService.java
new file mode 100644 (file)
index 0000000..7c53e7d
--- /dev/null
@@ -0,0 +1,75 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.mapper.service;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.nbi.util.MapperSrvcDependencyConfig;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.ResponseEntity;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class DeviceEventsMapperNotificationService {\r
+\r
+  private static final Logger logger =\r
+      LoggerFactory.getLogger(DeviceEventsMapperNotificationService.class);\r
+\r
+  @Autowired\r
+  RestTemplate restTemplate;\r
+\r
+  @Autowired\r
+  MapperSrvcDependencyConfig mapperSrvcDependencyConfig;\r
+\r
+  public void processOperationResponse(DeviceRPCResponse opResult) {\r
+    logger.debug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");\r
+    logger.debug("Received Operation result from NBI");\r
+    logger.debug("Posting the operation request to WebService: {}",\r
+        mapperSrvcDependencyConfig.getMapperDeviceRPCResponseNotificationServiceURL());\r
+    try {\r
+      restTemplate.postForEntity(\r
+          mapperSrvcDependencyConfig.getMapperDeviceRPCResponseNotificationServiceURL(), opResult,\r
+          ResponseEntity.class);\r
+      logger.debug("Successfully posted the NBI operation request to SBI Service");\r
+    } catch (Exception e) {\r
+      logger.error("Unable to post the operation result, Reason: {}", e.getMessage());\r
+    }\r
+    logger.debug("++++++++++++++++++++++++++++++++++++++++++++++++++++++++");\r
+\r
+  }\r
+\r
+  public void processDeviceNotification(DeviceInform notification) {\r
+    logger.debug("++++++++++++++++++++++++++++++++++++++++++++++++++++++");\r
+    logger.debug("Received Notification from NBI");\r
+    logger.debug("Posting the Device Notification to WebService: {}",\r
+        mapperSrvcDependencyConfig.getMapperInformNotificationServiceURL());\r
+    try {\r
+      restTemplate.postForEntity(mapperSrvcDependencyConfig.getMapperInformNotificationServiceURL(),\r
+          notification, ResponseEntity.class);\r
+      logger.debug("Successfully posted the Device Notification to SBI Service");\r
+    } catch (Exception e) {\r
+      logger.error("Unable to post the Device Notification, Reason: {}", e.getMessage());\r
+    }\r
+    logger.debug("+++++++++++++++++++++++++++++++++++++++++++++++++++++");\r
+  }\r
+\r
+}\r
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/mapper/service/MapperRequestRESTService.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/mapper/service/MapperRequestRESTService.java
new file mode 100644 (file)
index 0000000..9ea4eec
--- /dev/null
@@ -0,0 +1,62 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.mapper.service;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.MAPPER_SERVICE_QUALILFIER;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.exception.MapperServiceException;\r
+import org.commscope.tr069adapter.acs.common.mapper.ACSServiceAPI;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.beans.factory.annotation.Qualifier;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestBody;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping("/MapperService")\r
+public class MapperRequestRESTService {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(MapperRequestRESTService.class);\r
+\r
+  @Qualifier(value = MAPPER_SERVICE_QUALILFIER)\r
+  @Autowired\r
+  ACSServiceAPI acsServiceAPI;\r
+\r
+  @PostMapping("/initiateDeviceOperation")\r
+  public Long initiateDeviceOperation(@RequestBody DeviceRPCRequest deviceRPCRequest) {\r
+    logger.debug("Received a Device operation request from Mapper");\r
+    Long operationId = 0l;\r
+    try {\r
+      operationId = acsServiceAPI.performDeviceOperation(deviceRPCRequest);\r
+      logger.debug(\r
+          "Successfully initiated device operation, The operation id for the request is: {}",\r
+          operationId);\r
+    } catch (MapperServiceException e) {\r
+      logger.error("An exception occurred while calling the device operation, Reason: {}",\r
+          e.getMessage());\r
+    }\r
+\r
+    return operationId;\r
+  }\r
+\r
+}\r
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/util/MapperSrvcDependencyConfig.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/util/MapperSrvcDependencyConfig.java
new file mode 100644 (file)
index 0000000..9dfdc8e
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.util;\r
+\r
+import org.springframework.boot.context.properties.ConfigurationProperties;\r
+import org.springframework.context.annotation.Configuration;\r
+\r
+@Configuration\r
+@ConfigurationProperties(prefix = "config")\r
+public class MapperSrvcDependencyConfig {\r
+\r
+  private String mapperInformNotificationServiceURL;\r
+\r
+  private String mapperDeviceRPCResponseNotificationServiceURL;\r
+\r
+  public String getMapperInformNotificationServiceURL() {\r
+    return mapperInformNotificationServiceURL;\r
+  }\r
+\r
+  public void setMapperInformNotificationServiceURL(String mapperInformNotificationServiceURL) {\r
+    this.mapperInformNotificationServiceURL = mapperInformNotificationServiceURL;\r
+  }\r
+\r
+  public String getMapperDeviceRPCResponseNotificationServiceURL() {\r
+    return mapperDeviceRPCResponseNotificationServiceURL;\r
+  }\r
+\r
+  public void setMapperDeviceRPCResponseNotificationServiceURL(\r
+      String mapperDeviceRPCResponseNotificationServiceURL) {\r
+    this.mapperDeviceRPCResponseNotificationServiceURL =\r
+        mapperDeviceRPCResponseNotificationServiceURL;\r
+  }\r
+\r
+}\r
diff --git a/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/util/OperationIdGenerator.java b/acs/nbi/src/main/java/org/commscope/tr069adapter/acs/nbi/util/OperationIdGenerator.java
new file mode 100644 (file)
index 0000000..df71897
--- /dev/null
@@ -0,0 +1,30 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.nbi.util;\r
+\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class OperationIdGenerator {\r
+\r
+  public Long generateOpId() {\r
+    return System.currentTimeMillis();\r
+  }\r
+\r
+}\r
diff --git a/acs/pom.xml b/acs/pom.xml
new file mode 100644 (file)
index 0000000..e954135
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+    \r
+    <parent>\r
+       <groupId>org.commscope.tr069adapter</groupId>\r
+       <artifactId>tr069adapter</artifactId>\r
+       <version>1.0.0</version>\r
+    </parent>\r
+    \r
+    <modelVersion>4.0.0</modelVersion>\r
+    <groupId>org.commscope.tr069adapter.acs</groupId>\r
+    <artifactId>acs</artifactId>\r
+    <packaging>pom</packaging>\r
+\r
+    <name>acs</name>\r
+    <modules>\r
+       <module>common</module>\r
+       <module>application-booter</module>\r
+       <module>cpe</module>\r
+       <module>requestprocessor</module>\r
+       <module>nbi</module>\r
+    </modules>\r
+</project>\r
diff --git a/acs/requestprocessor/pom.xml b/acs/requestprocessor/pom.xml
new file mode 100644 (file)
index 0000000..0c69d81
--- /dev/null
@@ -0,0 +1,145 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+    <modelVersion>4.0.0</modelVersion>\r
+    <groupId>org.commscope.tr069adapter.acs.requestprocessor</groupId>\r
+    <artifactId>requestprocessor</artifactId>\r
+    <name>TR069 Request Processor</name>\r
+\r
+    <parent>\r
+       <groupId>org.commscope.tr069adapter.acs</groupId>\r
+       <artifactId>acs</artifactId>\r
+       <version>1.0.0</version>\r
+    </parent>\r
+    \r
+    <dependencies>\r
+       <dependency>\r
+               <groupId>org.springframework</groupId>\r
+               <artifactId>spring-jms</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-web</artifactId>\r
+               <exclusions>\r
+                <exclusion>\r
+                    <groupId>org.springframework.boot</groupId>\r
+                    <artifactId>spring-boot-starter-logging</artifactId>\r
+                </exclusion>\r
+            </exclusions>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-log4j2</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+            <groupId>com.lmax</groupId>\r
+            <artifactId>disruptor</artifactId>\r
+            <version>3.4.2</version>\r
+        </dependency>\r
+       <dependency>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-starter-activemq</artifactId>\r
+        </dependency>\r
+       <dependency>\r
+               <groupId>org.apache.activemq</groupId>\r
+               <artifactId>activemq-broker</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>com.fasterxml.jackson.core</groupId>\r
+               <artifactId>jackson-databind</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>javax.ws.rs</groupId>\r
+               <artifactId>javax.ws.rs-api</artifactId>\r
+               <version>2.0</version>\r
+       </dependency>\r
+       <dependency>\r
+             <groupId>org.mariadb.jdbc</groupId>\r
+             <artifactId>mariadb-java-client</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>com.fasterxml.uuid</groupId>\r
+               <artifactId>java-uuid-generator</artifactId>\r
+               <version>3.1.3</version>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-data-jpa</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>com.google.code.gson</groupId>\r
+               <artifactId>gson</artifactId>\r
+       </dependency>\r
+       <dependency>\r
+               <groupId>org.commscope.tr069adapter.common</groupId>\r
+               <artifactId>common</artifactId>\r
+               <version>1.0.0</version>\r
+       </dependency>\r
+       <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+    </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/DeviceOperationInterface.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/DeviceOperationInterface.java
new file mode 100644 (file)
index 0000000..43e2fce
--- /dev/null
@@ -0,0 +1,39 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+\r
+public interface DeviceOperationInterface {\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   */\r
+  public TR069DeviceDetails getDeviceDetails(String deviceId) throws DeviceOperationException;\r
+\r
+  /**\r
+   * @param deviceDetails\r
+   * @throws DeviceOperationException\r
+   */\r
+  public void updateDeviceDetails(DeviceDetails deviceDetails) throws DeviceOperationException;\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/TR069DeviceEventHandlerImpl.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/TR069DeviceEventHandlerImpl.java
new file mode 100644 (file)
index 0000000..0936fcd
--- /dev/null
@@ -0,0 +1,212 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.*;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.DeviceOperationRequestDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionConcurrentAccessException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.requestprocessor.service.TR069DeviceEventHandler;\r
+import org.commscope.tr069adapter.acs.common.response.DeviceInformResponse;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069RequestProcessEngine;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Isolation;\r
+import org.springframework.transaction.annotation.Propagation;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component\r
+public class TR069DeviceEventHandlerImpl implements TR069DeviceEventHandler {\r
+\r
+  private static final String RETRY_LIMIT_REACHED_AND_FAILING_THE_DEVICE_UNREGISTER_REQUEST =\r
+      "Retry limit reached and failing the device unregister request";\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(TR069DeviceEventHandlerImpl.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private TR069RequestProcessEngine tr069RequestProcessEngine;\r
+\r
+  public TR069RequestProcessEngine getProcessEngine() {\r
+    return tr069RequestProcessEngine;\r
+  }\r
+\r
+  public void setProcessEngine(TR069RequestProcessEngine processEngine) {\r
+    this.tr069RequestProcessEngine = processEngine;\r
+  }\r
+\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public DeviceInformResponse processDeviceInform(final DeviceInform deviceNotification)\r
+      throws Exception {\r
+    DeviceInformResponse deviceNotificationResponse = null;\r
+    try {\r
+      String deviceId = deviceNotification.getDeviceDetails().getDeviceId();\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      deviceNotificationResponse =\r
+          processDeviceInformWithRetryOnConcurrentAccess(deviceNotification);\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+\r
+    return deviceNotificationResponse;\r
+  }\r
+\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public DeviceRPCRequest processDeviceRPCResponse(DeviceRPCResponse operationResult)\r
+      throws Exception {\r
+    DeviceRPCRequest deviceRPCRequest = null;\r
+    try {\r
+      String deviceId = operationResult.getDeviceDetails().getDeviceId();\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      deviceRPCRequest = processDeviceRPCResponseWithRetryOnConcurrentAccess(operationResult);\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public DeviceRPCRequest processEmptyDeviceRequest(TR069DeviceDetails deviceDetails)\r
+      throws Exception {\r
+    DeviceRPCRequest deviceRPCRequest = null;\r
+    try {\r
+      String deviceId = deviceDetails.getDeviceId();\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      deviceRPCRequest = processEmptyDeviceRequestWithRetryOnConcurrentAccess(deviceDetails);\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public DeviceOperationRequestDetails getOpRequestDetailsBySessionId(String sessionId)\r
+      throws SessionManagerException {\r
+    return tr069RequestProcessEngine.getOpRequestDetailsBySessionId(sessionId);\r
+  }\r
+\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public TR069DeviceDetails getDeviceDetails(String deviceId) throws DeviceOperationException {\r
+    return tr069RequestProcessEngine.getDeviceDetails(deviceId);\r
+  }\r
+\r
+  /**\r
+   * @param deviceNotification\r
+   * @return\r
+   * @throws InterruptedException\r
+   */\r
+  private DeviceInformResponse processDeviceInformWithRetryOnConcurrentAccess(\r
+      DeviceInform deviceNotification)\r
+      throws SessionConcurrentAccessException, InterruptedException {\r
+    logger.debug("Processing Device Inform Event");\r
+    DeviceInformResponse deviceNotificationResponse = null;\r
+    for (int i = 0; i < MAX_RETRY_LIMIT; i++) {\r
+      try {\r
+        deviceNotificationResponse =\r
+            tr069RequestProcessEngine.processDeviceInform(deviceNotification);\r
+        logger.debug("Successfully processed Device Inform Event");\r
+        break;\r
+      } catch (SessionConcurrentAccessException scae) {\r
+        if ((i + 1) == MAX_RETRY_LIMIT) {\r
+          logger.error(RETRY_LIMIT_REACHED_AND_FAILING_THE_DEVICE_UNREGISTER_REQUEST);\r
+          throw scae;\r
+        }\r
+        Long delay = (i == 0) ? DELAY : DELAY * i;\r
+        Thread.sleep(delay);\r
+      }\r
+    }\r
+    return deviceNotificationResponse;\r
+  }\r
+\r
+  /**\r
+   * @param operationResult\r
+   * @return\r
+   * @throws InterruptedException\r
+   * @throws Exception\r
+   */\r
+  private DeviceRPCRequest processDeviceRPCResponseWithRetryOnConcurrentAccess(\r
+      DeviceRPCResponse operationResult)\r
+      throws SessionConcurrentAccessException, InterruptedException {\r
+    DeviceRPCRequest deviceRPCRequest = null;\r
+    logger.debug("Processing Device operation response");\r
+    for (int i = 0; i < MAX_RETRY_LIMIT; i++) {\r
+      try {\r
+        deviceRPCRequest = tr069RequestProcessEngine.processDeviceRPCResponse(operationResult);\r
+        logger.debug("Successfully processed Device operation response");\r
+        break;\r
+      } catch (SessionConcurrentAccessException scae) {\r
+        if ((i + 1) == MAX_RETRY_LIMIT) {\r
+          logger.error(RETRY_LIMIT_REACHED_AND_FAILING_THE_DEVICE_UNREGISTER_REQUEST);\r
+          throw scae;\r
+        }\r
+        Long delay = (i == 0) ? DELAY : DELAY * i;\r
+        Thread.sleep(delay);\r
+      }\r
+    }\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  /**\r
+   * @param deviceDetails\r
+   * @return\r
+   * @throws InterruptedException\r
+   * @throws Exception\r
+   */\r
+  private DeviceRPCRequest processEmptyDeviceRequestWithRetryOnConcurrentAccess(\r
+      TR069DeviceDetails deviceDetails)\r
+      throws SessionConcurrentAccessException, InterruptedException {\r
+    DeviceRPCRequest deviceRPCRequest = null;\r
+    logger.debug("Processing Empty request");\r
+    for (int i = 0; i < MAX_RETRY_LIMIT; i++) {\r
+      try {\r
+        deviceRPCRequest = tr069RequestProcessEngine.processEmptyDeviceRequest(deviceDetails);\r
+        logger.debug("Successfully processed Empty request");\r
+        break;\r
+      } catch (SessionConcurrentAccessException scae) {\r
+        if ((i + 1) == MAX_RETRY_LIMIT) {\r
+          logger.error(RETRY_LIMIT_REACHED_AND_FAILING_THE_DEVICE_UNREGISTER_REQUEST);\r
+          throw scae;\r
+        }\r
+        Long delay = (i == 0) ? DELAY : DELAY * i;\r
+        Thread.sleep(delay);\r
+      }\r
+    }\r
+    return deviceRPCRequest;\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/CheckDeviceAvailability.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/CheckDeviceAvailability.java
new file mode 100644 (file)
index 0000000..231530a
--- /dev/null
@@ -0,0 +1,84 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.custom;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.CustomOperationData;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069RequestProcessEngine;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component("CheckDeviceAvailability")\r
+public class CheckDeviceAvailability implements CustomOperation {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(CheckDeviceAvailability.class);\r
+\r
+  @Autowired\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @Autowired\r
+  TR069RequestProcessEngine tr069RequestProcessEngine;\r
+\r
+  @Autowired\r
+  TR069EventNotificationService eventNotificationService;\r
+\r
+  @Override\r
+  public CustomOperationData executeCustomLogic(CustomOperationData customOperationData)\r
+      throws TR069EventProcessingException {\r
+\r
+    TR069DeviceDetails deviceDetails = customOperationData.getDeviceDetails();\r
+    DeviceRPCRequest deviceRPCRequest = customOperationData.getDeviceRPCRequest();\r
+\r
+    logger.debug("Started processing Check device availability");\r
+\r
+    DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();\r
+    OperationResponse operationResponse = new OperationResponse();\r
+    operationResponse.setOperationCode(TR069OperationCode.INITIATE_CR);\r
+    Long operationId = deviceRPCRequest.getOperationId();\r
+    deviceRPCResponse.setDeviceDetails(deviceDetails);\r
+    deviceRPCResponse.setOperationId(operationId);\r
+    deviceRPCResponse.setOperationResponse(operationResponse);\r
+\r
+    logger.debug("Marking as processed the corresponding NBI Operation request record");\r
+    deviceRPCRequestRepositoryHelper.markDeviceRPCRequestAsProcessed(deviceDetails.getDeviceId(),\r
+        operationId);\r
+\r
+    logger.debug("Sending the operation response for check device availability");\r
+    // Sending the operation response to NBI\r
+    eventNotificationService.sendOperationResultToNBI(deviceRPCResponse);\r
+    customOperationData.setDeviceRPCResponse(null);\r
+    customOperationData.setDeviceRPCRequest(null);\r
+\r
+    logger.debug("Stopping request timer if any running for operation ID : {}", operationId);\r
+    tr069RequestProcessEngine.stopDeviceRPCRequestTimer(deviceDetails.getDeviceId(),\r
+        deviceRPCRequest.getOperationId());\r
+    logger.debug("Finished processing Check device availability");\r
+    return customOperationData;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/ConfigureMultipleObject.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/ConfigureMultipleObject.java
new file mode 100644 (file)
index 0000000..5a125ce
--- /dev/null
@@ -0,0 +1,433 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.custom;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NUMBER_REGEX;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SUCCESS;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.response.AddObjectResponse;\r
+import org.commscope.tr069adapter.acs.common.response.DeleteObjectResponse;\r
+import org.commscope.tr069adapter.acs.common.response.GetParameterValueResponse;\r
+import org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.CustomOperationData;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069RequestProcessEngine;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.TR069RequestProcessorUtility;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component("ConfigureMultipleObject")\r
+public class ConfigureMultipleObject implements CustomOperation {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(ConfigureMultipleObject.class);\r
+\r
+  @Autowired\r
+  TR069RequestProcessEngine tr069ProcessEngine;\r
+\r
+  @Autowired\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  public CustomOperationData executeCustomLogic(CustomOperationData customOperationData)\r
+      throws TR069EventProcessingException {\r
+\r
+    TR069DeviceDetails deviceDetails = customOperationData.getDeviceDetails();\r
+    DeviceRPCResponse deviceRPCResponse = customOperationData.getDeviceRPCResponse();\r
+    DeviceRPCRequest nbiDeviceOperationRequest = customOperationData.getDeviceRPCRequest();\r
+\r
+    logger.debug("Started processing Configure multiple object");\r
+    DeviceRPCRequest operRequest = null;\r
+    Long responseOperationId = null;\r
+    if (deviceRPCResponse != null && deviceRPCResponse.getOperationId() != null) {\r
+      responseOperationId = deviceRPCResponse.getOperationId();\r
+      if (deviceRPCResponse.getFaultKey() != null && responseOperationId != null\r
+          && responseOperationId.equals(nbiDeviceOperationRequest.getOperationId())) {\r
+        logger.error("The Configure Multiple Object operation has failed, Reason: {}",\r
+            deviceRPCResponse.getFaultString());\r
+\r
+        logger.debug(\r
+            "Deleting the NBI operation request for custom operation configureMultipleObjects with operation ID: {}",\r
+            responseOperationId);\r
+        List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntityList =\r
+            deviceRPCRequestRepositoryHelper\r
+                .findByDeviceIdAndOperationId(deviceDetails.getDeviceId(), responseOperationId);\r
+        for (TR069DeviceRPCRequestEntity tr069DeviceRPCRequestEntity : tr069DeviceRPCRequestEntityList) {\r
+          tr069DeviceRPCRequestEntity.setIsProcessed(Integer.valueOf(1));\r
+        }\r
+        deviceRPCRequestRepositoryHelper.saveAll(tr069DeviceRPCRequestEntityList);\r
+\r
+        OperationResponse operationResponse = new GetParameterValueResponse();\r
+        operationResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        operationResponse.setStatus(1);\r
+        deviceRPCResponse.setOperationResponse(operationResponse);\r
+\r
+        customOperationData.setDeviceRPCResponse(deviceRPCResponse);\r
+        customOperationData.setDeviceRPCRequest(null);\r
+        logger.debug("Finished processing Configure multiple object");\r
+        return customOperationData;\r
+      }\r
+    }\r
+\r
+    TR069OperationDetails tr069OperationDetails =\r
+        (TR069OperationDetails) nbiDeviceOperationRequest.getOpDetails();\r
+    List<ParameterDTO> tr069deleteParamList = tr069OperationDetails.getDeleteParamList();\r
+    List<ParameterDTO> tr069modifyParamList = tr069OperationDetails.getModifyParamList();\r
+    List<ParameterDTO> tr069setParamList = tr069OperationDetails.getSetParamList();\r
+\r
+    OperationOrder nextOperation = null;\r
+    boolean isPendingOperationExists = true;\r
+    final String NXT_OPERATION = "Next operation to be executed is : ";\r
+\r
+    if ((responseOperationId == null) || (responseOperationId != null\r
+        && !responseOperationId.equals(nbiDeviceOperationRequest.getOperationId()))) {\r
+      // Must be called from Empty HTTP request, First operation to be called\r
+\r
+      // Must be called from a different user operation, First operation to be called\r
+      // if response operation id is different from current\r
+      // nbiDevOperRequest operation id then first step is deleteObject\r
+\r
+      nextOperation = OperationOrder.DELETE_OBJECT;\r
+      logger.debug(NXT_OPERATION, nextOperation);\r
+    } else {\r
+      // Since the responseOperation is not null and equivalent, find the\r
+      // response type and the take next action\r
+      OperationResponse opResponse = deviceRPCResponse.getOperationResponse();\r
+      if (opResponse instanceof DeleteObjectResponse) {\r
+        logger.debug("Received delete object response");\r
+        if (null != tr069deleteParamList && !tr069deleteParamList.isEmpty()) {\r
+          int i = 0;\r
+          for (ParameterDTO deleteParam : tr069deleteParamList) {\r
+            i++;\r
+            if (!deleteParam.isProcessed()) {\r
+              deleteParam.setProcessed(true);\r
+            } else {\r
+              continue;\r
+            }\r
+            logger.debug("Persisting the NBI request for deleteObject");\r
+            // Update the existing NBI request\r
+            List<TR069DeviceRPCRequestEntity> entityList =\r
+                deviceRPCRequestRepositoryHelper.findByDeviceIdAndOperationId(\r
+                    deviceDetails.getDeviceId(), nbiDeviceOperationRequest.getOperationId());\r
+            List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntityList =\r
+                TR069RequestProcessorUtility.convertToEntity(nbiDeviceOperationRequest);\r
+            for (int j = 0; j < entityList.size(); j++) {\r
+              tr069DeviceRPCRequestEntityList.get(j).setId(entityList.get(j).getId());\r
+            }\r
+            deviceRPCRequestRepositoryHelper.saveAll(tr069DeviceRPCRequestEntityList);\r
+\r
+            if (tr069deleteParamList.size() > i) {\r
+              nextOperation = OperationOrder.DELETE_OBJECT;\r
+              logger.debug(NXT_OPERATION, nextOperation);\r
+              break;\r
+            } else {\r
+              nextOperation = OperationOrder.ADD_OBJECT;\r
+              logger.debug(NXT_OPERATION, nextOperation);\r
+            }\r
+          }\r
+        } else {\r
+          nextOperation = OperationOrder.ADD_OBJECT;\r
+          logger.debug(NXT_OPERATION, nextOperation);\r
+        }\r
+      } else if (opResponse instanceof AddObjectResponse) {\r
+        logger.debug("Received Add object response");\r
+        if (null != tr069setParamList && !tr069setParamList.isEmpty()) {\r
+          long instanceNumber;\r
+          boolean addParamExist = false;\r
+          AddObjectResponse addObjResponse =\r
+              (AddObjectResponse) deviceRPCResponse.getOperationResponse();\r
+          List<ParameterDTO> modifyParamList = new ArrayList<>();\r
+          List<ParameterDTO> removeParamList = new ArrayList<>();\r
+          ParameterDTO addParam = null;\r
+\r
+          if (null != addObjResponse) {\r
+            instanceNumber = addObjResponse.getInstanceNumber();\r
+            String replaceIndex = null;\r
+            String replaceParam = null;\r
+\r
+            for (ParameterDTO setParam : tr069setParamList) {\r
+              if (!setParam.isProcessed()) {\r
+                String paramName = setParam.getParamName();\r
+                final Matcher matcher = Pattern.compile(NUMBER_REGEX).matcher(paramName);\r
+                String index = null;\r
+                String modifyParamName = null;\r
+                String subString = null;\r
+                while (matcher.find()) {\r
+                  index = matcher.group().substring(1, matcher.group().length() - 1);\r
+                  StringBuilder sb = new StringBuilder(paramName);\r
+                  int lastIndex = paramName.lastIndexOf(matcher.group());\r
+                  modifyParamName = (sb.replace(lastIndex, lastIndex + matcher.group().length(),\r
+                      "." + instanceNumber + ".")).toString();\r
+                  subString = paramName.substring(0, matcher.start()) + ".";\r
+                }\r
+                if (null == replaceIndex)\r
+                  replaceIndex = index;\r
+                if (null == replaceParam)\r
+                  replaceParam = subString;\r
+                if (null != replaceIndex && null != index && replaceIndex.equals(index)\r
+                    && replaceParam.equalsIgnoreCase(subString)) {\r
+                  setParam.setProcessed(true);\r
+                  modifyParamList.add(prepareParamDTO(modifyParamName, null, setParam));\r
+                  removeParamList.add(prepareParamDTO(null, null, setParam));\r
+                } else {\r
+                  addParamExist = true;\r
+                }\r
+                if (null == addParam) {\r
+                  logger.debug(\r
+                      "The device index chosen is {} for adding the NBI tab parameter with index {}",\r
+                      instanceNumber, replaceIndex);\r
+                  addParam = prepareParamDTO(subString + replaceIndex,\r
+                      String.valueOf(instanceNumber), setParam);\r
+                }\r
+              }\r
+            }\r
+          }\r
+          // Replace index with instance number and add in modify param list\r
+          if (!modifyParamList.isEmpty()) {\r
+            tr069modifyParamList.addAll(modifyParamList);\r
+          }\r
+          // Prepare add object param and add in set param list\r
+          if (null != addParam) {\r
+            addParam.setDataType("1");\r
+            tr069setParamList.add(addParam);\r
+          }\r
+          // Remove all processed set params from set param list\r
+          if (!removeParamList.isEmpty()) {\r
+            tr069setParamList.removeAll(removeParamList);\r
+          }\r
+\r
+          logger.debug("Persisting the NBI request for addObject");\r
+          List<TR069DeviceRPCRequestEntity> entityList =\r
+              deviceRPCRequestRepositoryHelper.findByDeviceIdAndOperationId(\r
+                  deviceDetails.getDeviceId(), nbiDeviceOperationRequest.getOperationId());\r
+          List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntityList =\r
+              TR069RequestProcessorUtility.convertToEntity(nbiDeviceOperationRequest);\r
+          for (int i = 0; i < entityList.size(); i++) {\r
+            tr069DeviceRPCRequestEntityList.get(i).setId(entityList.get(i).getId());\r
+          }\r
+          deviceRPCRequestRepositoryHelper.saveAll(tr069DeviceRPCRequestEntityList);\r
+\r
+          if (addParamExist) {\r
+            nextOperation = OperationOrder.ADD_OBJECT;\r
+            logger.debug(NXT_OPERATION, nextOperation);\r
+          } else {\r
+            nextOperation = OperationOrder.SET_PARAMETER_VALUE;\r
+            logger.debug(NXT_OPERATION, nextOperation);\r
+          }\r
+        } else {\r
+          nextOperation = OperationOrder.SET_PARAMETER_VALUE;\r
+          logger.debug(NXT_OPERATION, nextOperation);\r
+        }\r
+      } else if (opResponse instanceof SetParameterValueResponse) {\r
+        logger.debug("Received Set parameter value response");\r
+        isPendingOperationExists = false;\r
+      }\r
+    }\r
+\r
+    if (isPendingOperationExists) {\r
+      boolean checkForNextoperation = true;\r
+      while (checkForNextoperation) {\r
+        switch (nextOperation) {\r
+          case DELETE_OBJECT:\r
+            if (null != tr069deleteParamList && !tr069deleteParamList.isEmpty()) {\r
+              logger.debug("Started executing delete object request");\r
+              checkForNextoperation = false;\r
+              DeviceRPCRequest clonedOpRequest = cloneNBIRequest(nbiDeviceOperationRequest);\r
+              List<ParameterDTO> deleteParamList = new ArrayList<>();\r
+              // Just take the first not processed delete object from the list\r
+              for (ParameterDTO deleteParam : tr069deleteParamList) {\r
+                if (!deleteParam.isProcessed()) {\r
+                  deleteParamList.add(deleteParam);\r
+                  break;\r
+                }\r
+              }\r
+              clonedOpRequest.setOpDetails(null);\r
+              OperationDetails opDetails = new OperationDetails();\r
+              opDetails.setOpCode(TR069OperationCode.DELETE_OBJECT);\r
+              opDetails.setParmeters(deleteParamList);\r
+              clonedOpRequest.setOpDetails(opDetails);\r
+              operRequest = clonedOpRequest;\r
+            } else {\r
+              nextOperation = OperationOrder.ADD_OBJECT;\r
+              logger.debug(NXT_OPERATION, nextOperation);\r
+            }\r
+            break;\r
+          case ADD_OBJECT:\r
+            if (null != tr069setParamList && !tr069setParamList.isEmpty()) {\r
+              logger.debug("Started executing Add object request");\r
+              checkForNextoperation = false;\r
+              DeviceRPCRequest clonedOpRequest = cloneNBIRequest(nbiDeviceOperationRequest);\r
+              List<ParameterDTO> addParamList = new ArrayList<>();\r
+              // Just take the first not processed delete object from the list\r
+              for (ParameterDTO addParam : tr069setParamList) {\r
+                if (!addParam.isProcessed()) {\r
+                  String addParamMO = null;\r
+                  final Matcher matcher =\r
+                      Pattern.compile(NUMBER_REGEX).matcher(addParam.getParamName());\r
+                  while (matcher.find()) {\r
+                    addParamMO = addParam.getParamName().substring(0, matcher.start()) + ".";\r
+                  }\r
+                  if (null != addParamMO) {\r
+                    addParamList.add(prepareParamDTO(addParamMO, null, addParam));\r
+                  }\r
+                  break;\r
+                }\r
+              }\r
+              clonedOpRequest.setOpDetails(null);\r
+              OperationDetails opDetails = new OperationDetails();\r
+              opDetails.setOpCode(TR069OperationCode.ADD_OBJECT);\r
+              opDetails.setParmeters(addParamList);\r
+              clonedOpRequest.setOpDetails(opDetails);\r
+              operRequest = clonedOpRequest;\r
+            } else {\r
+              nextOperation = OperationOrder.SET_PARAMETER_VALUE;\r
+              logger.debug(NXT_OPERATION, nextOperation);\r
+            }\r
+            break;\r
+          case SET_PARAMETER_VALUE:\r
+            checkForNextoperation = false;\r
+            if (null != tr069modifyParamList && !tr069modifyParamList.isEmpty()) {\r
+              logger.debug("Started executing SPV request");\r
+              DeviceRPCRequest clonedOpRequest = cloneNBIRequest(nbiDeviceOperationRequest);\r
+              clonedOpRequest.setOpDetails(null);\r
+              OperationDetails opDetails = new OperationDetails();\r
+              opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
+              opDetails.setParmeters(tr069modifyParamList);\r
+              clonedOpRequest.setOpDetails(opDetails);\r
+              operRequest = clonedOpRequest;\r
+            } else {\r
+              isPendingOperationExists = false;\r
+              operRequest = null;\r
+            }\r
+            break;\r
+          default:\r
+            isPendingOperationExists = false;\r
+            operRequest = null;\r
+        }\r
+      }\r
+    }\r
+\r
+    if (!isPendingOperationExists) {\r
+      logger.debug(\r
+          "No pending operation exists, hence marking the operation as processed with id {} "\r
+              + "and sending GetParameterValueResponse for ConfigureMultipleObjects",\r
+          responseOperationId);\r
+      List<ParameterDTO> responseParamList = new ArrayList<>();\r
+\r
+      if (tr069deleteParamList != null) {\r
+        for (ParameterDTO delete : tr069deleteParamList) {\r
+          delete.setParamValue(SUCCESS);\r
+          delete.setDataType("2");\r
+          responseParamList.add(delete);\r
+        }\r
+      }\r
+\r
+      if (tr069modifyParamList != null) {\r
+        for (ParameterDTO modify : tr069modifyParamList) {\r
+          modify.setParamValue(SUCCESS);\r
+          modify.setDataType("4");\r
+          responseParamList.add(modify);\r
+        }\r
+      }\r
+\r
+      responseParamList.addAll(tr069setParamList);\r
+\r
+      OperationResponse operationResponse = new GetParameterValueResponse();\r
+      operationResponse.setParameterDTOs(responseParamList);\r
+      if (deviceRPCResponse != null) {\r
+        deviceRPCResponse.setDeviceDetails(deviceDetails);\r
+        deviceRPCResponse.setOperationResponse(operationResponse);\r
+        deviceRPCResponse.setOperationId(responseOperationId);\r
+      }\r
+\r
+      logger.debug(\r
+          "Prepared operation result for custom operation Configure Multiple Objects, hence marking as processed the corresponding NBI Operation request record");\r
+      deviceRPCRequestRepositoryHelper.markDeviceRPCRequestAsProcessed(deviceDetails.getDeviceId(),\r
+          responseOperationId);\r
+    }\r
+\r
+    customOperationData.setDeviceRPCResponse(deviceRPCResponse);\r
+    customOperationData.setDeviceRPCRequest(operRequest);\r
+    logger.debug("Finished processing Configure multiple object");\r
+    return customOperationData;\r
+  }\r
+\r
+  enum OperationOrder {\r
+\r
+    SET_PARAMETER_VALUE(null), ADD_OBJECT(SET_PARAMETER_VALUE), DELETE_OBJECT(ADD_OBJECT);\r
+\r
+    OperationOrder nextOperation;\r
+\r
+    OperationOrder(OperationOrder nextOperation) {\r
+      this.nextOperation = nextOperation;\r
+    }\r
+\r
+    public OperationOrder getNextOperation() {\r
+      return nextOperation;\r
+    }\r
+\r
+  }\r
+\r
+  private DeviceRPCRequest cloneNBIRequest(DeviceRPCRequest nbiDeviceOperationRequest)\r
+      throws TR069EventProcessingException {\r
+    DeviceRPCRequest clonedOpRequest = null;\r
+    try {\r
+      clonedOpRequest = (DeviceRPCRequest) nbiDeviceOperationRequest.clone();\r
+    } catch (CloneNotSupportedException e) {\r
+      throw new TR069EventProcessingException(ErrorCode.UNKNOWN_ERROR, e.getMessage());\r
+    }\r
+\r
+    return clonedOpRequest;\r
+  }\r
+\r
+  private ParameterDTO prepareParamDTO(String name, String value, ParameterDTO paramDTO) {\r
+    ParameterDTO parameterDTO = new ParameterDTO();\r
+    if (null != name) {\r
+      parameterDTO.setParamName(name);\r
+    } else {\r
+      parameterDTO.setParamName(paramDTO.getParamName());\r
+    }\r
+    if (null != value) {\r
+      parameterDTO.setParamValue(value);\r
+    } else {\r
+      parameterDTO.setParamValue(paramDTO.getParamValue());\r
+    }\r
+    parameterDTO.setDataType(paramDTO.getDataType());\r
+    parameterDTO.setProcessed(paramDTO.isProcessed());\r
+\r
+    return parameterDTO;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/CustomOperation.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/custom/CustomOperation.java
new file mode 100644 (file)
index 0000000..0078a3d
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.custom;\r
+\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.CustomOperationData;\r
+\r
+public interface CustomOperation {\r
+\r
+  /**\r
+   * Executes the custom logic\r
+   * \r
+   * @param customOperationData\r
+   * @return\r
+   * @throws Exception\r
+   */\r
+  public Object executeCustomLogic(CustomOperationData customOperationData)\r
+      throws TR069EventProcessingException;\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRPCRequestRepository.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRPCRequestRepository.java
new file mode 100644 (file)
index 0000000..6e9a3b4
--- /dev/null
@@ -0,0 +1,39 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dao;\r
+\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.springframework.data.repository.CrudRepository;\r
+import org.springframework.stereotype.Repository;\r
+\r
+@Repository\r
+public interface DeviceRPCRequestRepository\r
+    extends CrudRepository<TR069DeviceRPCRequestEntity, Long> {\r
+\r
+  public List<TR069DeviceRPCRequestEntity> findByDeviceId(String deviceId);\r
+\r
+  public List<TR069DeviceRPCRequestEntity> findByDeviceIdAndOperationId(String deviceId,\r
+      Long operationId);\r
+\r
+  public List<TR069DeviceRPCRequestEntity> findByDeviceIdAndIsProcessed(String deviceId,\r
+      Integer isProcessed);\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRPCRequestRepositoryHelper.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRPCRequestRepositoryHelper.java
new file mode 100644 (file)
index 0000000..079c029
--- /dev/null
@@ -0,0 +1,205 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dao;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.TR069RequestProcessorUtility;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class DeviceRPCRequestRepositoryHelper {\r
+\r
+  private static final Logger logger =\r
+      LoggerFactory.getLogger(DeviceRPCRequestRepositoryHelper.class);\r
+\r
+  @Autowired\r
+  protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
+\r
+  /**\r
+   * @param tr069DeviceRPCRequestEntities\r
+   */\r
+  public void saveAll(List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities) {\r
+    deviceRPCRequestRepository.saveAll(tr069DeviceRPCRequestEntities);\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   */\r
+  public List<TR069DeviceRPCRequestEntity> findByDeviceId(String deviceId) {\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =\r
+        deviceRPCRequestRepository.findByDeviceId(deviceId);\r
+    Collections.sort(deviceRPCRequestEntities, idComparator);\r
+    return deviceRPCRequestEntities;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   * @return\r
+   */\r
+  public List<TR069DeviceRPCRequestEntity> findByDeviceIdAndOperationId(String deviceId,\r
+      Long operationId) {\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =\r
+        deviceRPCRequestRepository.findByDeviceIdAndOperationId(deviceId, operationId);\r
+    Collections.sort(deviceRPCRequestEntities, idComparator);\r
+    return deviceRPCRequestEntities;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public List<DeviceRPCRequest> findAllDeviceRPCRequests(String deviceId) {\r
+    logger.debug("Retrieving all the pending Device RPC requests");\r
+    List<DeviceRPCRequest> deviceRPCRequestList = new ArrayList<>();\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =\r
+        deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(deviceId, 0);\r
+    if (deviceRPCRequestEntities == null) {\r
+      logger.debug("There exists no pending RPC requests for the device: {}", deviceId);\r
+      return deviceRPCRequestList;\r
+    }\r
+\r
+    logger.debug("Grouping the records based on operationId");\r
+    Map<Long, List<TR069DeviceRPCRequestEntity>> opIdEntityMap = new HashMap<>();\r
+    for (TR069DeviceRPCRequestEntity entity : deviceRPCRequestEntities) {\r
+      List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(entity.getOperationId());\r
+      if (entityList == null) {\r
+        entityList = new ArrayList<>();\r
+        opIdEntityMap.put(entity.getOperationId(), entityList);\r
+      }\r
+      entityList.add(entity);\r
+    }\r
+\r
+    logger.debug("There exists {} pending NBI requests for the device", opIdEntityMap.size());\r
+    Iterator<Long> opIdIterator = opIdEntityMap.keySet().iterator();\r
+    while (opIdIterator.hasNext()) {\r
+      Long operationId = opIdIterator.next();\r
+      List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(operationId);\r
+      Collections.sort(entityList, idComparator);\r
+      deviceRPCRequestList.add(TR069RequestProcessorUtility.convertToDTO(entityList));\r
+    }\r
+\r
+    return deviceRPCRequestList;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+\r
+  public DeviceRPCRequest findOldestDeviceRPCRequest(String deviceId) {\r
+    logger.debug("Retrieving the oldest pending Device RPC request");\r
+\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =\r
+        deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(deviceId, 0);\r
+    if (deviceRPCRequestEntities == null || deviceRPCRequestEntities.isEmpty()) {\r
+      logger.debug("There exists no pending Device RPC requests for the device: {}", deviceId);\r
+      return null;\r
+    }\r
+\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList =\r
+        getOldestDeviceRPCRequestList(deviceRPCRequestEntities);\r
+\r
+    if (deviceRPCRequestEntityList != null) {\r
+      Collections.sort(deviceRPCRequestEntityList, idComparator);\r
+      return TR069RequestProcessorUtility.convertToDTO(deviceRPCRequestEntityList);\r
+    } else {\r
+      logger.debug("Empty deviceRPCRequestEntityList");\r
+      return null;\r
+    }\r
+\r
+  }\r
+\r
+  private List<TR069DeviceRPCRequestEntity> getOldestDeviceRPCRequestList(\r
+      List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities) {\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList = null;\r
+\r
+    logger.debug("Grouping the records based on operationId");\r
+    Map<Long, List<TR069DeviceRPCRequestEntity>> opIdEntityMap = new HashMap<>();\r
+    for (TR069DeviceRPCRequestEntity entity : deviceRPCRequestEntities) {\r
+      List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(entity.getOperationId());\r
+      if (entityList == null) {\r
+        entityList = new ArrayList<>();\r
+        opIdEntityMap.put(entity.getOperationId(), entityList);\r
+      }\r
+      entityList.add(entity);\r
+    }\r
+\r
+    Iterator<Long> opIdIterator = opIdEntityMap.keySet().iterator();\r
+    while (opIdIterator.hasNext()) {\r
+      Long operationId = opIdIterator.next();\r
+      List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(operationId);\r
+      TR069DeviceRPCRequestEntity entity = entityList.get(0);\r
+      if (deviceRPCRequestEntityList == null) {\r
+        deviceRPCRequestEntityList = entityList;\r
+      } else {\r
+        if (entity.getCreateTime().before(deviceRPCRequestEntityList.get(0).getCreateTime()))\r
+          deviceRPCRequestEntityList = entityList;\r
+      }\r
+    }\r
+\r
+    return deviceRPCRequestEntityList;\r
+  }\r
+\r
+  /**\r
+   * @param operationId\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public void markDeviceRPCRequestAsProcessed(String deviceId, Long operationId)\r
+      throws TR069EventProcessingException {\r
+    logger.debug("Marking the Device RPC request for device: {} and operationId: {} as processed",\r
+        deviceId, operationId);\r
+    List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList =\r
+        deviceRPCRequestRepository.findByDeviceIdAndOperationId(deviceId, operationId);\r
+    if (deviceRPCRequestEntityList == null) {\r
+      TR069EventProcessingException ex =\r
+          new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);\r
+      logger.error(ex.getMessage());\r
+      throw ex;\r
+    }\r
+\r
+    for (TR069DeviceRPCRequestEntity deviceRPCRequestEntity : deviceRPCRequestEntityList) {\r
+      deviceRPCRequestEntity.setIsProcessed(Integer.valueOf(1));\r
+    }\r
+    deviceRPCRequestRepository.saveAll(deviceRPCRequestEntityList);\r
+  }\r
+\r
+\r
+  public static final Comparator<TR069DeviceRPCRequestEntity> idComparator =\r
+      (TR069DeviceRPCRequestEntity e1, TR069DeviceRPCRequestEntity e2) -> e1.getId()\r
+          .compareTo(e2.getId());\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRepository.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/DeviceRepository.java
new file mode 100644 (file)
index 0000000..6899157
--- /dev/null
@@ -0,0 +1,29 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dao;\r
+\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceEntity;\r
+import org.springframework.data.repository.CrudRepository;\r
+import org.springframework.stereotype.Repository;\r
+\r
+@Repository\r
+public interface DeviceRepository extends CrudRepository<TR069DeviceEntity, Long> {\r
+\r
+  public TR069DeviceEntity findByDeviceId(String deviceId);\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/SessionRepository.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dao/SessionRepository.java
new file mode 100644 (file)
index 0000000..c375eee
--- /dev/null
@@ -0,0 +1,35 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dao;\r
+\r
+import javax.persistence.LockModeType;\r
+\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.SessionManagerEntity;\r
+import org.springframework.data.jpa.repository.Lock;\r
+import org.springframework.data.repository.CrudRepository;\r
+import org.springframework.stereotype.Repository;\r
+\r
+@Repository\r
+public interface SessionRepository extends CrudRepository<SessionManagerEntity, String> {\r
+\r
+  @Lock(LockModeType.PESSIMISTIC_READ)\r
+  public SessionManagerEntity findByDeviceId(String deviceId);\r
+\r
+  public SessionManagerEntity findBySessionId(String sessionId);\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/CustomOperationData.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/CustomOperationData.java
new file mode 100644 (file)
index 0000000..f20167d
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dto;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+\r
+public class CustomOperationData implements Serializable {\r
+\r
+  private static final long serialVersionUID = 4784758072507503641L;\r
+\r
+  private TR069DeviceDetails deviceDetails;\r
+  private DeviceRPCResponse deviceRPCResponse;\r
+  private DeviceRPCRequest deviceRPCRequest;\r
+\r
+  public CustomOperationData(TR069DeviceDetails deviceDetails, DeviceRPCResponse deviceRPCResponse,\r
+      DeviceRPCRequest deviceRPCRequest) {\r
+    this.deviceDetails = deviceDetails;\r
+    this.deviceRPCResponse = deviceRPCResponse;\r
+    this.deviceRPCRequest = deviceRPCRequest;\r
+  }\r
+\r
+  public TR069DeviceDetails getDeviceDetails() {\r
+    return deviceDetails;\r
+  }\r
+\r
+  public void setDeviceDetails(TR069DeviceDetails deviceDetails) {\r
+    this.deviceDetails = deviceDetails;\r
+  }\r
+\r
+  public DeviceRPCResponse getDeviceRPCResponse() {\r
+    return deviceRPCResponse;\r
+  }\r
+\r
+  public void setDeviceRPCResponse(DeviceRPCResponse deviceRPCResponse) {\r
+    this.deviceRPCResponse = deviceRPCResponse;\r
+  }\r
+\r
+  public DeviceRPCRequest getDeviceRPCRequest() {\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  public void setDeviceRPCRequest(DeviceRPCRequest deviceRPCRequest) {\r
+    this.deviceRPCRequest = deviceRPCRequest;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/SessionDTO.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/SessionDTO.java
new file mode 100644 (file)
index 0000000..a853b7c
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dto;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+public class SessionDTO implements Serializable {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  private String deviceId;\r
+\r
+  private String sessionId;\r
+\r
+  private Long currentOperationId;\r
+\r
+  private SessionState sessionState;\r
+\r
+  private Date sessionStartTime;\r
+\r
+  /**\r
+   * \r
+   */\r
+  public SessionDTO() {}\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param sessionId\r
+   * @param currentOperationId\r
+   */\r
+  public SessionDTO(String deviceId, String sessionId, Long currentOperationId) {\r
+    this.deviceId = deviceId;\r
+    this.sessionId = sessionId;\r
+    this.currentOperationId = currentOperationId;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public String getSessionId() {\r
+    return sessionId;\r
+  }\r
+\r
+  public void setSessionId(String sessionId) {\r
+    this.sessionId = sessionId;\r
+  }\r
+\r
+  public Long getCurrentOperationId() {\r
+    return currentOperationId;\r
+  }\r
+\r
+  public void setCurrentOperationId(Long currentOperationId) {\r
+    this.currentOperationId = currentOperationId;\r
+  }\r
+\r
+  public SessionState getSessionState() {\r
+    return sessionState;\r
+  }\r
+\r
+  public void setSessionState(SessionState sessionState) {\r
+    this.sessionState = sessionState;\r
+  }\r
+\r
+  public Date getSessionStartTime() {\r
+    return sessionStartTime;\r
+  }\r
+\r
+  public void setSessionStartTime(Date sessionStartTime) {\r
+    this.sessionStartTime = sessionStartTime;\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/SessionState.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/SessionState.java
new file mode 100644 (file)
index 0000000..50cb777
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dto;\r
+\r
+import java.util.EnumSet;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+public enum SessionState {\r
+\r
+  READY(0), PROCESSING(1), LOCKED(2), TERMINATED(3);\r
+\r
+  private Integer value;\r
+\r
+  private SessionState(Integer operationCode) {\r
+    this.value = operationCode;\r
+  }\r
+\r
+  // Lookup tables\r
+  private static final Map<Integer, SessionState> reverselookup = new HashMap<>();\r
+\r
+  // Populate the lookup tables on loading time\r
+  static {\r
+    for (SessionState state : EnumSet.allOf(SessionState.class)) {\r
+      reverselookup.put(state.getValue(), state);\r
+    }\r
+  }\r
+\r
+  public static SessionState getByValue(Integer value) {\r
+    return reverselookup.get(value);\r
+  }\r
+\r
+  public Integer getValue() {\r
+    return value;\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/TR069RequestProcessorData.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/dto/TR069RequestProcessorData.java
new file mode 100644 (file)
index 0000000..4c8dfb2
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.dto;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+\r
+public class TR069RequestProcessorData implements Serializable {\r
+\r
+  private static final long serialVersionUID = -1935518456423720284L;\r
+\r
+  private SessionDTO sessionDTO;\r
+\r
+  private TR069DeviceDetails tr069DeviceDetails;\r
+\r
+  public SessionDTO getSessionDTO() {\r
+    return sessionDTO;\r
+  }\r
+\r
+  public void setSessionDTO(SessionDTO sessionDTO) {\r
+    this.sessionDTO = sessionDTO;\r
+  }\r
+\r
+  public TR069DeviceDetails getTr069DeviceDetails() {\r
+    return tr069DeviceDetails;\r
+  }\r
+\r
+  public void setTr069DeviceDetails(TR069DeviceDetails tr069DeviceDetails) {\r
+    this.tr069DeviceDetails = tr069DeviceDetails;\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/SessionManagerEntity.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/SessionManagerEntity.java
new file mode 100644 (file)
index 0000000..c6a5e92
--- /dev/null
@@ -0,0 +1,91 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.entity;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+import javax.persistence.Column;\r
+import javax.persistence.Entity;\r
+import javax.persistence.Id;\r
+import javax.persistence.Table;\r
+import javax.persistence.UniqueConstraint;\r
+\r
+@Entity\r
+@Table(name = "TR069_SESSION", uniqueConstraints = @UniqueConstraint(columnNames = {"DEVICE_ID"}))\r
+public class SessionManagerEntity implements Serializable {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  @Id\r
+  @Column(name = "DEVICE_ID", length = 30)\r
+  private String deviceId;\r
+\r
+  @Column(name = "SESSION_ID", length = 64)\r
+  private String sessionId;\r
+\r
+  @Column(name = "CURRENT_OPERATION_ID", length = 30)\r
+  private Long currentOperationId;\r
+\r
+  @Column(name = "STATE", length = 2)\r
+  private Integer state;\r
+\r
+  @Column(name = "SESSION_START_TIME")\r
+  private Date sessionStartTime;\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public String getSessionId() {\r
+    return sessionId;\r
+  }\r
+\r
+  public void setSessionId(String sessionId) {\r
+    this.sessionId = sessionId;\r
+  }\r
+\r
+  public Long getCurrentOperationId() {\r
+    return currentOperationId;\r
+  }\r
+\r
+  public void setCurrentOperationId(Long currentOperationId) {\r
+    this.currentOperationId = currentOperationId;\r
+  }\r
+\r
+  public Integer getState() {\r
+    return state;\r
+  }\r
+\r
+  public void setState(Integer state) {\r
+    this.state = state;\r
+  }\r
+\r
+  public Date getSessionStartTime() {\r
+    return sessionStartTime;\r
+  }\r
+\r
+  public void setSessionStartTime(Date sessionStartTime) {\r
+    this.sessionStartTime = sessionStartTime;\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/TR069DeviceEntity.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/TR069DeviceEntity.java
new file mode 100644 (file)
index 0000000..2193f5a
--- /dev/null
@@ -0,0 +1,136 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.entity;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+import javax.persistence.Column;\r
+import javax.persistence.Entity;\r
+import javax.persistence.GeneratedValue;\r
+import javax.persistence.GenerationType;\r
+import javax.persistence.Id;\r
+import javax.persistence.Table;\r
+import javax.persistence.UniqueConstraint;\r
+\r
+/**\r
+ * The persistent class for the TR069_DEVICE_ database table.\r
+ * \r
+ */\r
+@Entity\r
+@Table(name = "TR069_DEVICE", uniqueConstraints = @UniqueConstraint(columnNames = {"DEVICE_ID"}))\r
+public class TR069DeviceEntity implements Serializable {\r
+\r
+  private static final long serialVersionUID = -2696584252283707720L;\r
+\r
+  @Id\r
+  @GeneratedValue(strategy = GenerationType.AUTO)\r
+  @Column(name = "ID")\r
+  private Long id;\r
+\r
+  @Column(name = "DEVICE_ID", length = 30)\r
+  private String deviceId;\r
+\r
+  @Column(name = "USER_NAME", length = 256)\r
+  private String userName;\r
+\r
+  @Column(name = "PASSWORD", length = 256)\r
+  private String password;\r
+\r
+  @Column(name = "HW_VERSION", length = 20)\r
+  private String hwVersion;\r
+\r
+  @Column(name = "SW_VERSION", length = 20)\r
+  private String swVersion;\r
+\r
+  @Column(name = "CONNECTION_REQUEST_URL", length = 1024)\r
+  private String connectionReqURL;\r
+\r
+  @Column(name = "LAST_UPDATED_TIME")\r
+  private Date lastUpdatedTime;\r
+\r
+  public TR069DeviceEntity() {\r
+    super();\r
+  }\r
+\r
+  public Long getId() {\r
+    return id;\r
+  }\r
+\r
+  public void setId(Long id) {\r
+    this.id = id;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceID) {\r
+    this.deviceId = deviceID;\r
+  }\r
+\r
+  public String getUserName() {\r
+    return userName;\r
+  }\r
+\r
+  public void setUserName(String userName) {\r
+    this.userName = userName;\r
+  }\r
+\r
+  public String getPassword() {\r
+    return password;\r
+  }\r
+\r
+  public void setPassword(String password) {\r
+    this.password = password;\r
+  }\r
+\r
+  public String getHwVersion() {\r
+    return hwVersion;\r
+  }\r
+\r
+  public void setHwVersion(String hwVersion) {\r
+    this.hwVersion = hwVersion;\r
+  }\r
+\r
+  public String getSwVersion() {\r
+    return swVersion;\r
+  }\r
+\r
+  public void setSwVersion(String swVersion) {\r
+    this.swVersion = swVersion;\r
+  }\r
+\r
+  public String getConnectionReqURL() {\r
+    return connectionReqURL;\r
+  }\r
+\r
+  public void setConnectionReqURL(String connectionReqURL) {\r
+    this.connectionReqURL = connectionReqURL;\r
+  }\r
+\r
+  public Date getLastUpdatedTime() {\r
+    return lastUpdatedTime;\r
+  }\r
+\r
+  public void setLastUpdatedTime(Date rowUpdatedTime) {\r
+    this.lastUpdatedTime = rowUpdatedTime;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/TR069DeviceRPCRequestEntity.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/entity/TR069DeviceRPCRequestEntity.java
new file mode 100644 (file)
index 0000000..e588a17
--- /dev/null
@@ -0,0 +1,148 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.entity;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+import javax.persistence.Column;\r
+import javax.persistence.Entity;\r
+import javax.persistence.GeneratedValue;\r
+import javax.persistence.GenerationType;\r
+import javax.persistence.Id;\r
+import javax.persistence.Table;\r
+\r
+@Entity\r
+@Table(name = "TR069_NBI_REQUEST")\r
+public class TR069DeviceRPCRequestEntity implements Serializable {\r
+\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  @Id\r
+  @GeneratedValue(strategy = GenerationType.AUTO)\r
+  private Long id;\r
+\r
+  @Column(name = "DEVICE_ID", length = 30)\r
+  private String deviceId;\r
+\r
+  @Column(name = "OPERATION_ID", length = 30)\r
+  private Long operationId;\r
+\r
+  @Column(name = "OPERATION_CODE", length = 3)\r
+  private Integer opCode;\r
+\r
+  @Column(name = "ATTRIBUTE_JSON1", length = 4000)\r
+  private String attributeJson1;\r
+\r
+  @Column(name = "ATTRIBUTE_JSON2", length = 4000)\r
+  private String attributeJson2;\r
+\r
+  @Column(name = "ATTRIBUTE_JSON3", length = 4000)\r
+  private String attributeJson3;\r
+\r
+  @Column(name = "REQUEST_TIME_OUT", length = 5)\r
+  private Long requestTimeOut;\r
+\r
+  @Column(name = "CREATE_TIME")\r
+  private Date createTime;\r
+\r
+  @Column(name = "IS_PROCESSED", length = 2)\r
+  private Integer isProcessed;\r
+\r
+  public Long getId() {\r
+    return id;\r
+  }\r
+\r
+  public void setId(Long id) {\r
+    this.id = id;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public Long getOperationId() {\r
+    return operationId;\r
+  }\r
+\r
+  public void setOperationId(Long operationId) {\r
+    this.operationId = operationId;\r
+  }\r
+\r
+  public Integer getOpCode() {\r
+    return opCode;\r
+  }\r
+\r
+  public void setOpCode(Integer opCode) {\r
+    this.opCode = opCode;\r
+  }\r
+\r
+  public String getAttributeJson1() {\r
+    return attributeJson1;\r
+  }\r
+\r
+  public void setAttributeJson1(String attributeJson1) {\r
+    this.attributeJson1 = attributeJson1;\r
+  }\r
+\r
+  public String getAttributeJson2() {\r
+    return attributeJson2;\r
+  }\r
+\r
+  public void setAttributeJson2(String attributeJson2) {\r
+    this.attributeJson2 = attributeJson2;\r
+  }\r
+\r
+  public String getAttributeJson3() {\r
+    return attributeJson3;\r
+  }\r
+\r
+  public void setAttributeJson3(String attributeJson3) {\r
+    this.attributeJson3 = attributeJson3;\r
+  }\r
+\r
+  public Long getRequestTimeOut() {\r
+    return requestTimeOut;\r
+  }\r
+\r
+  public void setRequestTimeOut(Long requestTimeOut) {\r
+    this.requestTimeOut = requestTimeOut;\r
+  }\r
+\r
+  public Date getCreateTime() {\r
+    return createTime;\r
+  }\r
+\r
+  public void setCreateTime(Date createTime) {\r
+    this.createTime = createTime;\r
+  }\r
+\r
+  public Integer getIsProcessed() {\r
+    return isProcessed;\r
+  }\r
+\r
+  public void setIsProcessed(Integer isProcessed) {\r
+    this.isProcessed = isProcessed;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/handler/DeviceRPCRequestHandler.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/handler/DeviceRPCRequestHandler.java
new file mode 100644 (file)
index 0000000..e42ec6f
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.handler;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.TR069_NBI_REQUEST_CF;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.TR069_NBI_REQUEST_Q;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionConcurrentAccessException;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069RequestProcessEngine;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.jms.annotation.JmsListener;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component\r
+public class DeviceRPCRequestHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceRPCRequestHandler.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private TR069RequestProcessEngine tr069RequestProcessEngine;\r
+\r
+  @JmsListener(destination = TR069_NBI_REQUEST_Q, containerFactory = TR069_NBI_REQUEST_CF)\r
+  @Transactional(rollbackFor = Exception.class)\r
+  public void onMessage(DeviceRPCRequest mapperDeviceOperationRequest)\r
+      throws SessionConcurrentAccessException {\r
+    logger.debug("Received a JMS message from Mapper for TR069 Device RPC operation");\r
+    try {\r
+      if (mapperDeviceOperationRequest != null) {\r
+        MDC.put(CLIENT_STR, mapperDeviceOperationRequest.getDeviceDetails().getDeviceId());\r
+        logger.debug("Received a TR069 operation request from Mapper with operation ID: {} ",\r
+            mapperDeviceOperationRequest.getOperationId());\r
+        tr069RequestProcessEngine.processDeviceRPCRequest(mapperDeviceOperationRequest);\r
+      }\r
+    } catch (TR069EventProcessingException ex) {\r
+      logger.error(ex.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/helper/TR069RequestProcessEngineHelper.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/helper/TR069RequestProcessEngineHelper.java
new file mode 100644 (file)
index 0000000..b2f78c9
--- /dev/null
@@ -0,0 +1,404 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.helper;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_REQ_Q;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RESPONSE_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SEPERATOR;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SESSION_TIMEOUT_CALLBACK_JNDI;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.WAITING_FOR_DEVICE_RESPONSE;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.WAITING_FOR_NBI_RESPONSE;\r
+\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionConcurrentAccessException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.custom.CustomOperation;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.CustomOperationData;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.TR069RequestProcessorData;\r
+import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.TR069RequestProcessorCacheUtil;\r
+import org.commscope.tr069adapter.common.timer.TimerException;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.jms.core.JmsTemplate;\r
+\r
+public class TR069RequestProcessEngineHelper {\r
+\r
+  private static final Logger logger =\r
+      LoggerFactory.getLogger(TR069RequestProcessEngineHelper.class);\r
+\r
+  @Autowired\r
+  private ApplicationContext context;\r
+\r
+  @Autowired\r
+  private SessionManager sessionManager;\r
+\r
+  @Autowired\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  TR069RequestProcessorCacheUtil requestCacheUtil;\r
+\r
+  @Autowired\r
+  protected TR069RequestProcessEngineUtility tr069RequestProcessEngineUtility;\r
+\r
+  @Autowired\r
+  private JmsTemplate jmsTemplate;\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  protected SessionDTO getSession(String deviceId) {\r
+    logger.debug("Getting the existing Session Object for the device");\r
+    return sessionManager.getSession(deviceId);\r
+  }\r
+\r
+  /**\r
+   * @param sessionId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public SessionDTO getSessionBySessionId(String sessionId) throws SessionManagerException {\r
+    return sessionManager.getSessionBySessionId(sessionId);\r
+  }\r
+\r
+  /**\r
+   * @param deviceDetails\r
+   * @param session\r
+   */\r
+  protected void initThreadLocalCache(DeviceDetails deviceDetails, SessionDTO session) {\r
+    TR069RequestProcessorData tr069RequestProcessorData = new TR069RequestProcessorData();\r
+    tr069RequestProcessorData.setTr069DeviceDetails((TR069DeviceDetails) deviceDetails);\r
+    tr069RequestProcessorData.setSessionDTO(session);\r
+\r
+    requestCacheUtil.put(tr069RequestProcessorData);\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  protected TR069RequestProcessorData getTR069RequestProcessorData() {\r
+    return requestCacheUtil.get();\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  protected String getUniqueSessionIdentifier() {\r
+    return sessionManager.generateUniqueSessionID();\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param notificationType\r
+   * @return\r
+   * @throws SessionConcurrentAccessException\r
+   * @throws DeviceOperationException\r
+   */\r
+  protected SessionDTO acquireSessionLock(String deviceId, TR069InformType notificationType,\r
+      boolean generateNewSessionId)\r
+      throws SessionConcurrentAccessException, DeviceOperationException {\r
+    logger.debug("Acquiring the session lock for the device");\r
+    SessionDTO session = null;\r
+\r
+    String sessionID = null;\r
+    session = sessionManager.getLockedSession(deviceId);\r
+\r
+    if (session == null && TR069InformType.BOOTSTRAP.equals(notificationType)) {\r
+      logger.info(\r
+          "Device is contacting ACS for the first time, creating the new session ID for the device");\r
+      sessionID = getUniqueSessionIdentifier();\r
+      session = new SessionDTO(deviceId, sessionID, null);\r
+      session.setSessionStartTime(new Date());\r
+      try {\r
+        sessionManager.createSession(session);\r
+        generateNewSessionId = false;\r
+      } catch (Exception ex) {\r
+        SessionConcurrentAccessException scae =\r
+            new SessionConcurrentAccessException(ErrorCode.SESSION_ALREADY_LOCKED, ex.getMessage());\r
+        logger.error(scae.getMessage());\r
+        throw scae;\r
+      }\r
+\r
+      session = sessionManager.getLockedSession(deviceId);\r
+    } else if (session == null) {\r
+      DeviceOperationException doe = new DeviceOperationException(ErrorCode.DEVICE_NOT_ACTIVATED);\r
+      logger.error(doe.getMessage());\r
+      throw doe;\r
+    }\r
+\r
+    if (generateNewSessionId) {\r
+      sessionID = getUniqueSessionIdentifier();\r
+      session.setSessionId(sessionID);\r
+    }\r
+\r
+    return session;\r
+  }\r
+\r
+  /**\r
+   * @param session\r
+   * @throws SessionManagerException\r
+   */\r
+  protected void updateSession(SessionDTO session) {\r
+    logger.debug("Updating the session");\r
+    sessionManager.updateSession(session);\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @throws SessionConcurrentAccessException\r
+   */\r
+  protected void deleteSession(String deviceId) {\r
+    sessionManager.deleteSession(deviceId);\r
+  }\r
+\r
+  /**\r
+   * Utility method to post the connection request initiation asynchronously on the device\r
+   * \r
+   * @param tr069DeviceDetails\r
+   */\r
+  protected void requestForConnectionRequestInform(TR069DeviceDetails tr069DeviceDetails) {\r
+    logger.info("Initiating Connection request on device: {}", tr069DeviceDetails.getDeviceId());\r
+    try {\r
+      jmsTemplate.convertAndSend(CR_REQ_Q, tr069DeviceDetails);\r
+    } catch (Exception e) {\r
+      logger.error("Connection request initiation failed, Reason: {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param tr069RequestProcessorData\r
+   * @param sessionID\r
+   */\r
+  protected void updateSessionOnDeviceNotification(\r
+      TR069RequestProcessorData tr069RequestProcessorData, String sessionID) {\r
+    SessionDTO session = tr069RequestProcessorData.getSessionDTO();\r
+    session.setSessionId(sessionID);\r
+    session.setSessionStartTime(new Date());\r
+    session.setCurrentOperationId(null);\r
+    session.setSessionState(SessionState.PROCESSING);\r
+  }\r
+\r
+  /**\r
+   * @param tr069RequestProcessorData\r
+   * @param sessionState\r
+   */\r
+  protected void changeSessionState(TR069RequestProcessorData tr069RequestProcessorData,\r
+      SessionState sessionState) {\r
+    SessionDTO session = tr069RequestProcessorData.getSessionDTO();\r
+    String oldSessionState =\r
+        (session.getSessionState() != null) ? session.getSessionState().name() : null;\r
+    String newSessionState = sessionState.name();\r
+    logger.debug("Changing the session state from {} to {}", oldSessionState, newSessionState);\r
+    session.setSessionState(sessionState);\r
+  }\r
+\r
+  /**\r
+   * @param tr069RequestProcessorData\r
+   * @param operationId\r
+   */\r
+  protected void updateSessionCurOpId(TR069RequestProcessorData tr069RequestProcessorData,\r
+      Long operationId) {\r
+    SessionDTO session = tr069RequestProcessorData.getSessionDTO();\r
+    session.setCurrentOperationId(operationId);\r
+  }\r
+\r
+  /**\r
+   * @param tr069RequestProcessorData\r
+   * @param deviceNotification\r
+   * @return\r
+   */\r
+  protected Boolean isDeviceUpdateExists(TR069RequestProcessorData tr069RequestProcessorData,\r
+      DeviceInform deviceNotification) {\r
+    Boolean isDeviceDataUpdated = false;\r
+    TR069DeviceDetails persistedDeviceDetails = tr069RequestProcessorData.getTr069DeviceDetails();\r
+    TR069DeviceDetails notificationDeviceDetails =\r
+        (TR069DeviceDetails) deviceNotification.getDeviceDetails();\r
+\r
+    if (notificationDeviceDetails.getConnectionRequestURL() == null\r
+        || notificationDeviceDetails.getSoftwareVersion() == null\r
+        || notificationDeviceDetails.getHardwareVersion() == null) {\r
+      isDeviceDataUpdated = true;\r
+      logger.warn(\r
+          "Notification do not contains either connection request URL or swVer or hwVer of the device");\r
+      return isDeviceDataUpdated;\r
+    }\r
+\r
+    if (!notificationDeviceDetails.getConnectionRequestURL()\r
+        .equals(persistedDeviceDetails.getConnectionRequestURL())\r
+        || !notificationDeviceDetails.getSoftwareVersion()\r
+            .equals(persistedDeviceDetails.getSoftwareVersion())\r
+        || !notificationDeviceDetails.getHardwareVersion()\r
+            .equals(persistedDeviceDetails.getHardwareVersion())) {\r
+      logger.debug("Device details are changed");\r
+      isDeviceDataUpdated = true;\r
+    }\r
+    return isDeviceDataUpdated;\r
+  }\r
+\r
+  protected void updateDeviceDetails(TR069RequestProcessorData tr069RequestProcessorData,\r
+      DeviceInform deviceNotification) {\r
+    TR069DeviceDetails persistedDeviceDetails = tr069RequestProcessorData.getTr069DeviceDetails();\r
+    TR069DeviceDetails notificationDeviceDetails =\r
+        (TR069DeviceDetails) deviceNotification.getDeviceDetails();\r
+\r
+    persistedDeviceDetails\r
+        .setConnectionRequestURL(notificationDeviceDetails.getConnectionRequestURL());\r
+    persistedDeviceDetails.setSoftwareVersion(notificationDeviceDetails.getSoftwareVersion());\r
+    persistedDeviceDetails.setHardwareVersion(notificationDeviceDetails.getHardwareVersion());\r
+  }\r
+\r
+  /**\r
+   * @param customClassJNDI\r
+   * @param customOperationData\r
+   * @return\r
+   */\r
+  public CustomOperationData executeCustomOperation(String customClassJNDI,\r
+      CustomOperationData customOperationData) {\r
+    try {\r
+      logger.debug("Executing the custom logic implemented for JNDI: {}", customClassJNDI);\r
+      CustomOperation customOperation = (CustomOperation) context.getBean(customClassJNDI);\r
+      customOperationData =\r
+          (CustomOperationData) customOperation.executeCustomLogic(customOperationData);\r
+    } catch (Exception e) {\r
+      logger.error("Custom operation execution failed, Reason: {}", e.getMessage());\r
+    }\r
+    return customOperationData;\r
+  }\r
+\r
+  /**\r
+   * returns the operation code for Custom function execution\r
+   * \r
+   * @param operationDetails\r
+   * @return\r
+   */\r
+  protected TR069OperationCode getCustomOperationCode(TR069OperationDetails operationDetails) {\r
+    List<ParameterDTO> deleteList = operationDetails.getDeleteParamList();\r
+    List<ParameterDTO> setList = operationDetails.getSetParamList();\r
+    List<ParameterDTO> modifyList = operationDetails.getModifyParamList();\r
+\r
+    for (ParameterDTO param : deleteList) {\r
+      if (!param.isProcessed())\r
+        return TR069OperationCode.DELETE_OBJECT;\r
+    }\r
+\r
+    for (ParameterDTO param : setList) {\r
+      if (!param.isProcessed())\r
+        return TR069OperationCode.ADD_OBJECT;\r
+    }\r
+\r
+    for (ParameterDTO param : modifyList) {\r
+      if (!param.isProcessed())\r
+        return TR069OperationCode.SET_PARAMETER_VALUES;\r
+    }\r
+\r
+    return TR069OperationCode.SET_PARAMETER_VALUES;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   * @param timeout\r
+   */\r
+  protected void startDeviceRPCRequestTimer(String deviceId, Long operationId, Long timeout) {\r
+    String timerId = deviceId + SEPERATOR + operationId;\r
+    if (null == timeout || timeout == 0L) {\r
+      timeout = DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;\r
+    }\r
+\r
+    try {\r
+      timerServiceManagerAPI.startTimer(timerId, SESSION_TIMEOUT_CALLBACK_JNDI, (timeout * 1000),\r
+          WAITING_FOR_NBI_RESPONSE);\r
+      logger.debug(\r
+          "Successfully started the timer task for Device RPC request with operation ID : {}",\r
+          operationId);\r
+    } catch (TimerException e) {\r
+      logger.error("Couldn't start the timer task for Device RPC Request with operation ID : {}",\r
+          operationId);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   */\r
+  public void stopDeviceRPCRequestTimer(String deviceId, Long operationId) {\r
+    String timerId = deviceId + SEPERATOR + operationId;\r
+    try {\r
+      timerServiceManagerAPI.stopTimer(timerId);\r
+      logger.debug(\r
+          "Successfully stopped the timer task for Device RPC request with operation ID : {}",\r
+          operationId);\r
+    } catch (TimerException e) {\r
+      logger.error("Couldn't stop the timer task for Device RPC Request with operation ID : {}",\r
+          operationId);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   * @param timeout\r
+   */\r
+  protected void startSessionTimer(String sessionId) {\r
+    try {\r
+      timerServiceManagerAPI.startTimer(sessionId, SESSION_TIMEOUT_CALLBACK_JNDI,\r
+          DEVICE_RESPONSE_TIMEOUT, WAITING_FOR_DEVICE_RESPONSE);\r
+      logger.debug("Successfully started the timer task for Device request with session ID : {}",\r
+          sessionId);\r
+    } catch (TimerException e) {\r
+      logger.error("Couldn't start the timer task for Device Request with session ID : {}",\r
+          sessionId);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   */\r
+  protected void stopSessionTimer(String sessionId) {\r
+    try {\r
+      timerServiceManagerAPI.stopTimer(sessionId);\r
+      logger.debug("Successfully stopped the timer task for Device request with session ID : {}",\r
+          sessionId);\r
+    } catch (TimerException e) {\r
+      logger.error("Couldn't stop the timer task for Device Request with session ID : {}",\r
+          sessionId);\r
+    }\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/helper/TR069RequestProcessEngineUtility.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/helper/TR069RequestProcessEngineUtility.java
new file mode 100644 (file)
index 0000000..9cc7b54
--- /dev/null
@@ -0,0 +1,173 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.helper;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.OPERATION_EXPIRATION_TIMEOUT;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.faults.AcsFaultCode;\r
+import org.commscope.tr069adapter.acs.common.response.AddObjectResponse;\r
+import org.commscope.tr069adapter.acs.common.response.DeleteObjectResponse;\r
+import org.commscope.tr069adapter.acs.common.response.DownloadResponse;\r
+import org.commscope.tr069adapter.acs.common.response.FactoryResetResponse;\r
+import org.commscope.tr069adapter.acs.common.response.GetParameterAttributeResponse;\r
+import org.commscope.tr069adapter.acs.common.response.GetParameterValueResponse;\r
+import org.commscope.tr069adapter.acs.common.response.RebootResponse;\r
+import org.commscope.tr069adapter.acs.common.response.SetParameterAttributeResponse;\r
+import org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class TR069RequestProcessEngineUtility {\r
+\r
+  private static final Logger logger =\r
+      LoggerFactory.getLogger(TR069RequestProcessEngineUtility.class);\r
+\r
+  /**\r
+   * Builds a operation aborted operation request\r
+   * \r
+   * @param deviceDetails\r
+   * @param nbiDeviceOperationrequest\r
+   * @param acsFaultCode\r
+   * @return\r
+   */\r
+  public DeviceRPCResponse buildAbortedOperationresult(DeviceDetails deviceDetails,\r
+      DeviceRPCRequest nbiDeviceOperationrequest, AcsFaultCode acsFaultCode) {\r
+    Long operationId = nbiDeviceOperationrequest.getOperationId();\r
+\r
+    TR069OperationCode operationCode = null;\r
+    if (nbiDeviceOperationrequest.getOpDetails().getOpCode() instanceof CustomOperationCode) {\r
+      operationCode = TR069OperationCode.GET_PARAMETER_VALUES;\r
+    } else {\r
+      operationCode = (TR069OperationCode) nbiDeviceOperationrequest.getOpDetails().getOpCode();\r
+    }\r
+\r
+    return buildOperationresult(deviceDetails, operationId, operationCode, acsFaultCode);\r
+\r
+  }\r
+\r
+  /**\r
+   * @param deviceDetails\r
+   * @param operationId\r
+   * @param operationCode\r
+   * @return\r
+   */\r
+  public DeviceRPCResponse buildTimedOutOperationResult(DeviceDetails deviceDetails,\r
+      DeviceRPCRequest deviceRPCRequest) {\r
+    Long operationId = deviceRPCRequest.getOperationId();\r
+\r
+    TR069OperationCode operationCode = null;\r
+    if (deviceRPCRequest.getOpDetails().getOpCode() instanceof CustomOperationCode) {\r
+      CustomOperationCode customOperationCode =\r
+          (CustomOperationCode) deviceRPCRequest.getOpDetails().getOpCode();\r
+      if (CustomOperationCode.CONFIGURE_MULTIPLE_OBJECTS.equals(customOperationCode)) {\r
+        operationCode = TR069OperationCode.GET_PARAMETER_VALUES;\r
+      } else if (CustomOperationCode.CONNECT.equals(customOperationCode)) {\r
+        operationCode = TR069OperationCode.INITIATE_CR;\r
+      }\r
+    } else {\r
+      operationCode = (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();\r
+    }\r
+    DeviceRPCResponse deviceRPCResponse = buildOperationresult(deviceDetails, operationId,\r
+        operationCode, AcsFaultCode.FAULT_CODE_8003);\r
+    OperationResponse operationResponse = deviceRPCResponse.getOperationResponse();\r
+    operationResponse.setStatus(OPERATION_EXPIRATION_TIMEOUT);\r
+    return deviceRPCResponse;\r
+  }\r
+\r
+  /**\r
+   * Builds a operation aborted operation request\r
+   * \r
+   * @param deviceDetails\r
+   * @param nbiDeviceOperationrequest\r
+   * @param acsFaultCode\r
+   * @return\r
+   */\r
+  private DeviceRPCResponse buildOperationresult(DeviceDetails deviceDetails, Long operationId,\r
+      TR069OperationCode operationCode, AcsFaultCode acsFaultCode) {\r
+    DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();\r
+    deviceRPCResponse.setDeviceDetails(deviceDetails);\r
+    deviceRPCResponse.setOperationId(operationId);\r
+\r
+    deviceRPCResponse.setFaultKey(acsFaultCode.getFaultKey());\r
+    deviceRPCResponse.setFaultString(acsFaultCode.getFaultString());\r
+\r
+    OperationResponse opResponse = null;\r
+    switch (operationCode) {\r
+      case GET_RPC_METHODS:\r
+      case GET_PARAMETER_NAMES:\r
+        break;\r
+      case SET_PARAMETER_VALUES:\r
+        opResponse = new SetParameterValueResponse();\r
+        opResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        break;\r
+      case GET_PARAMETER_VALUES:\r
+      case INITIATE_CR:\r
+        opResponse = new GetParameterValueResponse();\r
+        opResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        break;\r
+      case SET_PARAMETER_ATTRIBUTES:\r
+        opResponse = new SetParameterAttributeResponse();\r
+        opResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        break;\r
+      case GET_PARAMETER_ATTRIBUTES:\r
+        opResponse = new GetParameterAttributeResponse();\r
+        opResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        break;\r
+      case ADD_OBJECT:\r
+        opResponse = new AddObjectResponse();\r
+        opResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        break;\r
+      case DELETE_OBJECT:\r
+        opResponse = new DeleteObjectResponse();\r
+        opResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
+        break;\r
+      case REBOOT:\r
+        opResponse = new RebootResponse();\r
+        break;\r
+      case DOWNLOAD:\r
+        opResponse = new DownloadResponse();\r
+        break;\r
+      case SCHEDULE_DOWNLOAD:\r
+      case UPLOAD:\r
+      case FACTORY_RESET:\r
+        opResponse = new FactoryResetResponse();\r
+        break;\r
+      default:\r
+        String operationCodeName = operationCode.name();\r
+        logger.debug("An unsupported operation: {}, hence returning without response object",\r
+            operationCodeName);\r
+        break;\r
+    }\r
+    deviceRPCResponse.setOperationResponse(opResponse);\r
+\r
+    return deviceRPCResponse;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/DeviceOperationManager.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/DeviceOperationManager.java
new file mode 100644 (file)
index 0000000..2e6f592
--- /dev/null
@@ -0,0 +1,109 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.impl;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.TR069NBIUtility;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Isolation;\r
+import org.springframework.transaction.annotation.Propagation;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component\r
+public class DeviceOperationManager implements DeviceOperationInterface {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeviceOperationManager.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private DeviceRepository deviceRepository;\r
+\r
+  /*\r
+   * (non-Javadoc)\r
+   * \r
+   * @see org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface#getDeviceDetails(\r
+   * java.lang.String)\r
+   */\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public TR069DeviceDetails getDeviceDetails(String deviceId) throws DeviceOperationException {\r
+    TR069DeviceDetails tr069DeviceDetails = null;\r
+    TR069DeviceEntity tr069DeviceEntity = deviceRepository.findByDeviceId(deviceId);\r
+    if (tr069DeviceEntity == null) {\r
+      throw new DeviceOperationException(ErrorCode.DEVICE_NOT_EXISTS, deviceId);\r
+    }\r
+    tr069DeviceDetails = TR069NBIUtility.convertToDTO(tr069DeviceEntity);\r
+\r
+\r
+    return tr069DeviceDetails;\r
+  }\r
+\r
+  /*\r
+   * (non-Javadoc)\r
+   * \r
+   * @see\r
+   * org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface#updateDeviceDetails(\r
+   * org.commscope.tr069adapter.acs.DeviceDetails)\r
+   */\r
+  @Override\r
+  @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, timeout = 300,\r
+      rollbackFor = RuntimeException.class)\r
+  public void updateDeviceDetails(DeviceDetails deviceDetails) throws DeviceOperationException {\r
+    try {\r
+      if (deviceDetails != null && deviceDetails.getDeviceId() != null\r
+          && deviceDetails instanceof TR069DeviceDetails) {\r
+        TR069DeviceDetails tr069DeviceDetails = (TR069DeviceDetails) deviceDetails;\r
+        String deviceId = tr069DeviceDetails.getDeviceId();\r
+        MDC.put(CLIENT_STR, deviceId);\r
+        logger.debug("Updating the TR069 device: {}", deviceId);\r
+\r
+        TR069DeviceEntity tr069DeviceEntity =\r
+            deviceRepository.findByDeviceId(tr069DeviceDetails.getDeviceId());\r
+\r
+        TR069DeviceEntity updatedEntity = TR069NBIUtility.convertToEntity(tr069DeviceDetails);\r
+        if (tr069DeviceEntity != null)\r
+          updatedEntity.setId(tr069DeviceEntity.getId());\r
+\r
+        deviceRepository.save(updatedEntity);\r
+\r
+      } else {\r
+        logger.error(\r
+            "The device cannot be null or should be of type TR069DeviceDetails, wrong request for device un-register");\r
+        throw new DeviceOperationException(\r
+            "Invalid device update request, device should be of type TR069DeviceDetails");\r
+      }\r
+      logger.debug("Successfully updated the device");\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/SessionManager.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/SessionManager.java
new file mode 100644 (file)
index 0000000..b9de828
--- /dev/null
@@ -0,0 +1,133 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.impl;\r
+\r
+import com.fasterxml.uuid.EthernetAddress;\r
+import com.fasterxml.uuid.Generators;\r
+import com.fasterxml.uuid.impl.TimeBasedGenerator;\r
+\r
+import java.util.Optional;\r
+import java.util.UUID;\r
+\r
+import org.commscope.tr069adapter.acs.common.exception.SessionConcurrentAccessException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.SessionRepository;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.SessionManagerEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.SessionManagerUtility;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class SessionManager {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(SessionManager.class);\r
+\r
+  @Autowired\r
+  SessionRepository sessionRepository;\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public SessionDTO getSession(String deviceId) {\r
+    SessionManagerEntity session = null;\r
+    Optional<SessionManagerEntity> optionalSessionData = sessionRepository.findById(deviceId);\r
+    if (optionalSessionData.isPresent()) {\r
+      session = optionalSessionData.get();\r
+    }\r
+    return SessionManagerUtility.convertToDTO(session);\r
+  }\r
+\r
+  /**\r
+   * @param sessionId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public SessionDTO getSessionBySessionId(String sessionId) throws SessionManagerException {\r
+\r
+    SessionManagerEntity sessionManagerEntity = sessionRepository.findBySessionId(sessionId);\r
+    if (sessionManagerEntity == null || SessionState.TERMINATED\r
+        .equals(SessionState.getByValue(sessionManagerEntity.getState()))) {\r
+      throw new SessionManagerException(ErrorCode.SESSION_EXPIRED, sessionId);\r
+    }\r
+    return SessionManagerUtility.convertToDTO(sessionManagerEntity);\r
+  }\r
+\r
+  /**\r
+   * @param session\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public SessionDTO createSession(SessionDTO session) throws SessionManagerException {\r
+    if (session == null) {\r
+      SessionManagerException sme = new SessionManagerException(ErrorCode.SESSION_CREATION_ERROR,\r
+          "Session object cannot be null");\r
+      logger.error(sme.getMessage());\r
+      throw sme;\r
+    }\r
+    logger.debug("Creating a new session for the device");\r
+    return SessionManagerUtility\r
+        .convertToDTO(sessionRepository.save(SessionManagerUtility.convertToEntity(session)));\r
+  }\r
+\r
+  /**\r
+   * @param dto\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public SessionDTO updateSession(SessionDTO dto) {\r
+    return SessionManagerUtility\r
+        .convertToDTO(sessionRepository.save(SessionManagerUtility.convertToEntity(dto)));\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @throws SessionConcurrentAccessException\r
+   */\r
+  public void deleteSession(String deviceId) {\r
+    sessionRepository.deleteById(deviceId);\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public SessionDTO getLockedSession(String deviceId) {\r
+    logger.debug("Acquiring the session lock for the device");\r
+    return SessionManagerUtility.convertToDTO(sessionRepository.findByDeviceId(deviceId));\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  public String generateUniqueSessionID() {\r
+    EthernetAddress addr = EthernetAddress.fromInterface();\r
+    TimeBasedGenerator uuidGenerator = Generators.timeBasedGenerator(addr);\r
+    UUID uuid = uuidGenerator.generate();\r
+    return uuid.toString();\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/SessionTimeoutHandler.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/SessionTimeoutHandler.java
new file mode 100644 (file)
index 0000000..50af917
--- /dev/null
@@ -0,0 +1,216 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.impl;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CONNECTION_REQUEST;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RESPONSE_TIMEOUT;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SEPERATOR;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SESSION_TIMEOUT_CALLBACK_JNDI;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.WAITING_FOR_DEVICE_RESPONSE;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.WAITING_FOR_NBI_RESPONSE;\r
+\r
+import java.io.Serializable;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.helper.TR069RequestProcessEngineUtility;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.TR069RequestProcessorUtility;\r
+import org.commscope.tr069adapter.common.timer.TimerException;\r
+import org.commscope.tr069adapter.common.timer.TimerListener;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.annotation.Isolation;\r
+import org.springframework.transaction.annotation.Propagation;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+@Component(SESSION_TIMEOUT_CALLBACK_JNDI)\r
+public class SessionTimeoutHandler implements TimerListener {\r
+\r
+\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(SessionTimeoutHandler.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private SessionManager sessionManager;\r
+\r
+  @Autowired\r
+  TR069EventNotificationService eventNotificationService;\r
+\r
+  @Autowired\r
+  DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @Autowired\r
+  private TimerServiceManagerAPI timerServiceManagerAPI;\r
+\r
+  @Autowired\r
+  private DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  @Autowired\r
+  private TR069RequestProcessEngineUtility tr069ProcessEngineUtility;\r
+\r
+  @Transactional(isolation = Isolation.DEFAULT, timeout = 300,\r
+      propagation = Propagation.REQUIRES_NEW, rollbackFor = {Exception.class})\r
+  @Override\r
+  public void notifyTimeout(String timerId, Serializable data) {\r
+\r
+    String timeoutType = (String) data;\r
+\r
+    logger.info("Timeout notification received for the type: {}", timeoutType);\r
+    if (WAITING_FOR_NBI_RESPONSE.equals(timeoutType)) {\r
+      handleNBIResponseTimeout(timerId);\r
+    } else if (WAITING_FOR_DEVICE_RESPONSE.equals(timeoutType)) {\r
+      handleDeviceResponseTimeout(timerId);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Handling the NBI response timeout\r
+   * \r
+   * @param timerId\r
+   */\r
+  private void handleNBIResponseTimeout(String timerId) {\r
+    String[] splitTimerId = timerId.split(SEPERATOR);\r
+    String deviceId = splitTimerId[0];\r
+    String operationId = splitTimerId[1];\r
+    try {\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      // Only session must be moved to terminated state in such case\r
+      logger.debug("The NBI operation request {} has timeout", operationId);\r
+\r
+      TR069DeviceDetails deviceDetails = deviceOperationInterface.getDeviceDetails(deviceId);\r
+      List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList =\r
+          deviceRPCRequestRepositoryHelper.findByDeviceIdAndOperationId(deviceId,\r
+              Long.valueOf(operationId));\r
+\r
+      if (deviceRPCRequestEntityList != null) {\r
+        logger.debug(\r
+            "Device details and the NBI Operation request are successfully fetched for operationId: {}",\r
+            operationId);\r
+        DeviceRPCRequest nbiDeviceOperationrequest =\r
+            TR069RequestProcessorUtility.convertToDTO(deviceRPCRequestEntityList);\r
+        DeviceRPCResponse deviceRPCResponse = tr069ProcessEngineUtility\r
+            .buildTimedOutOperationResult(deviceDetails, nbiDeviceOperationrequest);\r
+\r
+        eventNotificationService.sendOperationResultToNBI(deviceRPCResponse);\r
+        logger.debug("Successfully notified timed out operation result to NBI");\r
+\r
+        // Marking the NBI Request as processed\r
+        for (TR069DeviceRPCRequestEntity deviceRPCRequestEntity : deviceRPCRequestEntityList) {\r
+          deviceRPCRequestEntity.setIsProcessed(Integer.valueOf(1));\r
+        }\r
+        deviceRPCRequestRepositoryHelper.saveAll(deviceRPCRequestEntityList);\r
+\r
+        logger.debug("Stopping the connection request timer if any running");\r
+        String connectionRequestTimerId = deviceId + SEPERATOR + CONNECTION_REQUEST;\r
+        timerServiceManagerAPI.stopTimer(connectionRequestTimerId);\r
+      }\r
+    } catch (DeviceOperationException e) {\r
+      logger.error(\r
+          "Fetching device details failed for timed out operation processing for operation id: {} Reason: {}",\r
+          operationId, e.getMessage());\r
+    } catch (TimerException e) {\r
+      logger.debug(\r
+          "Failed stopping the timer job for connection request retry timer for operation id: {} Reason: {}",\r
+          operationId, e.getMessage());\r
+    } catch (Exception e) {\r
+      logger.error(\r
+          "An unknown exception occurred while timed out operation processing for operation id: {} Reason: {}",\r
+          operationId, e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Handling the device inform response timeout\r
+   * \r
+   * @param sessionId\r
+   */\r
+  private void handleDeviceResponseTimeout(String sessionId) {\r
+    SessionDTO session = null;\r
+    try {\r
+      session = sessionManager.getSessionBySessionId(sessionId);\r
+    } catch (SessionManagerException e) {\r
+      if (ErrorCode.SESSION_EXPIRED.equals(e.getErrorCode())) {\r
+        logger.info(\r
+            "The session {} does not exist or already in TERMINATED state, hence ignoring the timeout notification",\r
+            sessionId);\r
+        return;\r
+      }\r
+\r
+      logger.debug("Session fetching failed, Reason: {} ", e.getMessage());\r
+    }\r
+\r
+    try {\r
+      // Only session must be moved to terminated state in such case\r
+      if (session != null) {\r
+        MDC.put(CLIENT_STR, session.getDeviceId());\r
+        boolean isSessionReset = false;\r
+\r
+        String deviceId = session.getDeviceId();\r
+        Long operationId = session.getCurrentOperationId();\r
+        if (operationId != null && operationId != 0l\r
+            && !SessionState.TERMINATED.equals(session.getSessionState())) {\r
+          List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList =\r
+              deviceRPCRequestRepositoryHelper.findByDeviceIdAndOperationId(deviceId, operationId);\r
+          Integer isProcessed = deviceRPCRequestEntityList.get(0).getIsProcessed();\r
+          if (isProcessed != null && isProcessed == 0) {\r
+            logger.debug(\r
+                "The Device RPC request is still in processing state, hence resetting the session timer");\r
+            timerServiceManagerAPI.modifyTimer(sessionId, DEVICE_RESPONSE_TIMEOUT,\r
+                WAITING_FOR_DEVICE_RESPONSE);\r
+            logger.debug("Successfully restarted the session timer for session: {} ", sessionId);\r
+            isSessionReset = true;\r
+          }\r
+        }\r
+\r
+        if (!isSessionReset) {\r
+          logger.debug("Updating the session state to terminated");\r
+          session.setSessionState(SessionState.TERMINATED);\r
+          sessionManager.updateSession(session);\r
+          logger.debug("Successfully handled timeout notification of Device Response");\r
+        }\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error(\r
+          "An error occurred while checking the NBI state to reset the session timer, Reason: {}",\r
+          e.getMessage());\r
+      logger.debug("Updating the session to TERMINATED failed during timeout, Reason: {}",\r
+          e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/TR069EventNotificationService.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/TR069EventNotificationService.java
new file mode 100644 (file)
index 0000000..b6025f0
--- /dev/null
@@ -0,0 +1,86 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.impl;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_NOTIFICATION_Q;\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_OP_RESULT_Q;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.jms.core.JmsTemplate;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class TR069EventNotificationService {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(TR069EventNotificationService.class);\r
+\r
+  private static final String CLIENT_STR = "client";\r
+\r
+  @Autowired\r
+  private JmsTemplate jmsTemplate;\r
+\r
+  /**\r
+   * @param deviceNotification\r
+   */\r
+  public void sendDeviceInformToNBI(DeviceInform deviceNotification) {\r
+    String deviceId = deviceNotification.getDeviceDetails().getDeviceId();\r
+    try {\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      TR069InformType notificationType = (TR069InformType) deviceNotification.getInformType();\r
+\r
+      logger.debug("Device Inform Event received: '{}'", notificationType.getNotificationCode());\r
+      jmsTemplate.convertAndSend(NBI_NOTIFICATION_Q, deviceNotification);\r
+      logger.debug("Successfully posted the device inform event to DM to forward to NBI");\r
+    } catch (Exception e) {\r
+      logger.error("Posting Device Inform event to mapper failed, Reason: {}", e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceRPCResponse\r
+   */\r
+  public void sendOperationResultToNBI(DeviceRPCResponse deviceRPCResponse) {\r
+    String deviceId = deviceRPCResponse.getDeviceDetails().getDeviceId();\r
+    try {\r
+      MDC.put(CLIENT_STR, deviceId);\r
+      TR069OperationCode operCode =\r
+          (TR069OperationCode) deviceRPCResponse.getOperationResponse().getOperationCode();\r
+      String opCodeName = operCode.name();\r
+      logger.debug("Device RPC Response received for operation: '{}' with operation ID: {}",\r
+          opCodeName, deviceRPCResponse.getOperationId());\r
+      jmsTemplate.convertAndSend(NBI_OP_RESULT_Q, deviceRPCResponse);\r
+      logger.debug("Successfully posted the operation result event to DM to forward to NBI");\r
+    } catch (Exception e) {\r
+      logger.error("Posting Device RPC response event to mapper failed, Reason: {}",\r
+          e.getMessage());\r
+    } finally {\r
+      MDC.remove(CLIENT_STR);\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/TR069RequestProcessEngine.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/impl/TR069RequestProcessEngine.java
new file mode 100644 (file)
index 0000000..8ad7f2b
--- /dev/null
@@ -0,0 +1,702 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.impl;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SESSION_ID;\r
+\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.DeviceOperationRequestDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.DeviceOperationException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionConcurrentAccessException;\r
+import org.commscope.tr069adapter.acs.common.exception.SessionManagerException;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.faults.AcsFaultCode;\r
+import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.acs.common.response.DeviceInformResponse;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepositoryHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.CustomOperationData;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.TR069RequestProcessorData;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+import org.commscope.tr069adapter.acs.requestprocessor.helper.TR069RequestProcessEngineHelper;\r
+import org.commscope.tr069adapter.acs.requestprocessor.util.TR069RequestProcessorUtility;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class TR069RequestProcessEngine extends TR069RequestProcessEngineHelper {\r
+\r
+  private static final String PENDING_RPC_CHECK =\r
+      "Checking if any pending Device RPC requests exists for the device";\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(TR069RequestProcessEngine.class);\r
+\r
+  @Autowired\r
+  TR069EventNotificationService tr069EventNotificationService;\r
+\r
+  @Autowired\r
+  DeviceOperationInterface deviceOperationInterface;\r
+\r
+  @Autowired\r
+  protected DeviceRPCRequestRepositoryHelper deviceRPCRequestRepositoryHelper;\r
+\r
+  /**\r
+   * @param deviceRPCRequest\r
+   * @throws TR069EventProcessingException\r
+   * @throws SessionConcurrentAccessException\r
+   */\r
+  public void processDeviceRPCRequest(DeviceRPCRequest deviceRPCRequest)\r
+      throws TR069EventProcessingException, SessionConcurrentAccessException {\r
+\r
+    DeviceRPCResponse deviceRPCResponse = null;\r
+    String deviceId = null;\r
+\r
+    try {\r
+      if (deviceRPCRequest == null) {\r
+        TR069EventProcessingException ex =\r
+            new TR069EventProcessingException(ErrorCode.INVALID_NBI_REQUEST);\r
+        logger.error(ex.getMessage());\r
+        throw ex;\r
+      }\r
+\r
+      Long operationId = deviceRPCRequest.getOperationId();\r
+      logger.info("A Mapper request is received with operationID: {}", operationId);\r
+      TR069DeviceDetails tr069DeviceDetails = null;\r
+      deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();\r
+      try {\r
+        tr069DeviceDetails = deviceOperationInterface.getDeviceDetails(deviceId);\r
+      } catch (DeviceOperationException deo) {\r
+        logger.error(deo.getMessage());\r
+        deviceRPCResponse = tr069RequestProcessEngineUtility.buildAbortedOperationresult(\r
+            tr069DeviceDetails, deviceRPCRequest, AcsFaultCode.FAULT_CODE_8000);\r
+        return;\r
+      }\r
+\r
+      try {\r
+        SessionDTO sessionDTO = acquireSessionLockWithRetryOnFailure(deviceId, operationId);\r
+\r
+        logger.debug("Persisting the Device RPC request, with operation ID: {}", operationId);\r
+        List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities =\r
+            TR069RequestProcessorUtility.convertToEntity(deviceRPCRequest);\r
+        deviceRPCRequestRepositoryHelper.saveAll(tr069DeviceRPCRequestEntities);\r
+        logger.info("Successfully persisted the Device RPC request");\r
+\r
+        if (sessionDTO != null) {\r
+          if (SessionState.TERMINATED.equals(sessionDTO.getSessionState())) {\r
+            logger.debug("No active session exists, hence requesting for Connection request");\r
+            requestForConnectionRequestInform(tr069DeviceDetails);\r
+\r
+            // Start Request Timer\r
+            startDeviceRPCRequestTimer(deviceId, deviceRPCRequest.getOperationId(),\r
+                deviceRPCRequest.getOptions().getExecutionTimeout());\r
+          } else {\r
+            logger.debug(\r
+                "Session is in processing state, Will be notified to session manager to pick the request on session availability");\r
+          }\r
+        } else {\r
+          logger.warn(\r
+              "The device is not activated yet, hence the NBI Operation result cannot be processed!");\r
+          deviceRPCResponse = tr069RequestProcessEngineUtility.buildAbortedOperationresult(\r
+              tr069DeviceDetails, deviceRPCRequest, AcsFaultCode.FAULT_CODE_8001);\r
+        }\r
+      } catch (SessionConcurrentAccessException scae) {\r
+        throw scae;\r
+      } catch (Exception e) {\r
+        logger.error("An unknown exception occurred while processing the NBI request, Reason: {}",\r
+            e.getMessage());\r
+        deviceRPCResponse = tr069RequestProcessEngineUtility.buildAbortedOperationresult(\r
+            tr069DeviceDetails, deviceRPCRequest, AcsFaultCode.FAULT_CODE_8004);\r
+      }\r
+    } finally {\r
+      if (deviceRPCResponse != null) {\r
+        logger.debug("Sending failed operation result for this NBI request");\r
+        tr069EventNotificationService.sendOperationResultToNBI(deviceRPCResponse);\r
+        // Marking the NBI Request as processed\r
+        deviceRPCRequestRepositoryHelper.markDeviceRPCRequestAsProcessed(deviceId,\r
+            deviceRPCRequest.getOperationId());\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Common Step 1. Since there can exist only one Inform from any device, which will be the\r
+   * initiator of the session, following steps to be followed a. Stop the session timer for this\r
+   * device if any running. b. Get the lock by reading the session record for this device from DB\r
+   * and load the session object in Thread Local Cache c. Create a new session id from\r
+   * SessionManager, and update the session object with new Session id and change the state to\r
+   * PROCESSING. 2. Read the Device record from the DB, and load the device DTO also in the\r
+   * ThreadLocalCache\r
+   * \r
+   * Common Notification Specific Step 1. Take the connection request URL from the\r
+   * deviceNotification object 2. Update the Device DTO object with connection request URL,\r
+   * swVersion, hwVersion if there is a difference. Update the last updated time if updated 3. Send\r
+   * this Inform to the NBI, by calling the ProcessDeviceInform method on TR069NBIService module. 4.\r
+   * Create the Inform response Object and update the sessionID used for this transaction in the\r
+   * response which will be used in the cookie of the HTTP response 5. Post the message into\r
+   * Response Queue 6. Change the session state to LOCKED 7. Save the Session and device records\r
+   * with the values in ThreadLocalCache 8. Start the session timer and default request timer (As\r
+   * configured for all the requests from device) 8. All the above steps to be executed in a single\r
+   * transaction.\r
+   * \r
+   * @param deviceNotification\r
+   * @return\r
+   * @throws SessionConcurrentAccessException\r
+   */\r
+  public DeviceInformResponse processDeviceInform(DeviceInform deviceNotification)\r
+      throws SessionConcurrentAccessException {\r
+\r
+    String deviceId = deviceNotification.getDeviceDetails().getDeviceId();\r
+    TR069InformType notificationType = (TR069InformType) deviceNotification.getInformType();\r
+    logger.info("Processing the Device Inform Event: '{}'", notificationType.getNotificationCode());\r
+    String newSessionId = null;\r
+    SessionDTO session = null;\r
+    TR069DeviceDetails deviceDetails = null;\r
+    DeviceInformResponse informResponse = null;\r
+\r
+    try {\r
+\r
+      SessionDTO sessionDTO = getSession(deviceId);\r
+      if (sessionDTO != null && !SessionState.TERMINATED.equals(sessionDTO.getSessionState())) {\r
+        String sessionId = sessionDTO.getSessionId();\r
+        logger.debug(\r
+            "The session with session id {} is not terminated, hence stopping the associated timer",\r
+            sessionId);\r
+        stopSessionTimer(sessionDTO.getSessionId());\r
+      }\r
+\r
+      // To stop the request timer if any running for this device, and send failed operation\r
+      // result for any such pending cases. Requests pending in DB should not be cleared\r
+\r
+      /*\r
+       * Read any pending records in TR069_NBI_REQUEST table for this device. Send abort operation\r
+       * result for all the pending requests Delete the records from the TR069_NBI_Request table for\r
+       * this device.\r
+       */\r
+      if (deviceNotification instanceof BootstrapInform\r
+          || deviceNotification instanceof BootInform) {\r
+        sendAbortedOperationResultForPendingRPCRequests(deviceNotification.getDeviceDetails(),\r
+            notificationType);\r
+      }\r
+\r
+      session = acquireSessionLock(deviceId, notificationType, true);\r
+      deviceDetails = getPersistedDeviceDetails(deviceId, deviceNotification);\r
+\r
+      newSessionId = session.getSessionId();\r
+      logger.debug("The session id generated to process the device notification request is: {} ",\r
+          newSessionId);\r
+\r
+      initThreadLocalCache(deviceDetails, session);\r
+      TR069RequestProcessorData tr069RequestProcessorData = getTR069RequestProcessorData();\r
+      updateSessionOnDeviceNotification(tr069RequestProcessorData, newSessionId);\r
+\r
+      logger.debug("Sending the Device Inform Event to the Mapper");\r
+      tr069EventNotificationService.sendDeviceInformToNBI(deviceNotification);\r
+\r
+      updateDeviceDetailsFromInform(tr069RequestProcessorData, deviceNotification);\r
+\r
+      logger.debug("Updating the session for the device with newly generated session id");\r
+      changeSessionState(tr069RequestProcessorData, SessionState.LOCKED);\r
+      updateSession(session);\r
+\r
+      // Start session timer - Get a default timeout for session.\r
+      startSessionTimer(session.getSessionId());\r
+\r
+      informResponse =\r
+          new DeviceInformResponse(newSessionId, deviceNotification.getDeviceDetails());\r
+    } catch (\r
+\r
+    DeviceOperationException doe) {\r
+      logger.error(doe.getMessage());\r
+    } catch (SessionConcurrentAccessException scae) {\r
+      throw scae;\r
+    } catch (Exception e) {\r
+      throw new SessionConcurrentAccessException(ErrorCode.UNKNOWN_ERROR, e.getMessage());\r
+    }\r
+    return informResponse;\r
+  }\r
+\r
+  /**\r
+   * \r
+   * 1. Stop the request timer for this device using the session ID received in the cookie of the\r
+   * request 2. Read the session record from the session table into ThreadLocalCache 3. Move the\r
+   * session state to PROCESSING and update the OPERATION_ID as null. 4a. Session Manager to check\r
+   * if any pending request being notified for the device using in memory cache - Not planned for\r
+   * this Drop 4. As an interim solution for drop1, Check the TR069_NBI_REQUEST table if any request\r
+   * is pending.\r
+   * \r
+   * if (anyPendingRequestExists) { 1. Pick the request with the least created_time 2. Create the\r
+   * response object and update the sessionID used for this transaction in the response which will\r
+   * be used in the cookie of the HTTP response 3. Post the response object into Response Queue 4.\r
+   * Change the session state to LOCKED and update the OPERATION_ID in the session table with the\r
+   * NBI requests OPERATION_ID. 5. Save the Session record with the values in ThreadLocalCache 6.\r
+   * Start the session timer and request timer (available in the request) } else { 1. Move the\r
+   * session state to PROCESSING and update the OPERATION_ID as null. 2. Save the Session record\r
+   * with the values in ThreadLocalCache. 3. Start the session timer. }\r
+   * \r
+   * 6. All the above steps to be executed in a single transaction\r
+   * \r
+   * @param deviceRPCResponse\r
+   * @return\r
+   * @throws SessionConcurrentAccessException\r
+   */\r
+  public DeviceRPCRequest processDeviceRPCResponse(DeviceRPCResponse deviceRPCResponse)\r
+      throws SessionConcurrentAccessException {\r
+    TR069DeviceDetails deviceDetails = (TR069DeviceDetails) deviceRPCResponse.getDeviceDetails();\r
+    String deviceId = deviceDetails.getDeviceId();\r
+    logger.info("Processing the operation response from device");\r
+\r
+    SessionDTO session;\r
+    DeviceRPCRequest deviceRPCRequest = null;\r
+    try {\r
+      session = acquireSessionLock(deviceId, null, false);\r
+      String newSessionId = session.getSessionId();\r
+      logger.debug("The session id used to process the device RPC response is: {}", newSessionId);\r
+\r
+      initThreadLocalCache(deviceDetails, session);\r
+      TR069RequestProcessorData tr069RequestProcessorData = getTR069RequestProcessorData();\r
+      updateSessionOnDeviceNotification(tr069RequestProcessorData, newSessionId);\r
+\r
+      Long operationId = deviceRPCResponse.getOperationId();\r
+\r
+      deviceRPCRequest = getNextRPCRequest(deviceId, operationId);\r
+\r
+      if (deviceRPCRequest != null) {\r
+        OperationDetails opDetails = deviceRPCRequest.getOpDetails();\r
+        if (opDetails != null) {\r
+          OperationCode opCode = opDetails.getOpCode();\r
+          if (opCode instanceof CustomOperationCode) {\r
+            CustomOperationCode customOperationCode = (CustomOperationCode) opCode;\r
+            String customOperationCodeName = customOperationCode.name();\r
+            logger.info(\r
+                "The Device RPC request is of custom type, the custom operation to be performed is: {}",\r
+                customOperationCodeName);\r
+            String jndiName = customOperationCode.getJndiName();\r
+            CustomOperationData customOperationData =\r
+                new CustomOperationData(deviceDetails, deviceRPCResponse, deviceRPCRequest);\r
+            customOperationData = executeCustomOperation(jndiName, customOperationData);\r
+\r
+            DeviceRPCRequest operationRequest = customOperationData.getDeviceRPCRequest();\r
+            deviceRPCResponse = customOperationData.getDeviceRPCResponse();\r
+            if (operationRequest != null) {\r
+              operationRequest.addContextParam(SESSION_ID, newSessionId);\r
+              updateSessionCurOpId(tr069RequestProcessorData, deviceRPCRequest.getOperationId());\r
+              changeSessionState(tr069RequestProcessorData, SessionState.LOCKED);\r
+              updateSession(session);\r
+              if (deviceRPCResponse != null && operationRequest.getOperationId() != null\r
+                  && !operationRequest.getOperationId()\r
+                      .equals(deviceRPCResponse.getOperationId())) {\r
+                logger.debug(\r
+                    "Sending the Device RPC response for a configure Multiple object prior operation");\r
+                // Sending the operation response to NBI\r
+                tr069EventNotificationService.sendOperationResultToNBI(deviceRPCResponse);\r
+              }\r
+              return operationRequest;\r
+            } else {\r
+              logger.debug(PENDING_RPC_CHECK);\r
+              deviceRPCRequest =\r
+                  deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(deviceId);\r
+            }\r
+          }\r
+        }\r
+      }\r
+\r
+      if (deviceRPCRequest != null) {\r
+        logger.info("A pending Device RPC request exists for the device with operation ID: {}",\r
+            deviceRPCRequest.getOperationId());\r
+        updateSessionCurOpId(tr069RequestProcessorData, deviceRPCRequest.getOperationId());\r
+        changeSessionState(tr069RequestProcessorData, SessionState.LOCKED);\r
+\r
+        deviceRPCRequest.addContextParam(SESSION_ID, newSessionId);\r
+\r
+      } else {\r
+        logger.info(\r
+            "No pending Device RPC request exists for the device, hence empty response will be sent to the device");\r
+        logger.debug("Updating the session to terminated state");\r
+        // To stop the session timer if any running for this device.\r
+        stopSessionTimer(newSessionId);\r
+        changeSessionState(tr069RequestProcessorData, SessionState.TERMINATED);\r
+      }\r
+\r
+      // To stop the request timer if any running for this operation.\r
+      stopDeviceRPCRequestTimer(deviceId, deviceRPCResponse.getOperationId());\r
+\r
+      // Sending the operation response to NBI\r
+      logger.debug("Sending the Device RPC Response to the Mapper");\r
+      tr069EventNotificationService.sendOperationResultToNBI(deviceRPCResponse);\r
+\r
+      updateSession(session);\r
+    } catch (DeviceOperationException doe) {\r
+      logger.error(doe.getMessage());\r
+    } catch (SessionConcurrentAccessException scae) {\r
+      throw scae;\r
+    }\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  /**\r
+   * \r
+   * 1. Stop the request timer for this device using the session ID received in the cookie of the\r
+   * request 2. Read the session record from the session table into ThreadLocalCache 3. Move the\r
+   * session state to PROCESSING and update the OPERATION_ID as null. 4a. Session Manager to check\r
+   * if any pending request being notified for the device using in memory cache - Not planned for\r
+   * this Drop 4. As an interim solution for drop1, Check the TR069_NBI_REQUEST table if any request\r
+   * is pending.\r
+   * \r
+   * if (anyPendingRequestExists) { 1. Pick the request with the least created_time 2. Create the\r
+   * response object and update the sessionID used for this transaction in the response which will\r
+   * be used in the cookie of the HTTP response 3. Post the response object into Response Queue 4.\r
+   * Change the session state to LOCKED and update the OPERATION_ID in the session table with the\r
+   * NBI requests OPERATION_ID. 5. Save the Session record with the values in ThreadLocalCache 6.\r
+   * Start the session timer and request timer (available in the request) } else { 1. Move the\r
+   * session state to PROCESSING and update the OPERATION_ID as null. 2. Save the Session record\r
+   * with the values in ThreadLocalCache. 3. Start the session timer. }\r
+   * \r
+   * 6. All the above steps to be executed in a single transaction\r
+   * \r
+   * @param deviceDetails\r
+   * @return\r
+   * @throws SessionConcurrentAccessException\r
+   */\r
+  public DeviceRPCRequest processEmptyDeviceRequest(TR069DeviceDetails deviceDetails)\r
+      throws SessionConcurrentAccessException {\r
+    String deviceId = deviceDetails.getDeviceId();\r
+    logger.info("Processing the empty request from device");\r
+\r
+    SessionDTO session;\r
+    DeviceRPCRequest nbiDeviceOperationRequest = null;\r
+    try {\r
+      session = acquireSessionLock(deviceId, null, false);\r
+      String newSessionId = session.getSessionId();\r
+      logger.debug("The session id used to process the empty device request is: {}", newSessionId);\r
+\r
+      initThreadLocalCache(deviceDetails, session);\r
+      TR069RequestProcessorData tr069RequestProcessorData = getTR069RequestProcessorData();\r
+      updateSessionOnDeviceNotification(tr069RequestProcessorData, newSessionId);\r
+\r
+      logger.debug(PENDING_RPC_CHECK);\r
+      nbiDeviceOperationRequest =\r
+          deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(deviceId);\r
+      if (nbiDeviceOperationRequest != null) {\r
+        Long operationId = nbiDeviceOperationRequest.getOperationId();\r
+        OperationDetails opDetails = nbiDeviceOperationRequest.getOpDetails();\r
+        if (opDetails != null) {\r
+          OperationCode opCode = opDetails.getOpCode();\r
+          if (opCode instanceof CustomOperationCode) {\r
+            CustomOperationCode customOperationCode = (CustomOperationCode) opCode;\r
+            String customOperationCodeName = customOperationCode.name();\r
+            logger.info(\r
+                "The Device RPC operation request is of custom type, the custom operation to be performed is: {}",\r
+                customOperationCodeName);\r
+            String jndiName = customOperationCode.getJndiName();\r
+            CustomOperationData customOperationData =\r
+                new CustomOperationData(deviceDetails, null, nbiDeviceOperationRequest);\r
+            customOperationData = executeCustomOperation(jndiName, customOperationData);\r
+\r
+            DeviceRPCRequest operationRequest = customOperationData.getDeviceRPCRequest();\r
+            if (operationRequest != null) {\r
+              operationRequest.addContextParam(SESSION_ID, newSessionId);\r
+              updateSessionCurOpId(tr069RequestProcessorData, operationId);\r
+              changeSessionState(tr069RequestProcessorData, SessionState.LOCKED);\r
+              updateSession(session);\r
+              return operationRequest;\r
+            } else {\r
+              logger.debug(PENDING_RPC_CHECK);\r
+              nbiDeviceOperationRequest =\r
+                  deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(deviceId);\r
+            }\r
+          }\r
+        }\r
+      }\r
+\r
+      if (nbiDeviceOperationRequest != null) {\r
+        Long operationId = nbiDeviceOperationRequest.getOperationId();\r
+        logger.info("A pending Device RPC request exists for the device with operation ID: {}",\r
+            operationId);\r
+        updateSessionCurOpId(tr069RequestProcessorData, operationId);\r
+        changeSessionState(tr069RequestProcessorData, SessionState.LOCKED);\r
+\r
+        nbiDeviceOperationRequest.addContextParam(SESSION_ID, newSessionId);\r
+\r
+      } else {\r
+        logger.info(\r
+            "No pending Device RPC request exists for the device, hence empty device response will be sent to the device");\r
+        logger.debug("Updating the session to terminated state");\r
+        // To stop the session timer if any running for this device.\r
+        stopSessionTimer(newSessionId);\r
+        changeSessionState(tr069RequestProcessorData, SessionState.TERMINATED);\r
+      }\r
+\r
+      updateSession(session);\r
+    } catch (DeviceOperationException doe) {\r
+      logger.error(doe.getMessage());\r
+    } catch (SessionConcurrentAccessException scae) {\r
+      throw scae;\r
+    }\r
+\r
+    return nbiDeviceOperationRequest;\r
+  }\r
+\r
+  /**\r
+   * @param sessionId\r
+   * @return\r
+   * @throws SessionManagerException\r
+   */\r
+  public DeviceOperationRequestDetails getOpRequestDetailsBySessionId(String sessionId)\r
+      throws SessionManagerException {\r
+    DeviceOperationRequestDetails deviceOperationRequestDetails =\r
+        new DeviceOperationRequestDetails();\r
+\r
+    logger.debug("Fetching Operation request details for session: {}", sessionId);\r
+    SessionDTO session = getSessionBySessionId(sessionId);\r
+    String deviceId = session.getDeviceId();\r
+    TR069DeviceDetails deviceDetails = null;\r
+    try {\r
+      deviceDetails = deviceOperationInterface.getDeviceDetails(deviceId);\r
+      if (session.getCurrentOperationId() == null) {\r
+        logger.debug("There exists no pending operation request for the session: {}", sessionId);\r
+      } else {\r
+        logger.debug("There exists pending operation request for the session: {}", sessionId);\r
+        List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntityList =\r
+            deviceRPCRequestRepositoryHelper.findByDeviceIdAndOperationId(deviceId,\r
+                session.getCurrentOperationId());\r
+        if (tr069DeviceRPCRequestEntityList == null) {\r
+          SessionManagerException ex =\r
+              new SessionManagerException(ErrorCode.SESSION_EXPIRED, sessionId);\r
+          logger.error(ex.getMessage());\r
+          throw ex;\r
+        }\r
+        DeviceRPCRequest deviceRPCRequest =\r
+            TR069RequestProcessorUtility.convertToDTO(tr069DeviceRPCRequestEntityList);\r
+        OperationCode opCode = deviceRPCRequest.getOpDetails().getOpCode();\r
+\r
+        String operationName = null;\r
+\r
+        if (opCode instanceof TR069OperationCode) {\r
+          operationName = ((TR069OperationCode) opCode).name();\r
+        } else {\r
+          operationName = ((CustomOperationCode) opCode).name();\r
+          TR069OperationDetails tr069OperationDetails =\r
+              (TR069OperationDetails) deviceRPCRequest.getOpDetails();\r
+          opCode = getCustomOperationCode(tr069OperationDetails);\r
+        }\r
+        logger.info("The pending operation request for the session is of operation {}",\r
+            operationName);\r
+        deviceOperationRequestDetails.setOpCode(opCode);\r
+        deviceOperationRequestDetails.setOperationId(deviceRPCRequest.getOperationId());\r
+      }\r
+      deviceOperationRequestDetails.setDeviceDetails(deviceDetails);\r
+    } catch (DeviceOperationException e) {\r
+      SessionManagerException ex =\r
+          new SessionManagerException(ErrorCode.DEVICE_NOT_EXISTS, deviceId);\r
+      logger.error(ex.getMessage());\r
+      throw ex;\r
+    } catch (Exception e) {\r
+      logger.error(e.getMessage());\r
+      SessionManagerException ex =\r
+          new SessionManagerException(ErrorCode.SESSION_EXPIRED, sessionId);\r
+      logger.error(ex.getMessage());\r
+      throw ex;\r
+    }\r
+    return deviceOperationRequestDetails;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   * @throws DeviceOperationException\r
+   */\r
+  public TR069DeviceDetails getDeviceDetails(String deviceId) throws DeviceOperationException {\r
+    return deviceOperationInterface.getDeviceDetails(deviceId);\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   * @return\r
+   * @throws DeviceOperationException\r
+   * @throws SessionConcurrentAccessException\r
+   * @throws InterruptedException\r
+   */\r
+  private SessionDTO acquireSessionLockWithRetryOnFailure(String deviceId, Long operationId)\r
+      throws DeviceOperationException, SessionConcurrentAccessException, InterruptedException {\r
+    int sessionLockAcquireRetryCount = 0;\r
+    SessionDTO sessionDTO = null;\r
+    do {\r
+      try {\r
+        sessionDTO = acquireSessionLock(deviceId, null, false);\r
+        logger.info(\r
+            "Successfully acquired the session lock for processing NBI request with operation ID: {}",\r
+            operationId);\r
+        break;\r
+      } catch (SessionConcurrentAccessException ex) {\r
+        sessionLockAcquireRetryCount++;\r
+        if (sessionLockAcquireRetryCount == 3) {\r
+          logger.error("Failed acquiring the lock after retry, rolling back the transaction");\r
+          throw ex;\r
+        }\r
+        logger.warn(\r
+            "Session lock acquiring failed with SessionConcurrentAccessException, hence retrying");\r
+        Thread.sleep(1000L);\r
+      }\r
+    } while (sessionLockAcquireRetryCount < 3);\r
+\r
+    return sessionDTO;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param deviceNotification\r
+   * @return\r
+   * @throws DeviceOperationException\r
+   */\r
+  private TR069DeviceDetails getPersistedDeviceDetails(String deviceId,\r
+      DeviceInform deviceNotification) throws DeviceOperationException {\r
+    TR069DeviceDetails deviceDetails = null;\r
+    try {\r
+      deviceDetails = deviceOperationInterface.getDeviceDetails(deviceId);\r
+    } catch (DeviceOperationException doe) {\r
+      if (ErrorCode.DEVICE_NOT_EXISTS.equals(doe.getErrorCode())) {\r
+        logger.info(\r
+            "Creating the device record in TR069_DEVICE_ table, as the device is authenticated successfully.");\r
+        createDevice(deviceNotification.getDeviceDetails());\r
+        deviceDetails = deviceOperationInterface.getDeviceDetails(deviceId);\r
+      }\r
+    }\r
+\r
+    return deviceDetails;\r
+  }\r
+\r
+  /**\r
+   * @param deviceDetails\r
+   * @param notificationType\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  private void sendAbortedOperationResultForPendingRPCRequests(DeviceDetails deviceDetails,\r
+      TR069InformType notificationType) throws TR069EventProcessingException {\r
+    String deviceId = deviceDetails.getDeviceId();\r
+    String notificationName = notificationType.name();\r
+    logger.debug(\r
+        "Device Inform event received is {}, hence aborting all the pending operations if any exists",\r
+        notificationName);\r
+\r
+    List<DeviceRPCRequest> deviceRPCRequestList =\r
+        deviceRPCRequestRepositoryHelper.findAllDeviceRPCRequests(deviceId);\r
+\r
+    for (DeviceRPCRequest pendingDeviceRPCRequest : deviceRPCRequestList) {\r
+      DeviceRPCResponse deviceOpResult =\r
+          tr069RequestProcessEngineUtility.buildAbortedOperationresult(deviceDetails,\r
+              pendingDeviceRPCRequest, AcsFaultCode.FAULT_CODE_8002);\r
+      String operationName = null;\r
+      if (pendingDeviceRPCRequest.getOpDetails().getOpCode() instanceof CustomOperationCode) {\r
+        CustomOperationCode operationCode =\r
+            (CustomOperationCode) pendingDeviceRPCRequest.getOpDetails().getOpCode();\r
+        operationName = operationCode.name();\r
+      } else {\r
+        TR069OperationCode operationCode =\r
+            (TR069OperationCode) pendingDeviceRPCRequest.getOpDetails().getOpCode();\r
+        operationName = operationCode.name();\r
+      }\r
+      Long operationId = pendingDeviceRPCRequest.getOperationId();\r
+      logger.debug("Aborting the NBI Operation request with operation Id : {} for operation: {}",\r
+          operationId, operationName);\r
+      tr069EventNotificationService.sendOperationResultToNBI(deviceOpResult);\r
+      // Marking the NBI Request as processed\r
+      deviceRPCRequestRepositoryHelper.markDeviceRPCRequestAsProcessed(deviceId, operationId);\r
+      stopDeviceRPCRequestTimer(deviceId, operationId);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param tr069RequestProcessorData\r
+   * @param deviceNotification\r
+   */\r
+  private void updateDeviceDetailsFromInform(TR069RequestProcessorData tr069RequestProcessorData,\r
+      DeviceInform deviceNotification) {\r
+    Boolean isDeviceDataChanged =\r
+        isDeviceUpdateExists(tr069RequestProcessorData, deviceNotification);\r
+    if (isDeviceDataChanged.booleanValue()) {\r
+      updateDeviceDetails(tr069RequestProcessorData, deviceNotification);\r
+      try {\r
+        logger.info(\r
+            "The device data like connection request URL/ Device SW/HW version has changed, hence updating the device details");\r
+        deviceOperationInterface\r
+            .updateDeviceDetails(tr069RequestProcessorData.getTr069DeviceDetails());\r
+      } catch (DeviceOperationException e) {\r
+        logger.error("Updating the device details with the notification details failed, Reason: {}",\r
+            e.getMessage());\r
+        logger.error(e.getMessage());\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param operationId\r
+   * @return\r
+   */\r
+  private DeviceRPCRequest getNextRPCRequest(String deviceId, Long operationId) {\r
+    DeviceRPCRequest deviceRPCRequest = null;\r
+    try {\r
+      List<TR069DeviceRPCRequestEntity> entityList =\r
+          deviceRPCRequestRepositoryHelper.findByDeviceIdAndOperationId(deviceId, operationId);\r
+      Integer operationCode = entityList.get(0).getOpCode();\r
+      if (CustomOperationCode.getByOperationCode(operationCode) == null) {\r
+        logger.info("Marking the Device RPC request with operation id - {} as processed.",\r
+            operationId);\r
+        deviceRPCRequestRepositoryHelper.markDeviceRPCRequestAsProcessed(deviceId, operationId);\r
+      }\r
+      logger.debug(PENDING_RPC_CHECK);\r
+      deviceRPCRequest = deviceRPCRequestRepositoryHelper.findOldestDeviceRPCRequest(deviceId);\r
+    } catch (TR069EventProcessingException e) {\r
+      logger.error("An unknown exception occurred while fetching the NBI request, Reason: {}",\r
+          e.getMessage());\r
+    }\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  /**\r
+   * Creates the device in the DM module if factory imported already\r
+   * \r
+   * @param deviceDetails\r
+   * @throws DeviceOperationException\r
+   */\r
+  private void createDevice(DeviceDetails deviceDetails) throws DeviceOperationException {\r
+    deviceOperationInterface.updateDeviceDetails(deviceDetails);\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/SessionManagerUtility.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/SessionManagerUtility.java
new file mode 100644 (file)
index 0000000..911bbaa
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.util;\r
+\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionState;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.SessionManagerEntity;\r
+\r
+public class SessionManagerUtility {\r
+\r
+  private SessionManagerUtility() {\r
+    super();\r
+  }\r
+\r
+  public static SessionDTO convertToDTO(SessionManagerEntity entity) {\r
+    if (null == entity) {\r
+      return null;\r
+    }\r
+\r
+    SessionDTO dto = new SessionDTO();\r
+    dto.setSessionState(SessionState.getByValue(entity.getState()));\r
+    dto.setCurrentOperationId(entity.getCurrentOperationId());\r
+    dto.setDeviceId(entity.getDeviceId());\r
+    dto.setSessionId(entity.getSessionId());\r
+    dto.setSessionStartTime(entity.getSessionStartTime());\r
+\r
+    return dto;\r
+  }\r
+\r
+  /**\r
+   * @param dto\r
+   * @return\r
+   */\r
+  public static SessionManagerEntity convertToEntity(SessionDTO dto) {\r
+    SessionManagerEntity entity = new SessionManagerEntity();\r
+    if (dto.getSessionState() != null) {\r
+      entity.setState(dto.getSessionState().getValue());\r
+    } else {\r
+      entity.setState(SessionState.READY.getValue());\r
+    }\r
+    entity.setCurrentOperationId(dto.getCurrentOperationId());\r
+    entity.setDeviceId(dto.getDeviceId());\r
+    entity.setSessionId(dto.getSessionId());\r
+\r
+    if (dto.getSessionStartTime() != null) {\r
+      entity.setSessionStartTime(dto.getSessionStartTime());\r
+    } else {\r
+      entity.setSessionStartTime(new Date());\r
+    }\r
+    return entity;\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069NBIUtility.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069NBIUtility.java
new file mode 100644 (file)
index 0000000..50c3ab2
--- /dev/null
@@ -0,0 +1,78 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.util;\r
+\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceEntity;\r
+\r
+public class TR069NBIUtility {\r
+\r
+  private TR069NBIUtility() {\r
+    super();\r
+  }\r
+\r
+  /**\r
+   * A utility method to convert the DTO to Domain object\r
+   * \r
+   * @param tr069DeviceDetails\r
+   * @return\r
+   */\r
+\r
+  public static TR069DeviceEntity convertToEntity(TR069DeviceDetails tr069DeviceDetails) {\r
+    TR069DeviceEntity tr069DeviceEntity = new TR069DeviceEntity();\r
+    tr069DeviceEntity.setDeviceId(tr069DeviceDetails.getDeviceId());\r
+    tr069DeviceEntity.setUserName(tr069DeviceDetails.getUsername());\r
+    tr069DeviceEntity.setPassword(tr069DeviceDetails.getPassword());\r
+    tr069DeviceEntity.setLastUpdatedTime(new Date());\r
+\r
+    if (tr069DeviceDetails.getConnectionRequestURL() != null) {\r
+      tr069DeviceEntity.setConnectionReqURL(tr069DeviceDetails.getConnectionRequestURL());\r
+    }\r
+    if (tr069DeviceDetails.getSoftwareVersion() != null) {\r
+      tr069DeviceEntity.setSwVersion(tr069DeviceDetails.getSoftwareVersion());\r
+    }\r
+    if (tr069DeviceDetails.getHardwareVersion() != null) {\r
+      tr069DeviceEntity.setHwVersion(tr069DeviceDetails.getHardwareVersion());\r
+    }\r
+\r
+    return tr069DeviceEntity;\r
+  }\r
+\r
+  /**\r
+   * A utility method to convert the Domain object to DTO\r
+   * \r
+   * @param entity\r
+   * @return\r
+   */\r
+  public static TR069DeviceDetails convertToDTO(TR069DeviceEntity entity) {\r
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+\r
+    tr069DeviceDetails.setDeviceId(entity.getDeviceId());\r
+    tr069DeviceDetails.setUsername(entity.getUserName());\r
+    tr069DeviceDetails.setPassword(entity.getPassword());\r
+    tr069DeviceDetails.setSoftwareVersion(entity.getSwVersion());\r
+    tr069DeviceDetails.setHardwareVersion(entity.getHwVersion());\r
+    tr069DeviceDetails.setConnectionRequestURL(entity.getConnectionReqURL());\r
+\r
+    return tr069DeviceDetails;\r
+  }\r
+\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069RequestProcessorCacheUtil.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069RequestProcessorCacheUtil.java
new file mode 100644 (file)
index 0000000..348d6c8
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.util;\r
+\r
+import org.commscope.tr069adapter.acs.requestprocessor.dto.TR069RequestProcessorData;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.support.TransactionSynchronization;\r
+\r
+@Component\r
+public class TR069RequestProcessorCacheUtil implements TransactionSynchronization {\r
+\r
+  private static final Logger logger =\r
+      LoggerFactory.getLogger(TR069RequestProcessorCacheUtil.class);\r
+\r
+  private static ThreadLocal<TR069RequestProcessorData> threadLocalCache = new ThreadLocal<>();\r
+\r
+  public void put(TR069RequestProcessorData tR069RequestProcessorData) {\r
+\r
+    try {\r
+      logger.debug("Entering put");\r
+      threadLocalCache.set(tR069RequestProcessorData);\r
+    } catch (Exception e) {\r
+      throw new IllegalStateException(e.getMessage());\r
+    }\r
+  }\r
+\r
+  public static TR069RequestProcessorData get() {\r
+    return threadLocalCache.get();\r
+  }\r
+\r
+  @Override\r
+  public void beforeCompletion() {\r
+    logger.debug("Entering beforeCompletion");\r
+    threadLocalCache.remove();\r
+  }\r
+\r
+  @Override\r
+  public void afterCompletion(int status) {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+\r
+  @Override\r
+  public void afterCommit() {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+\r
+  @Override\r
+  public void beforeCommit(boolean arg0) {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+\r
+  @Override\r
+  public void flush() {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+\r
+  @Override\r
+  public void resume() {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+\r
+  @Override\r
+  public void suspend() {\r
+    throw new UnsupportedOperationException();\r
+  }\r
+}\r
diff --git a/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069RequestProcessorUtility.java b/acs/requestprocessor/src/main/java/org/commscope/tr069adapter/acs/requestprocessor/util/TR069RequestProcessorUtility.java
new file mode 100644 (file)
index 0000000..3c80090
--- /dev/null
@@ -0,0 +1,348 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.acs.requestprocessor.util;\r
+\r
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;\r
+\r
+import com.google.gson.Gson;\r
+import com.google.gson.reflect.TypeToken;\r
+\r
+import java.lang.reflect.Type;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.OperationCode;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;\r
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
+\r
+public class TR069RequestProcessorUtility {\r
+\r
+  protected static final int BLOCK_SIZE = 3999;\r
+  protected static final int MAX_SIZE = 11998;\r
+\r
+  private TR069RequestProcessorUtility() {\r
+    super();\r
+  }\r
+\r
+  /**\r
+   * Converts entity object to DTO\r
+   * \r
+   * @param entityList\r
+   * @return\r
+   */\r
+  public static DeviceRPCRequest convertToDTO(List<TR069DeviceRPCRequestEntity> entityList) {\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    OperationDetails operationDetails = new TR069OperationDetails();\r
+\r
+    boolean isCustomOperation = true;\r
+    OperationCode opCode = null;\r
+\r
+    TR069DeviceRPCRequestEntity entity = entityList.get(0);\r
+    if (CustomOperationCode.getByOperationCode(entity.getOpCode()) != null) {\r
+      opCode = CustomOperationCode.getByOperationCode(entity.getOpCode());\r
+    } else {\r
+      opCode = TR069OperationCode.getByOperationCode(entity.getOpCode());\r
+      isCustomOperation = false;\r
+    }\r
+\r
+    operationDetails.setOpCode(opCode);\r
+    dtoFromEntityJson(operationDetails, entityList, isCustomOperation);\r
+    deviceRPCRequest.setOpDetails(operationDetails);\r
+\r
+    OperationOptions opOptions = new OperationOptions();\r
+    opOptions.setExecutionTimeout(entity.getRequestTimeOut());\r
+    deviceRPCRequest.setOptions(opOptions);\r
+\r
+    TR069DeviceDetails deviceDetails = new TR069DeviceDetails();\r
+    deviceDetails.setDeviceId(entity.getDeviceId());\r
+\r
+    deviceRPCRequest.setDeviceDetails(deviceDetails);\r
+    deviceRPCRequest.setOperationId(entity.getOperationId());\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  /**\r
+   * Converts DTO to entity object\r
+   * \r
+   * @param deviceRPCRequest\r
+   * @return\r
+   * @throws TR069EventProcessingException\r
+   */\r
+  public static List<TR069DeviceRPCRequestEntity> convertToEntity(DeviceRPCRequest deviceRPCRequest)\r
+      throws TR069EventProcessingException {\r
+\r
+    if (deviceRPCRequest.getOpDetails() == null\r
+        || deviceRPCRequest.getOpDetails().getOpCode() == null) {\r
+      throw new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);\r
+    }\r
+\r
+    Integer opCode = null;\r
+    boolean isCustomOperation = true;\r
+    OperationCode operationCode = deviceRPCRequest.getOpDetails().getOpCode();\r
+    if (CustomOperationCode.getByOperationCode(operationCode.getOperationCode()) != null) {\r
+      CustomOperationCode customOperationCode =\r
+          CustomOperationCode.getByOperationCode(operationCode.getOperationCode());\r
+      opCode = customOperationCode.getOperationCode();\r
+    } else {\r
+      TR069OperationCode tr069OperationCode =\r
+          (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();\r
+      opCode = tr069OperationCode.getOperationCode();\r
+      isCustomOperation = false;\r
+    }\r
+\r
+    String paramListJSON = paramListToJson(deviceRPCRequest, isCustomOperation);\r
+    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities =\r
+        getTR069DeviceRPCRequestEntities(paramListJSON);\r
+\r
+    for (TR069DeviceRPCRequestEntity entity : tr069DeviceRPCRequestEntities) {\r
+      entity.setOpCode(opCode);\r
+      entity.setCreateTime(new Date());\r
+      entity.setDeviceId(deviceRPCRequest.getDeviceDetails().getDeviceId());\r
+      entity.setOperationId(deviceRPCRequest.getOperationId());\r
+      entity.setIsProcessed(0);\r
+      if (deviceRPCRequest.getOptions() != null\r
+          && deviceRPCRequest.getOptions().getExecutionTimeout() != 0L) {\r
+        entity.setRequestTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());\r
+      } else {\r
+        entity.setRequestTimeOut(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);\r
+        OperationOptions options = new OperationOptions();\r
+        options.setExecutionTimeout(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);\r
+        deviceRPCRequest.setOptions(options);\r
+      }\r
+    }\r
+\r
+    return tr069DeviceRPCRequestEntities;\r
+  }\r
+\r
+  /**\r
+   * @param entity\r
+   * @param dto\r
+   * @param isCustomOperation\r
+   */\r
+  private static String paramListToJson(DeviceRPCRequest dto, boolean isCustomOperation) {\r
+    String attrJsonString = null;\r
+    if (isCustomOperation) {\r
+      TR069OperationDetails operationDetails = (TR069OperationDetails) dto.getOpDetails();\r
+      StringBuilder buffer = new StringBuilder();\r
+\r
+      List<ParameterDTO> deletParamList = operationDetails.getDeleteParamList();\r
+      List<ParameterDTO> modifyParamList = operationDetails.getModifyParamList();\r
+      List<ParameterDTO> setParamList = operationDetails.getSetParamList();\r
+\r
+      if (deletParamList != null && !deletParamList.isEmpty()) {\r
+        convertBooleanValues(deletParamList);\r
+        buffer.append(toJson(deletParamList));\r
+      } else {\r
+        buffer.append(toJson(new ArrayList<>()));\r
+      }\r
+\r
+      if (modifyParamList != null && !modifyParamList.isEmpty()) {\r
+        convertBooleanValues(modifyParamList);\r
+        buffer.append(toJson(modifyParamList));\r
+      } else {\r
+        buffer.append(toJson(new ArrayList<>()));\r
+      }\r
+\r
+      if (setParamList != null && !setParamList.isEmpty()) {\r
+        convertBooleanValues(setParamList);\r
+        buffer.append(toJson(setParamList));\r
+      } else {\r
+        buffer.append(toJson(new ArrayList<>()));\r
+      }\r
+\r
+      attrJsonString = buffer.toString();\r
+    } else {\r
+      List<ParameterDTO> parameterDTOs = dto.getOpDetails().getParmeters();\r
+      attrJsonString = toJson(parameterDTOs);\r
+    }\r
+\r
+    return attrJsonString;\r
+  }\r
+\r
+  /**\r
+   * @param paramListJSON\r
+   * @return\r
+   */\r
+  private static List<TR069DeviceRPCRequestEntity> getTR069DeviceRPCRequestEntities(\r
+      String paramListJSON) {\r
+    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities = new ArrayList<>();\r
+\r
+    if (paramListJSON.length() < MAX_SIZE) {\r
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+      entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, 0));\r
+      entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, 1));\r
+      entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, 2));\r
+\r
+      tr069DeviceRPCRequestEntities.add(entity);\r
+    } else {\r
+      int noOfEntities = 0;\r
+      while (true) {\r
+        int i = 3 * noOfEntities;\r
+        TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
+        entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, i));\r
+        entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, ++i));\r
+        entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, ++i));\r
+\r
+        if (entity.getAttributeJson1() != null) {\r
+          tr069DeviceRPCRequestEntities.add(entity);\r
+        }\r
+\r
+        if (entity.getAttributeJson1() == null || entity.getAttributeJson2() == null\r
+            || entity.getAttributeJson3() == null) {\r
+          break;\r
+        }\r
+\r
+        noOfEntities++;\r
+      }\r
+\r
+    }\r
+    return tr069DeviceRPCRequestEntities;\r
+  }\r
+\r
+  /**\r
+   * @param eventData\r
+   * @param blockNum\r
+   * @return\r
+   */\r
+  private static String getAttriuteJsonData(String eventData, int blockNum) {\r
+    int eventDataSize = eventData.length();\r
+    int startIndex = blockNum * BLOCK_SIZE;\r
+    if (startIndex > eventDataSize) {\r
+      return null;\r
+    }\r
+    int endIndex = startIndex + BLOCK_SIZE;\r
+    endIndex = endIndex < eventDataSize ? endIndex : eventDataSize;\r
+    return eventData.substring(startIndex, endIndex);\r
+  }\r
+\r
+  /**\r
+   * @param opDetails\r
+   * @param entity\r
+   * @param isCustomOperation\r
+   */\r
+  private static void dtoFromEntityJson(OperationDetails opDetails,\r
+      List<TR069DeviceRPCRequestEntity> entityList, boolean isCustomOperation) {\r
+    StringBuilder sb = new StringBuilder();\r
+    for (TR069DeviceRPCRequestEntity entity : entityList) {\r
+      append(sb, entity.getAttributeJson1());\r
+      append(sb, entity.getAttributeJson2());\r
+      append(sb, entity.getAttributeJson3());\r
+    }\r
+\r
+    if (isCustomOperation) {\r
+      String[] splitStringArray = sb.toString().split("]\\[");\r
+      List<ParameterDTO> deleteParamList = new ArrayList<>();\r
+      List<ParameterDTO> modifyParamList = new ArrayList<>();\r
+      List<ParameterDTO> setParamList = new ArrayList<>();\r
+      for (int i = 0; i < splitStringArray.length; i++) {\r
+        String data = splitStringArray[i];\r
+        if (i == 0) {\r
+          data = data + "]";\r
+          deleteParamList.addAll(fromJson(data));\r
+        } else if ((i + 1) == splitStringArray.length) {\r
+          data = "[" + data;\r
+          setParamList.addAll(fromJson(data));\r
+        } else {\r
+          data = "[" + data + "]";\r
+          modifyParamList.addAll(fromJson(data));\r
+        }\r
+      }\r
+      TR069OperationDetails tr069OperationDetails = (TR069OperationDetails) opDetails;\r
+      tr069OperationDetails.setDeleteParamList(deleteParamList);\r
+      tr069OperationDetails.setModifyParamList(modifyParamList);\r
+      tr069OperationDetails.setSetParamList(setParamList);\r
+    } else {\r
+      if (TR069OperationCode.SET_PARAMETER_ATTRIBUTES.equals(opDetails.getOpCode())) {\r
+        List<ParameterDTO> list = fromJsonToParameterAttribute(sb.toString());\r
+        opDetails.setParmeters(list);\r
+      } else {\r
+        List<ParameterDTO> list = fromJson(sb.toString());\r
+        opDetails.setParmeters(list);\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param sb\r
+   * @param temp\r
+   */\r
+  private static void append(StringBuilder sb, String temp) {\r
+    if (temp != null && !temp.isEmpty()) {\r
+      sb.append(temp);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param jsonString\r
+   * @return\r
+   */\r
+  private static List<ParameterDTO> fromJson(String jsonString) {\r
+    Gson gson = new Gson();\r
+    Type collectionType = new TypeToken<List<ParameterDTO>>() {}.getType();\r
+    return gson.fromJson(jsonString, collectionType);\r
+  }\r
+\r
+  /**\r
+   * @param jsonString\r
+   * @return\r
+   */\r
+  private static List<ParameterDTO> fromJsonToParameterAttribute(String jsonString) {\r
+    Gson gson = new Gson();\r
+    Type collectionType = new TypeToken<List<ParameterAttributeDTO>>() {}.getType();\r
+    return gson.fromJson(jsonString, collectionType);\r
+  }\r
+\r
+  /**\r
+   * @param entity\r
+   * @return\r
+   */\r
+  private static <T> String toJson(T entity) {\r
+    Gson gson = new Gson();\r
+    return gson.toJson(entity);\r
+  }\r
+\r
+  /**\r
+   * @param parameterDTOs\r
+   */\r
+  private static void convertBooleanValues(List<ParameterDTO> parameterDTOs) {\r
+    for (ParameterDTO param : parameterDTOs) {\r
+      if (param.getDataType() != null && param.getDataType().equalsIgnoreCase("boolean")) {\r
+        if (param.getParamValue() != null && (param.getParamValue().equalsIgnoreCase("true")\r
+            || param.getParamValue().equalsIgnoreCase("1"))) {\r
+          param.setParamValue("1");\r
+        } else {\r
+          param.setParamValue("0");\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/common/pom.xml b/common/pom.xml
new file mode 100644 (file)
index 0000000..acde4a9
--- /dev/null
@@ -0,0 +1,91 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter.common</groupId>\r
+   <artifactId>common</artifactId>\r
+   <name>common utility</name>\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.lmax</groupId>\r
+         <artifactId>disruptor</artifactId>\r
+         <version>3.4.2</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-quartz</artifactId>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/ExecutionContext.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/ExecutionContext.java
new file mode 100644 (file)
index 0000000..f3305d2
--- /dev/null
@@ -0,0 +1,135 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_APPENDER;\r
+\r
+import java.io.Serializable;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+public class ExecutionContext implements Serializable {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = 8182423848241219082L;\r
+\r
+  /**\r
+   * String representing the bean id which by which is job is configured in the spring container.\r
+   */\r
+  private String subSystemName;\r
+\r
+  private String jobName;\r
+\r
+  private String jobId;\r
+\r
+  private String jobGroup;\r
+\r
+  /**\r
+   * Constructor for getting the execution context object. Need to pass a string which represents\r
+   * the bean id that is configured in spring container.\r
+   * \r
+   * @param subSystemName - String object which is bean id of the job that is to be executed.\r
+   */\r
+  public ExecutionContext(String subSystemName, String jobName) {\r
+    if (null == subSystemName || "".equals(subSystemName))\r
+      throw new InstantiationError("Subsystem name Can not be null or empty");\r
+    this.subSystemName = subSystemName;\r
+    if (null == jobName || "".equals(jobName))\r
+      throw new InstantiationError("Job name Can not be null or empty");\r
+    this.jobName = jobName;\r
+  }\r
+\r
+  /**\r
+   * Constructor for getting the execution context object. Need to pass a string which represents\r
+   * the bean id that is configured in spring container.\r
+   * \r
+   * @param subSystemName - String object which is bean id of the job that is to be executed.\r
+   */\r
+  public ExecutionContext(String jobId, String subSystemName, String jobName) {\r
+    if (null == subSystemName || "".equals(subSystemName))\r
+      throw new InstantiationError("Subsystem name Can not be null or empty");\r
+    this.subSystemName = subSystemName;\r
+    if (null == jobName || "".equals(jobName))\r
+      throw new InstantiationError("Job name Can not be null or empty");\r
+    this.jobName = jobName;\r
+    this.jobId = jobId;\r
+  }\r
+\r
+  public String getJobName() {\r
+    return jobName;\r
+  }\r
+\r
+  public String getSubSystemName() {\r
+    return subSystemName;\r
+  }\r
+\r
+  private Map<String, Object> context = new HashMap<>();\r
+\r
+  /**\r
+   * Can be used to get some job related data, at the time of job execution.\r
+   * \r
+   * @param key\r
+   * @return\r
+   */\r
+  public Object getJobData(String key) {\r
+    return context.get(key);\r
+  }\r
+\r
+  /**\r
+   * Can be used add some job related data at the time of scheduling the job. Note: This data can be\r
+   * retrieved later at the time of execution by the Job implementation.\r
+   * \r
+   * @param key\r
+   * @param value\r
+   */\r
+  public void addJobData(String key, Object value) {\r
+    context.put(key, value);\r
+  }\r
+\r
+  /**\r
+   * This method can be used to get the all the job data parameter names which can be used to\r
+   * iterate through the all job data parameters.\r
+   * \r
+   * @return - String set.\r
+   */\r
+  public Set<String> getJobDatakeySet() {\r
+    return context.keySet();\r
+  }\r
+\r
+  public String getJobId() {\r
+    int index = jobId.lastIndexOf(JOB_APPENDER);\r
+    if (index > -1) {\r
+      jobId = jobId.substring(0, index);\r
+    }\r
+    return jobId; // remove appender\r
+  }\r
+\r
+  public String getJobGroup() {\r
+    return jobGroup;\r
+  }\r
+\r
+  public void setJobGroup(String jobGroup) {\r
+    this.jobGroup = jobGroup;\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/Job.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/Job.java
new file mode 100644 (file)
index 0000000..d995812
--- /dev/null
@@ -0,0 +1,30 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+/**\r
+ * The interface to be implemented by classes which represent a 'job' to be performed. Instances of\r
+ * Job must have a public no-argument constructor. JobContext provides a mechanism for 'instance\r
+ * member data' that may be required by some implementations of this interface.\r
+ * \r
+ * \r
+ */\r
+public interface Job {\r
+  public void execute(ExecutionContext context);\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/JobInfo.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/JobInfo.java
new file mode 100644 (file)
index 0000000..937006e
--- /dev/null
@@ -0,0 +1,60 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+import java.io.Serializable;\r
+\r
+public class JobInfo implements Serializable {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = -238097326157092042L;\r
+  private String jobName;\r
+  private boolean isEnabled;\r
+  private TriggerInfo triggerInfo;\r
+\r
+  public JobInfo() {\r
+    super();\r
+  }\r
+\r
+  public TriggerInfo getTriggerInfo() {\r
+    return triggerInfo;\r
+  }\r
+\r
+  public void setTriggerInfo(TriggerInfo triggerInfo) {\r
+    this.triggerInfo = triggerInfo;\r
+  }\r
+\r
+  public String getJobName() {\r
+    return jobName;\r
+  }\r
+\r
+  public void setJobName(String jobName) {\r
+    this.jobName = jobName;\r
+  }\r
+\r
+  public boolean isEnabled() {\r
+    return isEnabled;\r
+  }\r
+\r
+  public void setEnabled(boolean isEnabled) {\r
+    this.isEnabled = isEnabled;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerError.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerError.java
new file mode 100644 (file)
index 0000000..7dd7a85
--- /dev/null
@@ -0,0 +1,79 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+public enum SchedulerError {\r
+\r
+  INVALID_STARTDATE("QRTZ_01", "Given date is past date",\r
+      "Please provide a future date"), INVALID_TIME_INTERVAL("QRTZ_02",\r
+          "Invalid provided is zero or negative",\r
+          "Provide positive interval"), INVALID_ENDDATE("QRTZ_03", "Given date is past date",\r
+              "Please provide a future date"), UNKNOWN_ERROR("QRTZ_04", "Unexpected Exception",\r
+                  "Please see the system logs for more details."), INVALID_CRON_EXPRESSION(\r
+                      "QRTZ_05", "Not a valid cron expression",\r
+                      "Please provide valid cron expression for schedule"), SCHEDULE_DOES_NOT_EXIST(\r
+                          "QRTZ_06", "Schedule name provided does not exist",\r
+                          "Please provide a valid schedule name"), SCHEDULE_EXIST_ALREADY("QRTZ_07",\r
+                              "Schedule name provided is already exist in the system",\r
+                              "Please modify the existing or add new job with different name."), JOB_EXECUTION_ERROR(\r
+                                  "QRTZ_08", "Unexepcted exeception while executing the job",\r
+                                  "Please look in to system logs for more information"), DATABASE_ERROR(\r
+                                      "QRTZ_09", "There database problem with Sheduling",\r
+                                      "please see the logs for more information"), INVALID_CONFIG(\r
+                                          "QRTZ_10",\r
+                                          "There is some problem with Quartz scheduler configuration.",\r
+                                          "Please look in to system logs for more information "), INTERRUPT_ERROR(\r
+                                              "QRTZ_11", "Not able to interrupt the running job",\r
+                                              "Please look in  to system logs for more information");\r
+\r
+\r
+  private String errorCode;\r
+  private String errorDescription;\r
+  private String resolution;\r
+\r
+  SchedulerError(String errorCode, String errorDescription, String resolution) {\r
+    this.errorCode = errorCode;\r
+    this.errorDescription = errorDescription;\r
+    this.resolution = resolution;\r
+  }\r
+\r
+  public String getErrorCode() {\r
+    return errorCode;\r
+  }\r
+\r
+  public String getErrorMessage() {\r
+    return errorDescription;\r
+  }\r
+\r
+  public String getResolution() {\r
+    return resolution;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    StringBuilder str =\r
+        new StringBuilder("**********************************************************\n");\r
+    str.append("* Error Code : " + errorCode + " *\n");\r
+    str.append("* Error : " + errorDescription + " *\n");\r
+    str.append("* Resolution : " + resolution + " *\n");\r
+    str.append("**********************************************************");\r
+    return str.toString();\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerException.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerException.java
new file mode 100644 (file)
index 0000000..e48ae04
--- /dev/null
@@ -0,0 +1,48 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+public class SchedulerException extends Exception {\r
+\r
+  private static final long serialVersionUID = 5771473896803533006L;\r
+  private final SchedulerError scheduleError;\r
+\r
+  public SchedulerException(SchedulerError scheduleError) {\r
+    super(scheduleError.getErrorMessage());\r
+    this.scheduleError = scheduleError;\r
+  }\r
+\r
+  /**\r
+   * Returns the object which provides more details about the error, error code and possible\r
+   * resolution.\r
+   * \r
+   * @return - Object representing the Error. This object can be queried to get error info, error\r
+   *         code and possible resolution.\r
+   */\r
+  public SchedulerError getScheduleError() {\r
+    return scheduleError;\r
+  }\r
+\r
+  @Override\r
+  public String getMessage() {\r
+    return scheduleError.toString();\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerManager.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/SchedulerManager.java
new file mode 100644 (file)
index 0000000..f2f4db5
--- /dev/null
@@ -0,0 +1,280 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+public interface SchedulerManager {\r
+\r
+  /**\r
+   * Add the given job to the scheduler along with trigger details provided. This method is used to\r
+   * run the job repeatedly at a given time interval. It throws an scheduler exception in case any\r
+   * problem with the given data or some unexpected exception occurred while adding the job to the\r
+   * scheduler.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param triggerInfo - object contains the information about the trigger of this particular job.\r
+   * @param jobContext - jobContext information which can be passed at the time of scheduling the\r
+   *        job. Note that it is strictly recommended to put only primitive types in this map.\r
+   *        Putting objects are not recommended.\r
+   * \r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void scheduleJob(String jobName, TriggerInfo triggerInfo, ExecutionContext jobContext)\r
+      throws SchedulerException;\r
+\r
+  /**\r
+   * Add the given job to the scheduler along with trigger details provided. This method is used to\r
+   * run the job repeatedly at a given time interval. It throws an scheduler exception in case any\r
+   * problem with the given data or some unexpected exception occurred while adding the job to the\r
+   * scheduler.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job *\r
+   * @param triggerInfo - object contains the information about the trigger of this particular job.\r
+   * @param jobContext - jobContext information which can be passed at the time of scheduling the\r
+   *        job. Note that it is strictly recommended to put only primitive types in this map.\r
+   *        Putting objects are not recommended.\r
+   * \r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void scheduleJob(String jobName, String jobGroup, TriggerInfo triggerInfo,\r
+      ExecutionContext jobContext) throws SchedulerException;\r
+\r
+  /**\r
+   * Add the given job to the scheduler along with trigger details provided. This method is used to\r
+   * run the job repeatedly at a given time interval. It throws an scheduler exception in case any\r
+   * problem with the given data or some unexpected exception occurred while adding the job to the\r
+   * scheduler.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param triggerInfo - object contains the information about the trigger of this particular job.\r
+   * @param expiredTriggerInfo - object contains the information about the trigger of this\r
+   *        particular job which will mark it to expire after end time.\r
+   * @param jobContext - jobContext information which can be passed at the time of scheduling the\r
+   *        job. Note that it is strictly recommended to put only primitive types in this map.\r
+   *        Putting objects are not recommended.\r
+   * @param expiredExecutionContext - expiredExecutionContext information which can be passed at the\r
+   *        time of scheduling the job. Note that it is strictly recommended to put only primitive\r
+   *        types in this map. Putting objects are not recommended.\r
+   * \r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void scheduleJob(String jobName, String jobGroup, TriggerInfo triggerInfo,\r
+      ExecutionContext jobContext, TriggerInfo expiredTriggerInfo,\r
+      ExecutionContext expiredExecutionContext) throws SchedulerException;\r
+\r
+  /**\r
+   * Modifies the existing scheduled job which causes the changes in the job execution times as per\r
+   * the given data.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param triggerInfo - object contains the information about the trigger of this particular job.\r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void modifySchedule(String jobName, TriggerInfo triggerInfo) throws SchedulerException;\r
+\r
+  /**\r
+   * Modifies the existing scheduled job which causes the changes in the job execution times as per\r
+   * the given data.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job\r
+   * @param triggerInfo - object contains the information about the trigger of this particular job.\r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void modifySchedule(String jobName, String jobGroup, TriggerInfo triggerInfo)\r
+      throws SchedulerException;\r
+\r
+  public void modifySchedule(String jobName, String jobGroup, TriggerInfo triggerInfo,\r
+      TriggerInfo expiredTriggerInfo, ExecutionContext expiredExecutionContext)\r
+      throws SchedulerException;\r
+\r
+  /**\r
+   * Returns the list of scheduled jobs along with the job details such as the job status\r
+   * (enabled/disabled) etc..\r
+   * \r
+   * @return\r
+   */\r
+  public List<JobInfo> getJobList();\r
+\r
+  /**\r
+   * Returns the job details for a given job name such as the job status (enabled/disabled) etc..\r
+   * \r
+   * @return\r
+   */\r
+  public JobInfo getJobInfo(String jobId);\r
+\r
+  /**\r
+   * Removes the given job from the schedule. Throws an exceptions in case the job does not exist.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * \r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void deleteSchedule(String jobName) throws SchedulerException;\r
+\r
+  /**\r
+   * Removes the given job from the schedule. Throws an exceptions in case the job does not exist.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job\r
+   * @throws SchedulerException - An object representing the error details which caused the problem\r
+   *         while scheduling the job.\r
+   */\r
+  public void deleteSchedule(String jobName, String jobGroup) throws SchedulerException;\r
+\r
+  /**\r
+   * Checks if the given job is enabled or not.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @return - returns true if job is enabled. False otherwise.\r
+   */\r
+  public boolean isJobEnabled(String jobName);\r
+\r
+  /**\r
+   * Checks if the given job is enabled or not.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job\r
+   * @return - returns true if job is enabled. False otherwise.\r
+   */\r
+  public boolean isJobEnabled(String jobName, String jobGroup);\r
+\r
+  /**\r
+   * Enables the given job. Throws an exception in case job does not exist.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * \r
+   * @throws SchedulerException\r
+   */\r
+  public void enableJob(String jobName) throws SchedulerException;\r
+\r
+  /**\r
+   * Enables the given job. Throws an exception in case job does not exist.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job\r
+   * \r
+   * @throws SchedulerException\r
+   */\r
+  public void enableJob(String jobName, String jobGroup) throws SchedulerException;\r
+\r
+  /**\r
+   * Disables the given job. throws an exception in case the job does not exist.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * \r
+   * @throws SchedulerException\r
+   */\r
+  public void disableJob(String jobName) throws SchedulerException;\r
+\r
+  /**\r
+   * Disables the given job. throws an exception in case the job does not exist.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job\r
+   * @throws SchedulerException\r
+   */\r
+  public void disableJob(String jobName, String jobGroup) throws SchedulerException;\r
+\r
+  /**\r
+   * Checks if the job is present already in the system or not.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @return - returns false if job is not present in the system.\r
+   * @throws SchedulerException\r
+   */\r
+  public boolean isJobExist(String jobName) throws SchedulerException;\r
+\r
+  /**\r
+   * Checks if the job is present already in the system or not.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @param jobGroup - String object representing the job group. which can be used later to query\r
+   *        the job\r
+   * @return - returns false if job is not present in the system.\r
+   * @throws SchedulerException\r
+   */\r
+  public boolean isJobExist(String jobName, String jobGroup) throws SchedulerException;\r
+\r
+  public JobInfo getJobInfo(String jobId, String string);\r
+\r
+  /**\r
+   * Checks if the job schedule exists in the system or not.\r
+   * \r
+   * @param jobName - String object representing the job name. which can be used later to query the\r
+   *        job\r
+   * @return - returns false if job is not present in the system.\r
+   * @throws SchedulerException\r
+   */\r
+  public boolean isJobScheduleExist(String jobName, String jobGroup) throws SchedulerException;\r
+\r
+  public void updateJobData(String jobName, String jobGroup, Map<String, Object> jobData)\r
+      throws SchedulerException;\r
+\r
+  public Map<String, Object> getJobData(String jobName, String jobGroup) throws SchedulerException;\r
+\r
+  public void deleteJobData(String jobName, String jobGroup, Set<String> keys)\r
+      throws SchedulerException;\r
+\r
+  public boolean resumeQuartzSchedulars() throws SchedulerException;\r
+\r
+  public boolean stopQuartzSchedulars() throws SchedulerException;\r
+\r
+  public void switchToStandby() throws SchedulerException;\r
+\r
+  public void switchToActive() throws SchedulerException;\r
+\r
+  public boolean isQuartzRunninginActiveMode();\r
+\r
+  void deleteSchedule(String startJobName, String endJobName, String monitorJobName,\r
+      String jobGroup) throws SchedulerException;\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/TimeUnit.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/TimeUnit.java
new file mode 100644 (file)
index 0000000..d549820
--- /dev/null
@@ -0,0 +1,38 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+public enum TimeUnit {\r
+  SECONDS(1000), MINUTES(60 * 1000L), HOURS(60 * 60 * 1000L), DAYS, MILLISECONDS(1);\r
+\r
+  long timeInMillis;\r
+\r
+  private TimeUnit() {\r
+\r
+  }\r
+\r
+  private TimeUnit(long timeInMillis) {\r
+    this.timeInMillis = timeInMillis;\r
+  }\r
+\r
+  public long getMilliSeconds() {\r
+    return timeInMillis;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/TriggerInfo.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/TriggerInfo.java
new file mode 100644 (file)
index 0000000..75358da
--- /dev/null
@@ -0,0 +1,153 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+import org.apache.logging.log4j.core.util.CronExpression;\r
+\r
+public class TriggerInfo implements Serializable {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = 6020368636888997385L;\r
+\r
+  /**\r
+   * Date representing the start of the job that is to be scheduled. If not provided it assumes the\r
+   * current time as the start time.\r
+   */\r
+  private Date startDate = null;\r
+\r
+  /**\r
+   * Object which represent the time unit in which the interval to be calculated for periodic jobs.\r
+   * default is days.\r
+   */\r
+  private TimeUnit timeUnit = TimeUnit.DAYS;\r
+\r
+  /**\r
+   * long represents the interval.Which scheduling the jobs this property along with timeUnit is\r
+   * used to calculate the interval in between job executions for periodic jobs.\r
+   */\r
+  private long interval = -1;\r
+\r
+  /**\r
+   * Date representing the end date of the scheduled periodic jobs. If there is not end date is\r
+   * provided then scheduling will be executed forever for every periodic interval.Periodic interval\r
+   * is calculated using interval and Timeunit properties of this object.\r
+   */\r
+  private Date endDate = null;\r
+\r
+  /**\r
+   * This string representing valid cron expression to run Cron Triggger type of jobs. If the string\r
+   * which is set is not a valid cron expression it will throw an scheduler exception indicating\r
+   * invalid cron expression..\r
+   */\r
+  private String cronExpr = null;\r
+\r
+  private Date nextFireTime = null;\r
+\r
+  public Date getNextFireTime() {\r
+    return nextFireTime;\r
+  }\r
+\r
+  public void setNextFireTime(Date nextFireTime) {\r
+    this.nextFireTime = nextFireTime;\r
+  }\r
+\r
+  public Date getEndDate() {\r
+    return endDate;\r
+  }\r
+\r
+  public void setEndDate(Date endDate) {\r
+    this.endDate = endDate;\r
+  }\r
+\r
+  public String getCronExpr() {\r
+    return cronExpr;\r
+  }\r
+\r
+  public void setCronExpr(String cronExpr) throws SchedulerException {\r
+    try {\r
+      new CronExpression(cronExpr);\r
+    } catch (Exception excep) {\r
+      throw new SchedulerException(SchedulerError.INVALID_CRON_EXPRESSION);\r
+    }\r
+    this.cronExpr = cronExpr;\r
+  }\r
+\r
+  public Date getStartDate() {\r
+\r
+    return startDate;\r
+  }\r
+\r
+  public void setStartDate(Date startDate) {\r
+    this.startDate = startDate;\r
+  }\r
+\r
+  public TimeUnit getTimeUnit() {\r
+    return timeUnit;\r
+  }\r
+\r
+  public void setTimeUnit(TimeUnit timeUnit) {\r
+    this.timeUnit = timeUnit;\r
+  }\r
+\r
+  public long getInterval() {\r
+    return interval;\r
+  }\r
+\r
+  public void setInterval(long interval) throws SchedulerException {\r
+    if (interval < -1)\r
+      throw new SchedulerException(SchedulerError.INVALID_TIME_INTERVAL);\r
+    this.interval = interval;\r
+  }\r
+\r
+  public TriggerInfo() {}\r
+\r
+  public TriggerInfo(Date startDate) {\r
+    this.startDate = startDate;\r
+  }\r
+\r
+  public TriggerInfo(Date startDate, long interval) throws SchedulerException {\r
+    this(startDate);\r
+    if (interval < -1)\r
+      throw new SchedulerException(SchedulerError.INVALID_TIME_INTERVAL);\r
+    this.interval = interval;\r
+  }\r
+\r
+  public TriggerInfo(Date startDate, Date endDate, long interval) throws SchedulerException {\r
+    this(startDate, interval);\r
+\r
+    if (endDate.getTime() < startDate.getTime())\r
+      throw new SchedulerException(SchedulerError.INVALID_ENDDATE);\r
+    this.endDate = endDate;\r
+\r
+  }\r
+\r
+  public TriggerInfo(String cronExpression) throws SchedulerException {\r
+    try {\r
+      new CronExpression(cronExpression);\r
+    } catch (Exception excep) {\r
+      throw new SchedulerException(SchedulerError.INVALID_CRON_EXPRESSION);\r
+    }\r
+    this.cronExpr = cronExpression;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzJob.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzJob.java
new file mode 100644 (file)
index 0000000..fc0366c
--- /dev/null
@@ -0,0 +1,91 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_NAME;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.SUB_SYSTEM;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.commscope.tr069adapter.common.scheduler.ExecutionContext;\r
+import org.commscope.tr069adapter.common.scheduler.Job;\r
+import org.quartz.DisallowConcurrentExecution;\r
+import org.quartz.JobDataMap;\r
+import org.quartz.JobExecutionContext;\r
+import org.quartz.JobExecutionException;\r
+import org.quartz.PersistJobDataAfterExecution;\r
+import org.springframework.context.ApplicationContext;\r
+\r
+@PersistJobDataAfterExecution\r
+@DisallowConcurrentExecution\r
+public class QuartzJob implements org.quartz.Job {\r
+\r
+  private static ApplicationContext appctx;\r
+\r
+  private static final Log logger = LogFactory.getLog(QuartzJob.class);\r
+\r
+  protected void executeInternal(JobExecutionContext context) throws JobExecutionException {\r
+    JobDataMap dataMap = null;\r
+    try {\r
+      dataMap = context.getJobDetail().getJobDataMap();\r
+      ExecutionContext jobContext = new ExecutionContext(context.getJobDetail().getKey().getName(),\r
+          dataMap.getString(SUB_SYSTEM), dataMap.getString(JOB_NAME));\r
+      for (String key : dataMap.getKeys()) {\r
+        jobContext.addJobData(key, dataMap.get(key));\r
+      }\r
+      // add scheduling information\r
+      jobContext.addJobData("SCHEDULED_TIME", context.getScheduledFireTime());\r
+      String beanName = jobContext.getJobName();\r
+      Job job = (Job) appctx.getBean(beanName);\r
+      job.execute(jobContext);\r
+\r
+    } catch (Exception exception) {\r
+      if (dataMap != null) {\r
+        logger.error("executeInternal : Executing job " + dataMap.getString(JOB_NAME)\r
+            + ", SubSystem " + dataMap.getString(SUB_SYSTEM));\r
+      }\r
+      logger.error("executeInternal : Could not execute job. Exception while executing the job",\r
+          exception);\r
+      throw new JobExecutionException(exception);\r
+    }\r
+  }\r
+\r
+  public static String getJndiName(String subSystem, String jobName) {\r
+    String jndiName = "csadapter/";\r
+    jndiName += subSystem + "/" + jobName + "#" + Job.class.getName();\r
+    return jndiName;\r
+  }\r
+\r
+  public void execute(JobExecutionContext context) {\r
+    try {\r
+      executeInternal(context);\r
+    } catch (JobExecutionException e) {\r
+      logger.error("Exception : " + e.getMessage());\r
+    }\r
+  }\r
+\r
+  public static void setApplicationContext(ApplicationContext ctx) {\r
+    appctx = ctx;\r
+  }\r
+\r
+  public static ApplicationContext getApplicationContext() {\r
+    return appctx;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerConstants.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerConstants.java
new file mode 100644 (file)
index 0000000..3960e8f
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+public class QuartzSchedulerConstants {\r
+\r
+  private QuartzSchedulerConstants() {}\r
+\r
+  public static final String JOB_NAME = "jobNameKey";\r
+  public static final String SUB_SYSTEM = "subSystemKey";\r
+  public static final String TRIGGER_APPENDER = "_trigger";\r
+  public static final String JOB_APPENDER = "_job";\r
+  public static final String END_TIME_APPENDER = "_expiry";\r
+  public static final String DEVICE_HISTORY = "deviceHistory";\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerManager.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerManager.java
new file mode 100644 (file)
index 0000000..93f3f8a
--- /dev/null
@@ -0,0 +1,813 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.END_TIME_APPENDER;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_APPENDER;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.TRIGGER_APPENDER;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+import java.util.Set;\r
+\r
+import javax.annotation.PostConstruct;\r
+import javax.annotation.PreDestroy;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.commscope.tr069adapter.common.scheduler.ExecutionContext;\r
+import org.commscope.tr069adapter.common.scheduler.JobInfo;\r
+import org.commscope.tr069adapter.common.scheduler.SchedulerError;\r
+import org.commscope.tr069adapter.common.scheduler.SchedulerException;\r
+import org.commscope.tr069adapter.common.scheduler.SchedulerManager;\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.quartz.JobDetail;\r
+import org.quartz.JobExecutionException;\r
+import org.quartz.JobKey;\r
+import org.quartz.JobPersistenceException;\r
+import org.quartz.Scheduler;\r
+import org.quartz.SchedulerConfigException;\r
+import org.quartz.Trigger;\r
+import org.quartz.Trigger.TriggerState;\r
+import org.quartz.TriggerKey;\r
+import org.quartz.UnableToInterruptJobException;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class QuartzSchedulerManager implements SchedulerManager {\r
+\r
+  private static final String EXCEPTION_WHILE_GETTING_GET_JOB_INFO =\r
+      "Exception while getting getJobInfo : ";\r
+\r
+  private static final String ENABLE_JOB_DISABLE_SCHEDULE_FOR_JOB =\r
+      "enableJob : Disable schedule for job ";\r
+\r
+  private static final String METHOD_STARTED = " method started";\r
+\r
+  private static final String EXCEPTION_WHILE_DISABLING_JOB = "Exception while disabling job : ";\r
+\r
+  private static final String EXCEPTION_WHILE_CHECKING_JOB_ENABLE_STATE =\r
+      "Exception while checking job enable state : ";\r
+\r
+  private static final String ENABLE_JOB_ENABLE_SCHEDULE_FOR_JOB =\r
+      "enableJob : Enable schedule for job ";\r
+\r
+  private static final String EXCEPTION_WHILE_GETTING_JOB_LIST =\r
+      "Exception while getting JobList : ";\r
+\r
+  private static final String GET_JOB_LIST_METHOD_ENDED = "getJobList : method ended";\r
+\r
+  private static final String EXCEPTION_WHILE_MODIFYING_SCHEDULE =\r
+      "Exception while modifying schedule : ";\r
+\r
+  private static final String MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB =\r
+      "modifySchedule : Modify schedule for job ";\r
+\r
+  private static final String EXCEPTION_WHILE_DELETING_SCHEDULE =\r
+      "Exception while deleting schedule : ";\r
+\r
+  private static final String DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB =\r
+      "deleteSchedule : Deleting schedule for job ";\r
+\r
+  private static final String EXCEPTION_WHILE_SCHEDULING_JOB_EXCEPTION =\r
+      "Exception while scheduling job. Exception : ";\r
+\r
+  private static final String SUCCESSFULLY_COMPLETED = " successfully completed";\r
+\r
+  private static final String STARTED = " started";\r
+\r
+  private static final String SCHEDULE_JOB_SCHEDUING_JOB = "scheduleJob : Scheduing job ";\r
+\r
+  private static final String QUATZ_SCHEUDLER_FAILED_TO_START_CAUGHT_EXCEPTION =\r
+      "Quatz scheudler failed to start: Caught Exception: ";\r
+\r
+  @Autowired\r
+  private Scheduler quartzScheduler;\r
+\r
+  @Autowired\r
+  QuartzSchedulerProducer quartzSchedulerProducer;\r
+\r
+  private static final Log logger = LogFactory.getLog(QuartzSchedulerManager.class);\r
+\r
+  public void setScheduler(Scheduler scheduler) {\r
+    this.quartzScheduler = scheduler;\r
+  }\r
+\r
+  @Autowired\r
+  QuartzSchedulerUtil schdulerUtil;\r
+\r
+  public void setSchedulerUtil(QuartzSchedulerUtil schedulerUtil) {\r
+    this.schdulerUtil = schedulerUtil;\r
+  }\r
+\r
+  @PostConstruct\r
+  public void init() throws org.quartz.SchedulerException {\r
+    logger.debug("init started");\r
+    try {\r
+      if (!quartzScheduler.isStarted()) {\r
+        logger.debug("Running on active server; hence marking quartz as active service");\r
+        quartzScheduler.start();\r
+      }\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error(QUATZ_SCHEUDLER_FAILED_TO_START_CAUGHT_EXCEPTION + e.getMessage());\r
+      throw e;\r
+    }\r
+\r
+    logger.debug("init complete");\r
+  }\r
+\r
+  @PreDestroy\r
+  public void shutDown() throws org.quartz.SchedulerException {\r
+    try {\r
+      if (!quartzScheduler.isShutdown()) {\r
+        quartzScheduler.shutdown();\r
+      }\r
+\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.debug("Quatz scheudler failed to stop: Caught Exception: " + e.getMessage());\r
+      throw e;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void scheduleJob(String jobName, TriggerInfo triggerInfo, ExecutionContext jobContext)\r
+      throws SchedulerException {\r
+\r
+    logger.debug(SCHEDULE_JOB_SCHEDUING_JOB + jobName + STARTED);\r
+    Trigger trigger = this.getTrigger(jobName);\r
+    if (null != trigger)\r
+      throw new SchedulerException(SchedulerError.SCHEDULE_EXIST_ALREADY);\r
+    try {\r
+      if (quartzScheduler.isInStandbyMode()) {\r
+        logger.debug(\r
+            "scheduleJob : Server running on stand by mode; hence ignore Scheduing job " + jobName);\r
+        return;\r
+      }\r
+\r
+      JobDetail jobDetail = schdulerUtil.getJobDetail(jobContext, jobName);\r
+      trigger = schdulerUtil.createTrigger(triggerInfo, jobName);\r
+      quartzScheduler.scheduleJob(jobDetail, trigger);\r
+      logger.debug(SCHEDULE_JOB_SCHEDUING_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      logger.error(EXCEPTION_WHILE_SCHEDULING_JOB_EXCEPTION + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void scheduleJob(String jobName, String jobGroup, TriggerInfo triggerInfo,\r
+      ExecutionContext jobContext) throws SchedulerException {\r
+\r
+    logger.debug(SCHEDULE_JOB_SCHEDUING_JOB + jobName + STARTED);\r
+    Trigger trigger = this.getTrigger(jobName, jobGroup);\r
+    if (null != trigger)\r
+      throw new SchedulerException(SchedulerError.SCHEDULE_EXIST_ALREADY);\r
+    try {\r
+      if (quartzScheduler.isInStandbyMode()) {\r
+        logger.debug("scheduleJob : Server is running on stand by mode; hence ignore Scheduing job "\r
+            + jobName);\r
+        return;\r
+      }\r
+\r
+      JobDetail jobDetail = schdulerUtil.getJobDetail(jobContext, jobName, jobGroup);\r
+      trigger = schdulerUtil.createTrigger(triggerInfo, jobName, jobGroup);\r
+      quartzScheduler.scheduleJob(jobDetail, trigger);\r
+      logger.debug(SCHEDULE_JOB_SCHEDUING_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      logger.error(EXCEPTION_WHILE_SCHEDULING_JOB_EXCEPTION + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void scheduleJob(String jobName, String jobGroup, TriggerInfo triggerInfo,\r
+      ExecutionContext jobContext, TriggerInfo expiredTriggerInfo,\r
+      ExecutionContext expiredExecutionContext) throws SchedulerException {\r
+\r
+    logger.debug(SCHEDULE_JOB_SCHEDUING_JOB + jobName + STARTED);\r
+    Trigger trigger = this.getTrigger(jobName);\r
+    if (null != trigger)\r
+      throw new SchedulerException(SchedulerError.SCHEDULE_EXIST_ALREADY);\r
+    try {\r
+      if (quartzScheduler.isInStandbyMode()) {\r
+        logger.debug("scheduleJob : Server is running on stand by mode; hence ignore Scheduing job "\r
+            + jobName);\r
+        return;\r
+      }\r
+\r
+      JobDetail jobDetail = schdulerUtil.getJobDetail(jobContext, jobName, jobGroup);\r
+      trigger = schdulerUtil.createTrigger(triggerInfo, jobName, jobGroup);\r
+      quartzScheduler.scheduleJob(jobDetail, trigger);\r
+      if (expiredTriggerInfo != null && expiredExecutionContext != null) {\r
+        if (isJobScheduleExist(jobName + END_TIME_APPENDER, jobGroup)) {\r
+          deleteSchedule(jobName + END_TIME_APPENDER, jobGroup);\r
+        }\r
+        JobDetail expiredJobDetail = schdulerUtil.getJobDetail(expiredExecutionContext,\r
+            jobName + END_TIME_APPENDER, jobGroup);\r
+        Trigger expiredTrigger =\r
+            schdulerUtil.createTrigger(expiredTriggerInfo, jobName + END_TIME_APPENDER, jobGroup);\r
+        quartzScheduler.scheduleJob(expiredJobDetail, expiredTrigger);\r
+      }\r
+      logger.debug(SCHEDULE_JOB_SCHEDUING_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      logger.error(EXCEPTION_WHILE_SCHEDULING_JOB_EXCEPTION + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void deleteSchedule(String jobName) throws SchedulerException {\r
+    try {\r
+      logger.debug(DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+      Trigger trigger = this.getTrigger(jobName);\r
+      if (null == trigger)\r
+        throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      quartzScheduler.unscheduleJob(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName));\r
+      logger.debug(DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DELETING_SCHEDULE + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void modifySchedule(String jobName, TriggerInfo triggerInfo) throws SchedulerException {\r
+\r
+    logger.debug(MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    Trigger trigger = this.getTrigger(jobName);\r
+    if (null == trigger)\r
+      throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+    trigger = schdulerUtil.createTrigger(triggerInfo, jobName);\r
+    try {\r
+      if (quartzScheduler.isInStandbyMode()) {\r
+        logger.debug(\r
+            "modifySchedule : Server is running on stand by mode; hence ignore modifySchedule job "\r
+                + jobName);\r
+      }\r
+\r
+      quartzScheduler.rescheduleJob(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName),\r
+          trigger);\r
+      logger.debug(MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      logger.error(EXCEPTION_WHILE_MODIFYING_SCHEDULE + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void modifySchedule(String jobName, String jobGroup, TriggerInfo triggerInfo,\r
+      TriggerInfo expiredTriggerInfo, ExecutionContext expiredExecutionContext)\r
+      throws SchedulerException {\r
+\r
+    logger.debug(MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    Trigger trigger = this.getTrigger(jobName, jobGroup);\r
+    if (null == trigger)\r
+      throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+    trigger = schdulerUtil.createTrigger(triggerInfo, jobName, jobGroup);\r
+    try {\r
+      quartzScheduler.rescheduleJob(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup),\r
+          trigger);\r
+      Trigger previousExpiredTrig = this.getTrigger(jobName + END_TIME_APPENDER, jobGroup);\r
+      Trigger curExpiredTrigger =\r
+          schdulerUtil.createTrigger(expiredTriggerInfo, jobName + END_TIME_APPENDER, jobGroup);\r
+\r
+      if (previousExpiredTrig != null && expiredTriggerInfo != null) {\r
+        quartzScheduler.rescheduleJob(\r
+            TriggerKey.triggerKey(jobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup),\r
+            curExpiredTrigger);\r
+      } else if (previousExpiredTrig != null) {\r
+        quartzScheduler.unscheduleJob(\r
+            TriggerKey.triggerKey(jobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup));\r
+      } else if (expiredTriggerInfo != null) {\r
+        JobDetail expiredJobDetail = schdulerUtil.getJobDetail(expiredExecutionContext,\r
+            jobName + END_TIME_APPENDER, jobGroup);\r
+        quartzScheduler.scheduleJob(expiredJobDetail, curExpiredTrigger);\r
+      }\r
+\r
+      logger.debug(MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      logger.error(EXCEPTION_WHILE_MODIFYING_SCHEDULE + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public List<JobInfo> getJobList() {\r
+    final String methodName = "getJobList";\r
+    logger.debug(methodName + " : " + METHOD_STARTED);\r
+    List<String> triggerGroups = null;\r
+    List<JobInfo> jobInfoList = new ArrayList<>();\r
+    try {\r
+      triggerGroups = quartzScheduler.getTriggerGroupNames();\r
+      for (String triggerGroup : triggerGroups) {\r
+        Trigger trigger = quartzScheduler\r
+            .getTrigger(TriggerKey.triggerKey(triggerGroup + TRIGGER_APPENDER, triggerGroup));\r
+        JobInfo jobInfo = new JobInfo();\r
+\r
+        jobInfo.setEnabled(isJobEnabled(triggerGroup));\r
+        jobInfo.setJobName(triggerGroup);\r
+        jobInfo.setTriggerInfo(schdulerUtil.getTriggerInfo(trigger));\r
+        jobInfoList.add(jobInfo);\r
+        logger.debug(GET_JOB_LIST_METHOD_ENDED);\r
+      }\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      logger.error(EXCEPTION_WHILE_GETTING_JOB_LIST + exception.getLocalizedMessage());\r
+    }\r
+    return jobInfoList;\r
+  }\r
+\r
+  @Override\r
+  public JobInfo getJobInfo(String jobId) {\r
+    final String methodName = "getJobInfo";\r
+    logger.debug(methodName + " : " + METHOD_STARTED);\r
+    List<String> triggerGroups = null;\r
+    try {\r
+      triggerGroups = quartzScheduler.getTriggerGroupNames();\r
+      for (String triggerGroup : triggerGroups) {\r
+        Trigger trigger = quartzScheduler\r
+            .getTrigger(TriggerKey.triggerKey(triggerGroup + TRIGGER_APPENDER, triggerGroup));\r
+        JobInfo jobInfo = new JobInfo();\r
+\r
+        jobInfo.setEnabled(isJobEnabled(triggerGroup));\r
+        jobInfo.setJobName(triggerGroup);\r
+        jobInfo.setTriggerInfo(schdulerUtil.getTriggerInfo(trigger));\r
+        if (jobId.equals(triggerGroup)) {\r
+          logger.debug(methodName + " : " + "method ended");\r
+          return jobInfo;\r
+        }\r
+      }\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      logger.error(EXCEPTION_WHILE_GETTING_GET_JOB_INFO + exception.getLocalizedMessage());\r
+    }\r
+    logger.debug(methodName + " : " + "method ended");\r
+    return null;\r
+  }\r
+\r
+  Trigger getTrigger(String jobName) {\r
+    Trigger trigger = null;\r
+    try {\r
+      trigger =\r
+          quartzScheduler.getTrigger(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName));\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error(e.getLocalizedMessage());\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+  Trigger getTrigger(String jobName, String jobGroup) {\r
+    Trigger trigger = null;\r
+    try {\r
+      trigger =\r
+          quartzScheduler.getTrigger(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup));\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error(e.getLocalizedMessage());\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+  @Override\r
+  public boolean isJobEnabled(String jobName) {\r
+    boolean retVal = true;\r
+\r
+    try {\r
+      Trigger trigger = getTrigger(jobName);\r
+      if (null == trigger)\r
+        return false;\r
+      retVal = quartzScheduler\r
+          .getTriggerState(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName))\r
+          .equals(TriggerState.PAUSED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      logger.error(EXCEPTION_WHILE_CHECKING_JOB_ENABLE_STATE + exception.getMessage());\r
+    }\r
+    return !retVal;\r
+  }\r
+\r
+  @Override\r
+  public void enableJob(String jobName) throws SchedulerException {\r
+    logger.debug(ENABLE_JOB_ENABLE_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    try {\r
+      Trigger trigger = getTrigger(jobName);\r
+      if (null == trigger)\r
+        throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      if (quartzScheduler\r
+          .getTriggerState(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName))\r
+          .equals(TriggerState.PAUSED))\r
+        quartzScheduler.resumeTrigger(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName));\r
+\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DISABLING_JOB + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+    logger.debug(ENABLE_JOB_ENABLE_SCHEDULE_FOR_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+  }\r
+\r
+  @Override\r
+  public void disableJob(String jobName) throws SchedulerException {\r
+    logger.debug(ENABLE_JOB_DISABLE_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    try {\r
+      Trigger trigger = getTrigger(jobName);\r
+      if (null == trigger)\r
+        throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      if (!quartzScheduler\r
+          .getTriggerState(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName))\r
+          .equals(TriggerState.PAUSED))\r
+        quartzScheduler.pauseTrigger(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobName));\r
+\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DISABLING_JOB + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+    logger.debug(ENABLE_JOB_DISABLE_SCHEDULE_FOR_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+  }\r
+\r
+  private SchedulerException resolveError(org.quartz.SchedulerException excep) {\r
+    SchedulerException schedulerExcep = new SchedulerException(SchedulerError.UNKNOWN_ERROR);\r
+    try {\r
+      throw excep;\r
+    } catch (JobExecutionException jobExec) {\r
+      logger.error("JobExecutionException : " + jobExec.getMessage());\r
+      schedulerExcep = new SchedulerException(SchedulerError.JOB_EXECUTION_ERROR);\r
+    } catch (JobPersistenceException persistenExcep) {\r
+      schedulerExcep = new SchedulerException(SchedulerError.DATABASE_ERROR);\r
+    } catch (SchedulerConfigException configExcep) {\r
+      schedulerExcep = new SchedulerException(SchedulerError.INVALID_CONFIG);\r
+    } catch (UnableToInterruptJobException interruExcep) {\r
+      schedulerExcep = new SchedulerException(SchedulerError.INTERRUPT_ERROR);\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("SchedulerException : " + e.getMessage());\r
+    }\r
+    return schedulerExcep;\r
+  }\r
+\r
+  @Override\r
+  public boolean isJobExist(String jobName) throws SchedulerException {\r
+    Trigger trigger = this.getTrigger(jobName);\r
+    return (null != trigger);\r
+  }\r
+\r
+  @Override\r
+  public void modifySchedule(String jobName, String jobGroup, TriggerInfo triggerInfo)\r
+      throws SchedulerException {\r
+    logger.debug(MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    Trigger trigger = this.getTrigger(jobName, jobGroup);\r
+    if (null == trigger)\r
+      throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+    trigger = schdulerUtil.createTrigger(triggerInfo, jobName, jobGroup);\r
+    try {\r
+      quartzScheduler.rescheduleJob(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup),\r
+          trigger);\r
+      logger.debug(MODIFY_SCHEDULE_MODIFY_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      logger.error(EXCEPTION_WHILE_MODIFYING_SCHEDULE + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  public void deleteSchedule(String jobName, String jobGroup) throws SchedulerException {\r
+    try {\r
+      logger.debug(DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+      Trigger trigger = this.getTrigger(jobName, jobGroup);\r
+      if (null == trigger)\r
+        throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      Trigger endTimeTrigger =\r
+          this.getTrigger(jobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup);\r
+      if (null != endTimeTrigger) {\r
+        quartzScheduler.unscheduleJob(\r
+            TriggerKey.triggerKey(jobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+      quartzScheduler.unscheduleJob(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup));\r
+      logger.debug(DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DELETING_SCHEDULE + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  // Delete all jobs together or nothing.\r
+  // TODO- This need to be taken care by Container-Managed Transactions later\r
+\r
+  @Override\r
+  public void deleteSchedule(String startJobName, String endJobName, String monitorJobName,\r
+      String jobGroup) throws SchedulerException {\r
+    try {\r
+      logger.debug(DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB + startJobName + STARTED);\r
+      Trigger trigger1 = this.getTrigger(startJobName, jobGroup);\r
+      Trigger trigger2 = this.getTrigger(endJobName, jobGroup);\r
+      Trigger trigger3 = this.getTrigger(monitorJobName, jobGroup);\r
+\r
+      Trigger endTimeTrigger1 =\r
+          this.getTrigger(startJobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup);\r
+      Trigger endTimeTrigger2 =\r
+          this.getTrigger(endJobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup);\r
+      Trigger endTimeTrigger3 =\r
+          this.getTrigger(monitorJobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup);\r
+\r
+      logger.debug(DELETE_SCHEDULE_DELETING_SCHEDULE_FOR_JOB + startJobName + ", " + endJobName\r
+          + ", " + monitorJobName + SUCCESSFULLY_COMPLETED);\r
+      if (null != endTimeTrigger1) {\r
+        quartzScheduler.unscheduleJob(\r
+            TriggerKey.triggerKey(startJobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+      if (null != endTimeTrigger2) {\r
+        quartzScheduler.unscheduleJob(\r
+            TriggerKey.triggerKey(endJobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+      if (null != endTimeTrigger3) {\r
+        quartzScheduler.unscheduleJob(\r
+            TriggerKey.triggerKey(monitorJobName + END_TIME_APPENDER + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+      if (null != trigger1) {\r
+        quartzScheduler\r
+            .unscheduleJob(TriggerKey.triggerKey(startJobName + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+      if (null != trigger2) {\r
+        quartzScheduler\r
+            .unscheduleJob(TriggerKey.triggerKey(endJobName + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+      if (null != trigger3) {\r
+        quartzScheduler\r
+            .unscheduleJob(TriggerKey.triggerKey(monitorJobName + TRIGGER_APPENDER, jobGroup));\r
+      }\r
+\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DELETING_SCHEDULE + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public boolean isJobEnabled(String jobName, String jobGroup) {\r
+    boolean retVal = true;\r
+\r
+    try {\r
+      Trigger trigger = getTrigger(jobName, jobGroup);\r
+      if (null == trigger)\r
+        return false;\r
+      retVal = quartzScheduler\r
+          .getTriggerState(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup))\r
+          .equals(TriggerState.PAUSED);\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      logger.error(EXCEPTION_WHILE_CHECKING_JOB_ENABLE_STATE + exception.getMessage());\r
+    }\r
+    return !retVal;\r
+  }\r
+\r
+  @Override\r
+  public void enableJob(String jobName, String jobGroup) throws SchedulerException {\r
+    logger.debug(ENABLE_JOB_ENABLE_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    try {\r
+      Trigger trigger = getTrigger(jobName, jobGroup);\r
+      if (null == trigger)\r
+        throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      if (quartzScheduler\r
+          .getTriggerState(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup))\r
+          .equals(TriggerState.PAUSED))\r
+        quartzScheduler.resumeTrigger(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup));\r
+\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DISABLING_JOB + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+    logger.debug(ENABLE_JOB_ENABLE_SCHEDULE_FOR_JOB + jobName + SUCCESSFULLY_COMPLETED);\r
+\r
+  }\r
+\r
+  @Override\r
+  public void disableJob(String jobName, String jobGroup) throws SchedulerException {\r
+    logger.debug(ENABLE_JOB_DISABLE_SCHEDULE_FOR_JOB + jobName + STARTED);\r
+    try {\r
+      Trigger trigger = getTrigger(jobName, jobGroup);\r
+      if (null == trigger)\r
+        throw new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      if (!quartzScheduler\r
+          .getTriggerState(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup))\r
+          .equals(TriggerState.PAUSED))\r
+        quartzScheduler.pauseTrigger(TriggerKey.triggerKey(jobName + TRIGGER_APPENDER, jobGroup));\r
+\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      SchedulerException scheduleExcep = resolveError(exception);\r
+      if (scheduleExcep.getScheduleError() == SchedulerError.UNKNOWN_ERROR)\r
+        scheduleExcep = new SchedulerException(SchedulerError.SCHEDULE_DOES_NOT_EXIST);\r
+      logger.error(EXCEPTION_WHILE_DISABLING_JOB + exception.getMessage());\r
+      throw scheduleExcep;\r
+    }\r
+    logger.debug(ENABLE_JOB_DISABLE_SCHEDULE_FOR_JOB + jobName + " completed");\r
+\r
+  }\r
+\r
+  @Override\r
+  public boolean isJobExist(String jobName, String jobGroup) throws SchedulerException {\r
+    Trigger trigger = this.getTrigger(jobName, jobGroup);\r
+    return (null != trigger);\r
+  }\r
+\r
+  @Override\r
+  public JobInfo getJobInfo(String jobId, String jobGroup) {\r
+    final String methodName = "getJobInfo";\r
+    logger.debug(methodName + " : " + METHOD_STARTED);\r
+    try {\r
+      TriggerKey triggerKey = TriggerKey.triggerKey(jobId + TRIGGER_APPENDER, jobGroup);\r
+      Trigger trigger = quartzScheduler.getTrigger(triggerKey);\r
+      if (null != trigger) {\r
+        JobInfo jobInfo = new JobInfo();\r
+        TriggerState triggerState = quartzScheduler.getTriggerState(triggerKey);\r
+        jobInfo.setEnabled(TriggerState.PAUSED.equals(triggerState));\r
+        jobInfo.setJobName(jobId);\r
+        jobInfo.setTriggerInfo(schdulerUtil.getTriggerInfo(trigger));\r
+        logger.debug(methodName + " : method ended");\r
+        return jobInfo;\r
+      }\r
+    } catch (org.quartz.SchedulerException exception) {\r
+      logger.error(EXCEPTION_WHILE_GETTING_GET_JOB_INFO + exception.getLocalizedMessage());\r
+    }\r
+    logger.debug(methodName + " : method ended");\r
+    return null;\r
+  }\r
+\r
+  @Override\r
+  public boolean isJobScheduleExist(String jobName, String jobGroup) throws SchedulerException {\r
+    Trigger trigger = this.getTrigger(jobName, jobGroup);\r
+    return null != trigger;\r
+  }\r
+\r
+  @Override\r
+  public void updateJobData(String jobName, String jobGroup, Map<String, Object> jobData)\r
+      throws SchedulerException {\r
+    try {\r
+      JobDetail jobDetail =\r
+          quartzScheduler.getJobDetail(new JobKey(jobName + JOB_APPENDER, jobGroup));\r
+      if (null != jobDetail) {\r
+        for (Entry<String, Object> job : jobData.entrySet()) {\r
+          jobDetail.getJobDataMap().put(job.getKey(), job.getValue());\r
+        }\r
+        quartzScheduler.addJob(jobDetail, true, true);\r
+      }\r
+\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("Failed to update job data", e);\r
+      throw new SchedulerException(SchedulerError.UNKNOWN_ERROR);\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  public Map<String, Object> getJobData(String jobName, String jobGroup) throws SchedulerException {\r
+\r
+    Map<String, Object> jobData = new HashMap<>();\r
+    try {\r
+      JobDetail jobDetail =\r
+          quartzScheduler.getJobDetail(new JobKey(jobName + JOB_APPENDER, jobGroup));\r
+      if (null == jobDetail)\r
+        return jobData;\r
+      for (String key : jobDetail.getJobDataMap().keySet()) {\r
+        jobData.put(key, jobDetail.getJobDataMap().get(key));\r
+      }\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("Failed to get job data", e);\r
+      throw new SchedulerException(SchedulerError.UNKNOWN_ERROR);\r
+    }\r
+    return jobData;\r
+  }\r
+\r
+  @Override\r
+  public void deleteJobData(String jobName, String jobGroup, Set<String> keys)\r
+      throws SchedulerException {\r
+    try {\r
+      JobDetail jobDetail =\r
+          quartzScheduler.getJobDetail(new JobKey(jobName + JOB_APPENDER, jobGroup));\r
+      for (String key : keys) {\r
+        jobDetail.getJobDataMap().remove(key);\r
+      }\r
+      quartzScheduler.addJob(jobDetail, true, true);\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("Failed to update job data", e);\r
+      throw new SchedulerException(SchedulerError.UNKNOWN_ERROR);\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  public boolean resumeQuartzSchedulars() throws SchedulerException {\r
+\r
+    try {\r
+      if (quartzScheduler.isInStandbyMode()) {\r
+        logger.debug("Server is running on active server; hence marking quartz as active service");\r
+        quartzScheduler.start();\r
+      } else if (quartzScheduler.isStarted()) {\r
+        logger.debug("Server is running on active server and quartz already running;");\r
+      }\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error(QUATZ_SCHEUDLER_FAILED_TO_START_CAUGHT_EXCEPTION + e.getMessage());\r
+      throw new SchedulerException(SchedulerError.UNKNOWN_ERROR);\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+  @Override\r
+  public boolean stopQuartzSchedulars() throws SchedulerException {\r
+    try {\r
+\r
+      if (quartzScheduler.isStarted()) {\r
+        logger.debug("DM is running on stand-by server; hence marking quartz as stand-by service");\r
+        quartzScheduler.standby();\r
+      } else {\r
+        logger.debug("DM is running on active server/quartz already running in standby mode;");\r
+      }\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error(QUATZ_SCHEUDLER_FAILED_TO_START_CAUGHT_EXCEPTION + e.getMessage());\r
+      throw new SchedulerException(SchedulerError.UNKNOWN_ERROR);\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+  @Override\r
+  public void switchToStandby() throws SchedulerException {\r
+    try {\r
+      if (null != quartzScheduler) {\r
+        quartzScheduler.shutdown();\r
+      }\r
+      quartzScheduler = quartzSchedulerProducer.getStdScheduler();\r
+      if (null != quartzScheduler)\r
+        quartzScheduler.standby();\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("while switchToStandby SchedulerException : " + e.getMessage());\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void switchToActive() throws SchedulerException {\r
+\r
+    try {\r
+      if (null != quartzScheduler) {\r
+        quartzScheduler.shutdown();\r
+      }\r
+\r
+      quartzScheduler = quartzSchedulerProducer.getStdScheduler();\r
+      if (null != quartzScheduler)\r
+        quartzScheduler.start();\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("while switchToActive SchedulerException : " + e.getMessage());\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public boolean isQuartzRunninginActiveMode() {\r
+    try {\r
+      if (!quartzScheduler.getSchedulerInstanceId().endsWith("_standby")\r
+          && quartzScheduler.isStarted())\r
+        return true;\r
+    } catch (org.quartz.SchedulerException e) {\r
+      logger.error("Quatz scheudler failed to retrive mode: Caught Exception: " + e.getMessage());\r
+    }\r
+    return false;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerProducer.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerProducer.java
new file mode 100644 (file)
index 0000000..52783ed
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+import java.io.BufferedInputStream;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.Properties;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.quartz.Scheduler;\r
+import org.quartz.SchedulerException;\r
+import org.quartz.impl.StdSchedulerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class QuartzSchedulerProducer {\r
+\r
+  private static final Log logger = LogFactory.getLog(QuartzSchedulerProducer.class);\r
+\r
+  public Scheduler getStdScheduler() {\r
+    StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();\r
+    try {\r
+      schedulerFactory.initialize("config/quartz.properties");\r
+      Properties props = new Properties();\r
+      props.setProperty("org.quartz.scheduler.instanceName",\r
+          props.getProperty("org.quartz.scheduler.instanceName") + "_standby");\r
+      return schedulerFactory.getScheduler();\r
+    } catch (SchedulerException e) {\r
+      logger.error("SchedulerException : {}" + e.getMessage());\r
+    }\r
+\r
+    return null;\r
+  }\r
+\r
+  public Properties initialize(String filename) throws SchedulerException {\r
+\r
+    InputStream is = null;\r
+    Properties props = new Properties();\r
+\r
+    is = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename);\r
+\r
+    try {\r
+      if (is != null) {\r
+        is = new BufferedInputStream(is);\r
+      } else {\r
+        is = new BufferedInputStream(new FileInputStream(filename));\r
+      }\r
+      props.load(is);\r
+    } catch (IOException ioe) {\r
+      throw new SchedulerException("Properties file: '" + filename + "' could not be read.", ioe);\r
+    } finally {\r
+      if (is != null)\r
+        try {\r
+          is.close();\r
+        } catch (IOException ignore) {\r
+          logger.error("while initialize : {}" + ignore.getMessage());\r
+        }\r
+    }\r
+\r
+    return props;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerUtil.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/QuartzSchedulerUtil.java
new file mode 100644 (file)
index 0000000..659e450
--- /dev/null
@@ -0,0 +1,155 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_APPENDER;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_NAME;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.SUB_SYSTEM;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.TRIGGER_APPENDER;\r
+\r
+import java.util.List;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.commscope.tr069adapter.common.scheduler.ExecutionContext;\r
+import org.commscope.tr069adapter.common.scheduler.SchedulerException;\r
+import org.commscope.tr069adapter.common.scheduler.TimeUnit;\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.commscope.tr069adapter.common.scheduler.trigger.TriggerRule;\r
+import org.quartz.CronTrigger;\r
+import org.quartz.JobBuilder;\r
+import org.quartz.JobDetail;\r
+import org.quartz.SimpleTrigger;\r
+import org.quartz.Trigger;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class QuartzSchedulerUtil {\r
+\r
+  @Autowired\r
+  List<TriggerRule> triggerRules;\r
+\r
+  private static final Log logger = LogFactory.getLog(QuartzSchedulerUtil.class);\r
+\r
+  public void setTriggerList(List<TriggerRule> triggerRules) {\r
+    this.triggerRules = triggerRules;\r
+  }\r
+\r
+  Trigger createTrigger(TriggerInfo triggerInfo, String triggerGroup) {\r
+    if (null == triggerInfo || null == triggerGroup || "".equals(triggerGroup))\r
+      return null;\r
+    String triggerName = triggerGroup + TRIGGER_APPENDER;\r
+    Trigger trigger = null;\r
+    for (TriggerRule rule : triggerRules) {\r
+      trigger = rule.apply(triggerInfo, triggerName, triggerGroup);\r
+      if (trigger != null)\r
+        break;\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+  Trigger createTrigger(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
+    if (null == triggerInfo || null == triggerGroup || "".equals(triggerGroup))\r
+      return null;\r
+    triggerName = triggerName + TRIGGER_APPENDER;\r
+    Trigger trigger = null;\r
+    for (TriggerRule rule : triggerRules) {\r
+      trigger = rule.apply(triggerInfo, triggerName, triggerGroup);\r
+      if (trigger != null)\r
+        break;\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+  JobDetail getJobDetail(ExecutionContext jobContext, String jobGroup) {\r
+    if (null == jobContext || null == jobGroup || "".equals(jobGroup))\r
+      return null;\r
+    String jobName = jobGroup + JOB_APPENDER;\r
+    JobDetail jobDetail =\r
+        JobBuilder.newJob(QuartzJob.class).withIdentity(jobName, jobGroup).build();\r
+    for (String key : jobContext.getJobDatakeySet()) {\r
+      jobDetail.getJobDataMap().put(key, jobContext.getJobData(key));\r
+    }\r
+    jobDetail.getJobDataMap().put(JOB_NAME, jobContext.getJobName());\r
+    jobDetail.getJobDataMap().put(SUB_SYSTEM, jobContext.getSubSystemName());\r
+    return jobDetail;\r
+  }\r
+\r
+  JobDetail getJobDetail(ExecutionContext jobContext, String jobName, String jobGroup) {\r
+    if (null == jobContext || null == jobGroup || "".equals(jobGroup))\r
+      return null;\r
+    JobDetail jobDetail =\r
+        JobBuilder.newJob(QuartzJob.class).withIdentity(jobName + JOB_APPENDER, jobGroup).build();\r
+    for (String key : jobContext.getJobDatakeySet()) {\r
+      jobDetail.getJobDataMap().put(key, jobContext.getJobData(key));\r
+    }\r
+    jobDetail.getJobDataMap().put(JOB_NAME, jobContext.getJobName());\r
+    jobDetail.getJobDataMap().put(SUB_SYSTEM, jobContext.getSubSystemName());\r
+    return jobDetail;\r
+  }\r
+\r
+  public static long getInterval(long interval, TimeUnit unit) {\r
+    long retVal = 0;\r
+    switch (unit) {\r
+      case DAYS:\r
+        retVal = interval * 24 * 60 * 60 * 1000;\r
+        break;\r
+      case HOURS:\r
+        retVal = interval * 60 * 60 * 1000;\r
+        break;\r
+      case MINUTES:\r
+        retVal = interval * 60 * 1000;\r
+        break;\r
+      case SECONDS:\r
+        retVal = interval * 1000;\r
+        break;\r
+      case MILLISECONDS:\r
+        retVal = interval * 1;\r
+        break;\r
+    }\r
+    return retVal;\r
+  }\r
+\r
+  public TriggerInfo getTriggerInfo(Trigger trigger) {\r
+    TriggerInfo triggerInfo = new TriggerInfo();\r
+    if (trigger == null) {\r
+      return triggerInfo;\r
+    }\r
+    try {\r
+      triggerInfo.setStartDate(trigger.getStartTime());\r
+      triggerInfo.setEndDate(trigger.getEndTime());\r
+      triggerInfo.setNextFireTime(trigger.getNextFireTime());\r
+      if (trigger instanceof SimpleTrigger) {\r
+        SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;\r
+        triggerInfo.setInterval(simpleTrigger.getRepeatInterval());\r
+\r
+      } else if (trigger instanceof CronTrigger) {\r
+        CronTrigger cronTrigger = (CronTrigger) trigger;\r
+        triggerInfo.setCronExpr(cronTrigger.getCronExpression());\r
+\r
+      }\r
+\r
+    } catch (SchedulerException e) {\r
+      logger.error("Error in getTriggerInfo : " + e.getMessage());\r
+    }\r
+    return triggerInfo;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/SpringApplicationContext.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/SpringApplicationContext.java
new file mode 100644 (file)
index 0000000..934332e
--- /dev/null
@@ -0,0 +1,38 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+import javax.annotation.PostConstruct;\r
+\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class SpringApplicationContext {\r
+\r
+  @Autowired\r
+  private ApplicationContext context;\r
+\r
+  @PostConstruct\r
+  public void init() {\r
+    QuartzJob.setApplicationContext(context);\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/TimerAPIConstants.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/TimerAPIConstants.java
new file mode 100644 (file)
index 0000000..e282db6
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+public class TimerAPIConstants {\r
+\r
+  private TimerAPIConstants() {}\r
+\r
+  public static final String DM_SUB_SYSTEM = "dm";\r
+  public static final String TIMEOUT_HANDLER_JNDI_NAME = "timerHandler";\r
+  public static final String TIMER_ID_KEY = "timerIdKey";\r
+  public static final String TIMER_LISTENER_KEY = "timerListenerKey";\r
+  public static final String TIMER_DATA_KEY = "timerDataKey";\r
+  public static final String TIMER_JOB_GROUP = "timerJobGroup";\r
+  public static final long HOUR_IN_MILLIS = 1000 * 60 * 60l;\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/TriggerRuleProducer.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/impl/TriggerRuleProducer.java
new file mode 100644 (file)
index 0000000..16da3fc
--- /dev/null
@@ -0,0 +1,63 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.scheduler.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.trigger.CronExpressionTriggerRule;\r
+import org.commscope.tr069adapter.common.scheduler.trigger.ExpiredTirggerRule;\r
+import org.commscope.tr069adapter.common.scheduler.trigger.OneTimeTirggerRule;\r
+import org.commscope.tr069adapter.common.scheduler.trigger.PeriodicForeverTriggerRule;\r
+import org.commscope.tr069adapter.common.scheduler.trigger.PeriodicTriggerRule;\r
+import org.commscope.tr069adapter.common.scheduler.trigger.TriggerRule;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.context.annotation.Bean;\r
+\r
+public class TriggerRuleProducer {\r
+\r
+  @Autowired\r
+  CronExpressionTriggerRule cronExpressionTriggerRule;\r
+\r
+  @Autowired\r
+  OneTimeTirggerRule oneTimeTirggerRule;\r
+\r
+  @Autowired\r
+  PeriodicForeverTriggerRule periodicForeverTriggerRule;\r
+\r
+  @Autowired\r
+  PeriodicTriggerRule periodicTriggerRule;\r
+\r
+  @Autowired\r
+  ExpiredTirggerRule expiredTirggerRule;\r
+\r
+  @Bean\r
+  public List<TriggerRule> getTriggerRules() {\r
+\r
+    List<TriggerRule> triggerRules = new ArrayList<>();\r
+    triggerRules.add(cronExpressionTriggerRule);\r
+    triggerRules.add(oneTimeTirggerRule);\r
+    triggerRules.add(periodicForeverTriggerRule);\r
+    triggerRules.add(periodicTriggerRule);\r
+    triggerRules.add(expiredTirggerRule);\r
+\r
+    return triggerRules;\r
+\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/CronExpressionTriggerRule.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/CronExpressionTriggerRule.java
new file mode 100644 (file)
index 0000000..adf0370
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.trigger;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.quartz.CronScheduleBuilder;\r
+import org.quartz.CronTrigger;\r
+import org.quartz.Trigger;\r
+import org.quartz.TriggerBuilder;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class CronExpressionTriggerRule implements TriggerRule {\r
+\r
+  public Trigger apply(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
+    if (triggerInfo.getCronExpr() == null)\r
+      return null;\r
+    CronTrigger trigger = null;\r
+    if (triggerInfo.getEndDate() != null) {\r
+      trigger = TriggerBuilder.newTrigger().startAt(triggerInfo.getStartDate())\r
+          .endAt(triggerInfo.getEndDate()).withIdentity(triggerName, triggerGroup)\r
+          .withSchedule(CronScheduleBuilder.cronSchedule(triggerInfo.getCronExpr())\r
+              .withMisfireHandlingInstructionIgnoreMisfires())\r
+          .build();\r
+    } else {\r
+      trigger = TriggerBuilder.newTrigger().startAt(triggerInfo.getStartDate())\r
+          .withIdentity(triggerName, triggerGroup)\r
+          .withSchedule(CronScheduleBuilder.cronSchedule(triggerInfo.getCronExpr())\r
+              .withMisfireHandlingInstructionIgnoreMisfires())\r
+          .build();\r
+    }\r
+\r
+    return trigger;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/ExpiredTirggerRule.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/ExpiredTirggerRule.java
new file mode 100644 (file)
index 0000000..4a5cd6a
--- /dev/null
@@ -0,0 +1,54 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.trigger;\r
+\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.quartz.Trigger;\r
+import org.quartz.TriggerBuilder;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class ExpiredTirggerRule implements TriggerRule {\r
+\r
+  /**\r
+   * Run the job once.\r
+   */\r
+  public Trigger apply(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
+\r
+    Date startDate = triggerInfo.getStartDate();\r
+    Date endDate = triggerInfo.getEndDate();\r
+    long interval = triggerInfo.getInterval();\r
+    String strTrigger = triggerInfo.getCronExpr();\r
+    boolean evaluate =\r
+        (startDate == null) && (interval == -1) && (endDate != null) && (strTrigger == null);\r
+    Trigger trigger = null;\r
+    if (evaluate) {\r
+      TriggerBuilder<Trigger> triggerBuilder =\r
+          TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup);\r
+      triggerBuilder = triggerBuilder.startAt(endDate);\r
+      triggerBuilder = triggerBuilder.endAt(new Date(endDate.getTime() + (1000 * 60 * 1)));\r
+      trigger = triggerBuilder.build();\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/OneTimeTirggerRule.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/OneTimeTirggerRule.java
new file mode 100644 (file)
index 0000000..c3fbb80
--- /dev/null
@@ -0,0 +1,61 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.trigger;\r
+\r
+import static org.quartz.SimpleScheduleBuilder.simpleSchedule;\r
+\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants;\r
+import org.quartz.Trigger;\r
+import org.quartz.TriggerBuilder;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class OneTimeTirggerRule implements TriggerRule {\r
+\r
+  /**\r
+   * Run the job once.\r
+   */\r
+  public Trigger apply(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
+\r
+    Date startDate = triggerInfo.getStartDate();\r
+    Date endDate = triggerInfo.getEndDate();\r
+    long interval = triggerInfo.getInterval();\r
+    boolean evaluate = endDate == null && interval == -1;\r
+    Trigger trigger = null;\r
+    if (evaluate) {\r
+      TriggerBuilder<Trigger> triggerBuilder =\r
+          TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup);\r
+      if (null == startDate) {\r
+        triggerBuilder.withSchedule(\r
+            simpleSchedule().withIntervalInMilliseconds(1 * TimerAPIConstants.HOUR_IN_MILLIS)\r
+                .withMisfireHandlingInstructionNextWithExistingCount().repeatForever())\r
+            .build();\r
+      } else {\r
+        triggerBuilder = triggerBuilder.startAt(startDate);\r
+      }\r
+      trigger = triggerBuilder.build();\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/PeriodicForeverTriggerRule.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/PeriodicForeverTriggerRule.java
new file mode 100644 (file)
index 0000000..f01d752
--- /dev/null
@@ -0,0 +1,62 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.trigger;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerUtil.getInterval;\r
+import static org.quartz.SimpleScheduleBuilder.simpleSchedule;\r
+\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.quartz.Trigger;\r
+import org.quartz.TriggerBuilder;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class PeriodicForeverTriggerRule implements TriggerRule {\r
+\r
+  /**\r
+   * Run the periodically once.\r
+   */\r
+  public Trigger apply(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
+\r
+    Date startDate = triggerInfo.getStartDate();\r
+    Date endDate = triggerInfo.getEndDate();\r
+    long interval = triggerInfo.getInterval();\r
+    boolean evaluate = interval != -1 && endDate == null;\r
+    Trigger trigger = null;\r
+    if (evaluate) {\r
+      long intervalInMilliseconds =\r
+          getInterval(triggerInfo.getInterval(), triggerInfo.getTimeUnit());\r
+      TriggerBuilder<Trigger> triggerBuilder =\r
+          TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup);\r
+\r
+      triggerBuilder =\r
+          (startDate == null) ? triggerBuilder.startNow() : triggerBuilder.startAt(startDate);\r
+\r
+      trigger = triggerBuilder\r
+          .withSchedule(simpleSchedule().withIntervalInMilliseconds(intervalInMilliseconds)\r
+              .withMisfireHandlingInstructionNextWithExistingCount().repeatForever())\r
+          .build();\r
+    }\r
+    return trigger;\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/PeriodicTriggerRule.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/PeriodicTriggerRule.java
new file mode 100644 (file)
index 0000000..377f670
--- /dev/null
@@ -0,0 +1,61 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.trigger;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerUtil.getInterval;\r
+import static org.quartz.SimpleScheduleBuilder.simpleSchedule;\r
+\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.quartz.Trigger;\r
+import org.quartz.TriggerBuilder;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class PeriodicTriggerRule implements TriggerRule {\r
+\r
+  /**\r
+   * Run the periodically once.\r
+   */\r
+  public Trigger apply(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
+\r
+    Date startDate = triggerInfo.getStartDate();\r
+    Date endDate = triggerInfo.getEndDate();\r
+    long interval = triggerInfo.getInterval();\r
+    boolean evaluate = interval != -1 && endDate != null;\r
+    Trigger trigger = null;\r
+    if (evaluate) {\r
+      long intervalInMilliseconds =\r
+          getInterval(triggerInfo.getInterval(), triggerInfo.getTimeUnit());\r
+      TriggerBuilder<Trigger> triggerBuilder =\r
+          TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup);\r
+\r
+      triggerBuilder =\r
+          (startDate == null) ? triggerBuilder.startNow() : triggerBuilder.startAt(startDate);\r
+\r
+      trigger = triggerBuilder\r
+          .withSchedule(simpleSchedule().withIntervalInMilliseconds(intervalInMilliseconds)\r
+              .withMisfireHandlingInstructionNextWithExistingCount().repeatForever())\r
+          .endAt(endDate).build();\r
+    }\r
+    return trigger;\r
+  }\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/TriggerRule.java b/common/src/main/java/org/commscope/tr069adapter/common/scheduler/trigger/TriggerRule.java
new file mode 100644 (file)
index 0000000..aeaf314
--- /dev/null
@@ -0,0 +1,29 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.common.scheduler.trigger;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.quartz.Trigger;\r
+\r
+public interface TriggerRule {\r
+\r
+  Trigger apply(TriggerInfo triggerInfo, String triggerName, String triggerGroup);\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/timer/TimerException.java b/common/src/main/java/org/commscope/tr069adapter/common/timer/TimerException.java
new file mode 100644 (file)
index 0000000..9e210b4
--- /dev/null
@@ -0,0 +1,46 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.timer;\r
+\r
+public class TimerException extends Exception {\r
+\r
+  private static final long serialVersionUID = -8228764278831632563L;\r
+\r
+  public TimerException() {\r
+    super();\r
+  }\r
+\r
+  public TimerException(String message, Throwable cause, boolean enableSuppression,\r
+      boolean writableStackTrace) {\r
+    super(message, cause, enableSuppression, writableStackTrace);\r
+  }\r
+\r
+  public TimerException(String message, Throwable cause) {\r
+    super(message, cause);\r
+  }\r
+\r
+  public TimerException(String message) {\r
+    super(message);\r
+  }\r
+\r
+  public TimerException(Throwable cause) {\r
+    super(cause);\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/timer/TimerListener.java b/common/src/main/java/org/commscope/tr069adapter/common/timer/TimerListener.java
new file mode 100644 (file)
index 0000000..fddfbb0
--- /dev/null
@@ -0,0 +1,27 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.timer;\r
+\r
+import java.io.Serializable;\r
+\r
+public interface TimerListener {\r
+\r
+  public void notifyTimeout(String timerId, Serializable data);\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/timer/TimerServiceManagerAPI.java b/common/src/main/java/org/commscope/tr069adapter/common/timer/TimerServiceManagerAPI.java
new file mode 100644 (file)
index 0000000..ce9adb9
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.timer;\r
+\r
+import java.io.Serializable;\r
+\r
+public interface TimerServiceManagerAPI {\r
+\r
+  public void startTimer(String timerId, String listenerBean, long timeout, Serializable data)\r
+      throws TimerException;\r
+\r
+  public void modifyTimer(String timerId, long newTimeout, Serializable data) throws TimerException;\r
+\r
+  public void stopTimer(String timerId) throws TimerException;\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/timer/impl/TimerHandlerDM.java b/common/src/main/java/org/commscope/tr069adapter/common/timer/impl/TimerHandlerDM.java
new file mode 100644 (file)
index 0000000..33ff48f
--- /dev/null
@@ -0,0 +1,59 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.timer.impl;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMER_DATA_KEY;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMER_LISTENER_KEY;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.common.scheduler.ExecutionContext;\r
+import org.commscope.tr069adapter.common.scheduler.Job;\r
+import org.commscope.tr069adapter.common.scheduler.impl.QuartzJob;\r
+import org.commscope.tr069adapter.common.timer.TimerListener;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component("timerHandler")\r
+public class TimerHandlerDM implements Job {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(TimerHandlerDM.class);\r
+\r
+  @Override\r
+  public void execute(ExecutionContext context) {\r
+\r
+    try {\r
+      logger.debug("Notification is received at {} for timer :{}", new Date(), context.getJobId());\r
+      String beanName = context.getJobData(TIMER_LISTENER_KEY) + "";\r
+      String timerId = context.getJobId();\r
+      Object obj = context.getJobData(TIMER_DATA_KEY);\r
+      Serializable data = (obj == null) ? null : (Serializable) obj;\r
+      ApplicationContext ctx = QuartzJob.getApplicationContext();\r
+      TimerListener listener = (TimerListener) ctx.getBean(beanName);\r
+      listener.notifyTimeout(timerId, data);\r
+    } catch (Exception e) {\r
+      logger.error("Error while notifying timer listener. {}", e.toString());\r
+    }\r
+\r
+  }\r
+\r
+}\r
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/timer/impl/TimerServiceManagerAPIImpl.java b/common/src/main/java/org/commscope/tr069adapter/common/timer/impl/TimerServiceManagerAPIImpl.java
new file mode 100644 (file)
index 0000000..684f991
--- /dev/null
@@ -0,0 +1,114 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.common.timer.impl;\r
+\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.DM_SUB_SYSTEM;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMEOUT_HANDLER_JNDI_NAME;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMER_DATA_KEY;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMER_ID_KEY;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMER_JOB_GROUP;\r
+import static org.commscope.tr069adapter.common.scheduler.impl.TimerAPIConstants.TIMER_LISTENER_KEY;\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.commscope.tr069adapter.common.scheduler.ExecutionContext;\r
+import org.commscope.tr069adapter.common.scheduler.SchedulerException;\r
+import org.commscope.tr069adapter.common.scheduler.SchedulerManager;\r
+import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
+import org.commscope.tr069adapter.common.timer.TimerException;\r
+import org.commscope.tr069adapter.common.timer.TimerServiceManagerAPI;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class TimerServiceManagerAPIImpl implements TimerServiceManagerAPI {\r
+\r
+  @Autowired\r
+  SchedulerManager quartzScheduleManager;\r
+\r
+  private static Log logger = LogFactory.getLog(TimerServiceManagerAPIImpl.class);\r
+\r
+  @Override\r
+  public void startTimer(String timerId, String listenerBean, long timeout, Serializable data)\r
+      throws TimerException {\r
+    try {\r
+      logger.debug("Requested to start timer for " + timerId + ", listener bean=" + listenerBean);\r
+      TriggerInfo triggerInfo = new TriggerInfo();\r
+      triggerInfo.setStartDate(new Date(new Date().getTime() + timeout));\r
+      ExecutionContext executionContext =\r
+          new ExecutionContext(DM_SUB_SYSTEM, TIMEOUT_HANDLER_JNDI_NAME);\r
+      executionContext.addJobData(TIMER_ID_KEY, timerId);\r
+      executionContext.addJobData(TIMER_LISTENER_KEY, listenerBean);\r
+      executionContext.addJobData(TIMER_DATA_KEY, data);\r
+      quartzScheduleManager.scheduleJob(timerId, TIMER_JOB_GROUP, triggerInfo, executionContext);\r
+      logger.debug("Successfully started timer for " + timerId);\r
+    } catch (Exception e) {\r
+      logger.error("Failed to start timer for " + timerId + ", Error Details :" + e.getMessage(),\r
+          e);\r
+      throw new TimerException("Failed to start timer for " + timerId, e);\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  public void modifyTimer(String timerId, long newTimeout, Serializable data)\r
+      throws TimerException {\r
+    try {\r
+      logger.debug("Requested to modify timer for " + timerId);\r
+\r
+      if (quartzScheduleManager.isJobScheduleExist(timerId, TIMER_JOB_GROUP)) {\r
+        Map<String, Object> jobDataMap = quartzScheduleManager.getJobData(timerId, TIMER_JOB_GROUP);\r
+        TriggerInfo triggerInfo = new TriggerInfo();\r
+        triggerInfo.setStartDate(new Date(new Date().getTime() + newTimeout));\r
+        ExecutionContext executionContext =\r
+            new ExecutionContext(DM_SUB_SYSTEM, TIMEOUT_HANDLER_JNDI_NAME);\r
+        executionContext.addJobData(TIMER_ID_KEY, timerId);\r
+        executionContext.addJobData(TIMER_LISTENER_KEY, jobDataMap.get(TIMER_LISTENER_KEY));\r
+        executionContext.addJobData(TIMER_DATA_KEY, data);\r
+        quartzScheduleManager.modifySchedule(timerId, TIMER_JOB_GROUP, triggerInfo);\r
+        logger.debug("Successfully modified timer for " + timerId);\r
+      } else {\r
+        logger.error("Timer with timerId " + timerId + " does not exist.");\r
+        throw new TimerException("Timer with timerId " + timerId + " does not exist.");\r
+      }\r
+\r
+    } catch (SchedulerException e) {\r
+      logger.error("Failed to modify timer with timerId " + timerId);\r
+      throw new TimerException("Failed to modify timer with timerId " + timerId);\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void stopTimer(String timerId) throws TimerException {\r
+    try {\r
+      logger.debug("Requested to stop the timer." + timerId);\r
+      if (quartzScheduleManager.isJobExist(timerId, TIMER_JOB_GROUP))\r
+        quartzScheduleManager.deleteSchedule(timerId, TIMER_JOB_GROUP);\r
+      logger.debug("Successfully stopped the timer." + timerId);\r
+    } catch (Exception e) {\r
+      logger.error("Failed to stop timer for " + timerId + ", Error Details :" + e.getMessage(), e);\r
+      throw new TimerException("Failed to stop the timer for " + timerId, e);\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/config-data/Dockerfile b/config-data/Dockerfile
new file mode 100644 (file)
index 0000000..0b576a6
--- /dev/null
@@ -0,0 +1,35 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM openjdk:8-alpine\r
+\r
+ARG JAR\r
+\r
+ENV DB_USERNAME=root\r
+ENV DB_PASSWORD=root\r
+ENV DB_SERVICE=tr069adapter-mariadb\r
+ENV DB_NAME=dmsdb\r
+ENV INITIALPNP_PORT=9000\r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD target/${JAR} ./lib/tr069adapter-acs-initialpnpdb.jar\r
+\r
+EXPOSE ${INITIALPNP_PORT}\r
+ENTRYPOINT ["java", "-jar", "./lib/tr069adapter-acs-initialpnpdb.jar"]\r
+\r
diff --git a/config-data/pom.xml b/config-data/pom.xml
new file mode 100644 (file)
index 0000000..18bbd49
--- /dev/null
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <groupId>org.commscope.tr069adapter.config</groupId>\r
+   <artifactId>config-data</artifactId>\r
+   <name>config-data</name>\r
+   <description>Configuration data import project for Spring Boot</description>\r
+   <licenses>\r
+      <license>\r
+         <name>The Apache Software License, Version 2.0</name>\r
+         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
+      </license>\r
+   </licenses>\r
+   <repositories>\r
+      <repository>\r
+         <id>onap-releases</id>\r
+         <name>onap-releases</name>\r
+         <url>https://nexus.onap.org/content/repositories/releases/</url>\r
+      </repository>\r
+   </repositories>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-acs-initialpnpdb</docker.image.name>\r
+   </properties>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-data-jpa</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.mariadb.jdbc</groupId>\r
+         <artifactId>mariadb-java-client</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.h2database</groupId>\r
+         <artifactId>h2</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit-dep</artifactId>\r
+         <version>4.11</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-maven-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-surefire-plugin</artifactId>\r
+            <configuration>\r
+               <skipTests>false</skipTests>\r
+            </configuration>\r
+         </plugin>\r
+         <plugin>\r
+            <artifactId>maven-failsafe-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/ConfigDataServiceApplication.java b/config-data/src/main/java/org/commscope/tr069adapter/config/ConfigDataServiceApplication.java
new file mode 100644 (file)
index 0000000..5945de3
--- /dev/null
@@ -0,0 +1,40 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.config;\r
+\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+\r
+/**\r
+ * \r
+ * @version 1.0\r
+ * @since October 25, 2019\r
+ * @author Prashant Kumar\r
+ */\r
+\r
+@SpringBootApplication\r
+public class ConfigDataServiceApplication {\r
+\r
+  public static void main(String[] args) {\r
+\r
+    SpringApplication.run(ConfigDataServiceApplication.class, args);\r
+  }\r
+\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/constants/ConfigurationServiceConstant.java b/config-data/src/main/java/org/commscope/tr069adapter/config/constants/ConfigurationServiceConstant.java
new file mode 100644 (file)
index 0000000..0a35e6d
--- /dev/null
@@ -0,0 +1,39 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config.constants;\r
+\r
+public class ConfigurationServiceConstant {\r
+\r
+  private ConfigurationServiceConstant() {}\r
+\r
+  public static final String XML_SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";\r
+\r
+  public static final String CONFIGURATION_DATA_XSD_FILE_NAME = "ConfigurationData.xsd";\r
+  public static final String CONFIGURATION_DATA_XSD_PATH =\r
+      "/xsd/" + CONFIGURATION_DATA_XSD_FILE_NAME;\r
+\r
+  public static final String CONFIG_DATA_FILE = "configDataFile";\r
+  public static final String CONFIG_DATA = "ConfigData";\r
+  public static final String MANAGED_ELEMENT = "managedElement";\r
+  public static final String FILE_HEADER = "fileHeader";\r
+\r
+  public static final String TABULAR_INDEX_NAME = "index";\r
+\r
+  public static final String CONFIG_FILE_EXTENSION = ".xml";\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/constants/Utility.java b/config-data/src/main/java/org/commscope/tr069adapter/config/constants/Utility.java
new file mode 100644 (file)
index 0000000..3da2b3c
--- /dev/null
@@ -0,0 +1,29 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.config.constants;\r
+\r
+public class Utility {\r
+\r
+  private Utility() {}\r
+\r
+  public static String getMacId(String fileName) {\r
+    return fileName.substring(0, fileName.lastIndexOf('.'));\r
+  }\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/controllers/ConfugurationDataController.java b/config-data/src/main/java/org/commscope/tr069adapter/config/controllers/ConfugurationDataController.java
new file mode 100644 (file)
index 0000000..84bab64
--- /dev/null
@@ -0,0 +1,106 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.config.controllers;\r
+\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Optional;\r
+\r
+import org.commscope.tr069adapter.config.constants.ConfigurationServiceConstant;\r
+import org.commscope.tr069adapter.config.dto.ConfigurationData;\r
+import org.commscope.tr069adapter.config.exceptions.InvalidConfigurationServiceException;\r
+import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
+import org.commscope.tr069adapter.config.service.ConfigurationDataService;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.util.StringUtils;\r
+import org.springframework.web.bind.annotation.GetMapping;\r
+import org.springframework.web.bind.annotation.PathVariable;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestParam;\r
+import org.springframework.web.bind.annotation.RestController;\r
+import org.springframework.web.multipart.MultipartFile;\r
+\r
+@RestController\r
+public class ConfugurationDataController {\r
+  private final Logger logger = LoggerFactory.getLogger(this.getClass());\r
+\r
+  @Autowired\r
+  ConfigurationDataService configDataService;\r
+\r
+  @GetMapping("/isActive")\r
+  public String getMessage() {\r
+    return "Application is running";\r
+  }\r
+\r
+  @GetMapping("/getFileContent/{id}")\r
+  public Optional<ConfigFileContent> viewFileContent(@PathVariable("id") String macId) {\r
+    logger.info("Processing request to view configuration file content for device {}", macId);\r
+    return configDataService.getConfigFileContent(macId);\r
+  }\r
+\r
+  @GetMapping("/getConfig/{id}")\r
+  public ConfigurationData viewConfigurationData(@PathVariable("id") String macId)\r
+      throws InvalidConfigurationServiceException {\r
+    logger.info("Processing request to get configuration data for device {}", macId);\r
+    Optional<ConfigurationData> configData = configDataService.getConfigurationData(macId);\r
+    if (configData.isPresent()) {\r
+      return configData.get();\r
+    }\r
+\r
+    logger.info("Configuration data doesn't exist for device {}", macId);\r
+    return null;\r
+  }\r
+\r
+  @PostMapping("/importConfig")\r
+  public String uploadMultipleFiles(@RequestParam("files") MultipartFile[] files)\r
+      throws InvalidConfigurationServiceException {\r
+\r
+    if (null == files || files.length == 0) {\r
+      logger.info("No file given for import");\r
+      return "No file given for import";\r
+    }\r
+\r
+    List<MultipartFile> fileList = Arrays.asList(files);\r
+\r
+    MultipartFile file = fileList.get(0);\r
+    String fileName = StringUtils.cleanPath(file.getOriginalFilename());\r
+\r
+    logger.debug("Importing file {}", fileName);\r
+    if (!fileName.endsWith(ConfigurationServiceConstant.CONFIG_FILE_EXTENSION)) {\r
+      throw new InvalidConfigurationServiceException("Unsupported file format for file " + fileName\r
+          + ". Only XML file is supported. Ignoring file import for file " + fileName);\r
+    }\r
+\r
+    try {\r
+      configDataService.saveConfigFileContents(file);\r
+    } catch (InvalidConfigurationServiceException ex) {\r
+      throw new InvalidConfigurationServiceException(\r
+          "Error occurred while import file " + fileName + ". Cause : " + ex.getMessage());\r
+    } catch (Exception ex) {\r
+      throw new InvalidConfigurationServiceException(\r
+          "UNKNOWN error occurred while import file " + fileName + ". Cause : " + ex.getMessage());\r
+    }\r
+\r
+    return "File " + fileName + " imported successfully";\r
+  }\r
+\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/dto/ConfigurationData.java b/config-data/src/main/java/org/commscope/tr069adapter/config/dto/ConfigurationData.java
new file mode 100644 (file)
index 0000000..754ad27
--- /dev/null
@@ -0,0 +1,83 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config.dto;\r
+\r
+import java.io.Serializable;\r
+import java.util.Map;\r
+\r
+public class ConfigurationData implements Serializable {\r
+  private static final long serialVersionUID = -6219229519491907038L;\r
+\r
+  private String oui;\r
+  private String productClass;\r
+  private String softwareVersion;\r
+  private String hardwareVersion;\r
+\r
+  private String localDn;\r
+\r
+  private Map<String, String> parameterMONameValueMap;\r
+\r
+  public String getLocalDn() {\r
+    return localDn;\r
+  }\r
+\r
+  public void setLocalDn(String localDn) {\r
+    this.localDn = localDn;\r
+  }\r
+\r
+  public String getHardwareVersion() {\r
+    return hardwareVersion;\r
+  }\r
+\r
+  public void setHardwareVersion(String hardwareVersion) {\r
+    this.hardwareVersion = hardwareVersion;\r
+  }\r
+\r
+  public String getProductClass() {\r
+    return productClass;\r
+  }\r
+\r
+  public void setProductClass(String productClass) {\r
+    this.productClass = productClass;\r
+  }\r
+\r
+  public String getOUI() {\r
+    return oui;\r
+  }\r
+\r
+  public void setOUI(String oUI) {\r
+    oui = oUI;\r
+  }\r
+\r
+  public String getSoftwareVersion() {\r
+    return softwareVersion;\r
+  }\r
+\r
+  public void setSoftwareVersion(String softwareVersion) {\r
+    this.softwareVersion = softwareVersion;\r
+  }\r
+\r
+  public Map<String, String> getParameterMONameValueMap() {\r
+    return parameterMONameValueMap;\r
+  }\r
+\r
+  public void setParameterMONameValueMap(Map<String, String> parameterMONameValueMap) {\r
+    this.parameterMONameValueMap = parameterMONameValueMap;\r
+  }\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/exceptions/InvalidConfigurationServiceException.java b/config-data/src/main/java/org/commscope/tr069adapter/config/exceptions/InvalidConfigurationServiceException.java
new file mode 100644 (file)
index 0000000..1731d40
--- /dev/null
@@ -0,0 +1,29 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.config.exceptions;\r
+\r
+public class InvalidConfigurationServiceException extends Exception {\r
+\r
+  private static final long serialVersionUID = -6938593454286740996L;\r
+\r
+  public InvalidConfigurationServiceException(String errorMessage) {\r
+    super(errorMessage);\r
+  }\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/model/ConfigFileContent.java b/config-data/src/main/java/org/commscope/tr069adapter/config/model/ConfigFileContent.java
new file mode 100644 (file)
index 0000000..080837a
--- /dev/null
@@ -0,0 +1,60 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.config.model;\r
+\r
+import javax.persistence.Column;\r
+import javax.persistence.Entity;\r
+import javax.persistence.Id;\r
+import javax.persistence.Table;\r
+\r
+/**\r
+ * \r
+ * @version 1.0\r
+ * @since September 27, 2019\r
+ * @author Prashant Kumar\r
+ */\r
+\r
+@Entity\r
+@Table(name = "config_file_content")\r
+public class ConfigFileContent {\r
+\r
+  @Id\r
+  @Column(name = "MACID", length = 255)\r
+  private String macId;\r
+\r
+  @Column(name = "FILE_CONTENT", columnDefinition = "MEDIUMTEXT")\r
+  private String fileContent;\r
+\r
+  public String getMacId() {\r
+    return macId;\r
+  }\r
+\r
+  public void setMacId(String macId) {\r
+    this.macId = macId;\r
+  }\r
+\r
+  public String getFileContent() {\r
+    return fileContent;\r
+  }\r
+\r
+  public void setFileContent(String fileContent) {\r
+    this.fileContent = fileContent;\r
+  }\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/parser/ConfigurationXMLDataParser.java b/config-data/src/main/java/org/commscope/tr069adapter/config/parser/ConfigurationXMLDataParser.java
new file mode 100644 (file)
index 0000000..4be0ccf
--- /dev/null
@@ -0,0 +1,277 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config.parser;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.InputStream;\r
+import java.nio.charset.StandardCharsets;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.xml.XMLConstants;\r
+import javax.xml.parsers.SAXParser;\r
+import javax.xml.parsers.SAXParserFactory;\r
+import javax.xml.transform.stream.StreamSource;\r
+import javax.xml.validation.Schema;\r
+import javax.xml.validation.SchemaFactory;\r
+import javax.xml.validation.Validator;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.commscope.tr069adapter.config.constants.ConfigurationServiceConstant;\r
+import org.commscope.tr069adapter.config.dto.ConfigurationData;\r
+import org.commscope.tr069adapter.config.exceptions.InvalidConfigurationServiceException;\r
+import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
+import org.springframework.stereotype.Component;\r
+import org.xml.sax.Attributes;\r
+import org.xml.sax.ErrorHandler;\r
+import org.xml.sax.SAXException;\r
+import org.xml.sax.SAXNotRecognizedException;\r
+import org.xml.sax.SAXNotSupportedException;\r
+import org.xml.sax.SAXParseException;\r
+import org.xml.sax.helpers.DefaultHandler;\r
+\r
+@Component\r
+public class ConfigurationXMLDataParser extends DefaultHandler {\r
+\r
+  private static final Log logger = LogFactory.getLog(ConfigurationXMLDataParser.class);\r
+\r
+  private List<ConfigurationData> completeConfigurationDataList;\r
+\r
+  private ConfigurationData configurationData;\r
+  private Map<String, String> parameterMONameValueMap;\r
+\r
+  private String moAttr;\r
+  private String moValue;\r
+\r
+  public void validateFile(ConfigFileContent configFileContent)\r
+      throws InvalidConfigurationServiceException {\r
+    SAXParserFactory factory = SAXParserFactory.newInstance();\r
+    factory.setValidating(true);\r
+    factory.setNamespaceAware(true);\r
+\r
+    String xmlFileContent = configFileContent.getFileContent();\r
+    byte[] byteArray;\r
+\r
+    try {\r
+      byteArray = xmlFileContent.getBytes(StandardCharsets.UTF_8);\r
+    } catch (Exception e) {\r
+      logger.error("Error while parsing device configuration XML file. {}", e);\r
+      throw new InvalidConfigurationServiceException(\r
+          "UnsupportedEncodingException error. " + e.getMessage());\r
+    }\r
+\r
+    ByteArrayInputStream xmlFileContentInputStream = new ByteArrayInputStream(byteArray);\r
+\r
+    logger.debug("Validating XML file");\r
+\r
+    validateXmlWithSchema(xmlFileContentInputStream);\r
+\r
+    logger.debug("XML file validation is successful");\r
+\r
+  }\r
+\r
+  public ConfigurationData parseFile(ConfigFileContent configFileContent)\r
+      throws InvalidConfigurationServiceException {\r
+    SAXParserFactory factory = SAXParserFactory.newInstance();\r
+    factory.setValidating(true);\r
+    factory.setNamespaceAware(true);\r
+\r
+    try {\r
+      String xmlFileContent = configFileContent.getFileContent();\r
+      byte[] byteArray = xmlFileContent.getBytes(StandardCharsets.UTF_8);\r
+      ByteArrayInputStream xmlFileContentInputStream = new ByteArrayInputStream(byteArray);\r
+\r
+      logger.debug("Validating XML file");\r
+\r
+      validateXmlWithSchema(xmlFileContentInputStream);\r
+\r
+      logger.debug("XML file validation is successful");\r
+\r
+      byteArray = xmlFileContent.getBytes(StandardCharsets.UTF_8);\r
+      xmlFileContentInputStream = new ByteArrayInputStream(byteArray);\r
+\r
+      SAXParser parser = null;\r
+      parser = factory.newSAXParser();\r
+      parser.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      parser.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
+      setProperty(parser);\r
+\r
+      parser.parse(xmlFileContentInputStream, this);\r
+\r
+    } catch (SAXException e) {\r
+      logger.error("Error while parsing device configuration XML file. {}", e);\r
+      throw new InvalidConfigurationServiceException("File parsing error. " + e.getMessage());\r
+    } catch (Exception e) {\r
+      logger.error("Unknown error occurred while parsing device configuration XML file. {}", e);\r
+      throw new InvalidConfigurationServiceException("UNKNOWN ERROR. " + e.getMessage());\r
+    }\r
+\r
+    if (null == completeConfigurationDataList || completeConfigurationDataList.isEmpty()) {\r
+      return null;\r
+    } else {\r
+      return completeConfigurationDataList.get(0);\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void startElement(String uri, String localName, String qName, Attributes attributes)\r
+      throws SAXException {\r
+    qName = qName.trim();\r
+    if (qName.equalsIgnoreCase(ConfigurationServiceConstant.CONFIG_DATA_FILE)) {\r
+      completeConfigurationDataList = new ArrayList<>();\r
+      return;\r
+    }\r
+\r
+    if (qName.equalsIgnoreCase(ConfigurationServiceConstant.CONFIG_DATA)) {\r
+      moAttr = null;\r
+      configurationData = new ConfigurationData();\r
+      parameterMONameValueMap = new HashMap<>();\r
+\r
+      configurationData.setParameterMONameValueMap(parameterMONameValueMap);\r
+    } else if (qName.equalsIgnoreCase(ConfigurationServiceConstant.FILE_HEADER)) {\r
+      logger.debug("File hearder start element parsing started");\r
+    } else {\r
+      createAttribute(qName, attributes);\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void endElement(String uri, String localName, String qName) throws SAXException {\r
+    qName = qName.trim();\r
+\r
+    if (qName.equalsIgnoreCase(ConfigurationServiceConstant.CONFIG_DATA_FILE)) {\r
+      logger.debug("ignoreing the datafile end element");\r
+    } else if (qName.equalsIgnoreCase(ConfigurationServiceConstant.CONFIG_DATA)) {\r
+      completeConfigurationDataList.add(configurationData);\r
+    } else if (qName.equalsIgnoreCase(ConfigurationServiceConstant.MANAGED_ELEMENT)\r
+        || qName.equalsIgnoreCase(ConfigurationServiceConstant.FILE_HEADER)) {\r
+      logger.debug("File hearder end element parsing started");\r
+    } else {\r
+      if (moValue != null && !moValue.equals("") && !moValue.trim().isEmpty()) {\r
+        parameterMONameValueMap.put(moAttr, moValue);\r
+        moValue = null;\r
+      }\r
+      try {\r
+        if (moAttr.lastIndexOf(qName) > 0) {\r
+          moAttr = moAttr.substring(0, moAttr.lastIndexOf(qName) - 1);\r
+        }\r
+      } catch (StringIndexOutOfBoundsException e) {\r
+        logger.error("Error occurred while parshing XML file. Cause: {}", e);\r
+      }\r
+    }\r
+  }\r
+\r
+  private void createAttribute(String attrName, Attributes attributes) {\r
+\r
+    if (attrName.equalsIgnoreCase(ConfigurationServiceConstant.MANAGED_ELEMENT)) {\r
+      configurationData.setOUI(attributes.getValue("OUI"));\r
+      configurationData.setProductClass(attributes.getValue("ProductClass"));\r
+      configurationData.setHardwareVersion(attributes.getValue("hwVersion"));\r
+      configurationData.setSoftwareVersion(attributes.getValue("swVersion"));\r
+      configurationData.setLocalDn(attributes.getValue("localDn"));\r
+\r
+      return;\r
+    }\r
+    if (moAttr != null) {\r
+      moAttr = moAttr + "." + attrName;\r
+    } else {\r
+      moAttr = attrName;\r
+    }\r
+\r
+    if (attributes.getValue(ConfigurationServiceConstant.TABULAR_INDEX_NAME) != null) {\r
+      moAttr = moAttr + "." + attributes.getValue(ConfigurationServiceConstant.TABULAR_INDEX_NAME);\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  public void characters(char[] ch, int start, int length) throws SAXException {\r
+    String tmp = new String(ch, start, length);\r
+    if (moValue == null) {\r
+      moValue = tmp.trim();\r
+    } else {\r
+      moValue = moValue + tmp.trim();\r
+    }\r
+  }\r
+\r
+  public void validateXmlWithSchema(ByteArrayInputStream xmlFileContentInputStream)\r
+      throws InvalidConfigurationServiceException {\r
+    logger.info("Validating the XML file against XSD file: "\r
+        + ConfigurationServiceConstant.CONFIGURATION_DATA_XSD_PATH);\r
+    try {\r
+      SchemaFactory factory = SchemaFactory.newInstance(ConfigurationServiceConstant.XML_SCHEMA_NS);\r
+      factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
+      factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+\r
+      InputStream xsdInputStream =\r
+          getClass().getResourceAsStream(ConfigurationServiceConstant.CONFIGURATION_DATA_XSD_PATH);\r
+      if (xsdInputStream == null) {\r
+        throw new InvalidConfigurationServiceException("File parsing error: Unable to find XSD "\r
+            + ConfigurationServiceConstant.CONFIGURATION_DATA_XSD_PATH);\r
+      }\r
+\r
+      Schema schema = factory.newSchema(new StreamSource(xsdInputStream));\r
+      Validator validator = schema.newValidator();\r
+\r
+      final StringBuilder exceptions = new StringBuilder();\r
+      validator.setErrorHandler(new ErrorHandler() {\r
+        @Override\r
+        public void warning(SAXParseException exception) {\r
+          handleMessage(exception);\r
+        }\r
+\r
+        @Override\r
+        public void error(SAXParseException exception) {\r
+          handleMessage(exception);\r
+        }\r
+\r
+        @Override\r
+        public void fatalError(SAXParseException exception) {\r
+          handleMessage(exception);\r
+        }\r
+\r
+        private void handleMessage(SAXParseException exception) {\r
+          int lineNumber = exception.getLineNumber();\r
+          int columnNumber = exception.getColumnNumber();\r
+          String message = exception.getMessage();\r
+          exceptions.append("\n" + lineNumber + ":" + columnNumber + ": " + message);\r
+        }\r
+      });\r
+\r
+      validator.validate(new StreamSource(xmlFileContentInputStream));\r
+      if (exceptions.length() > 0) {\r
+        throw new SAXException(" Line=" + exceptions);\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("Error while parsing the XML file " + e.toString());\r
+      throw new InvalidConfigurationServiceException("File parsing error. " + e.toString());\r
+    }\r
+\r
+    logger.debug("File is valid.");\r
+  }\r
+\r
+  protected void setProperty(SAXParser parser)\r
+      throws SAXNotRecognizedException, SAXNotSupportedException {\r
+      logger.debug("property added.");\r
+  }\r
+\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/repository/ConfigurationDataRepository.java b/config-data/src/main/java/org/commscope/tr069adapter/config/repository/ConfigurationDataRepository.java
new file mode 100644 (file)
index 0000000..8ff42d0
--- /dev/null
@@ -0,0 +1,35 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config.repository;\r
+\r
+import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
+import org.springframework.data.repository.CrudRepository;\r
+import org.springframework.stereotype.Repository;\r
+\r
+/**\r
+ * \r
+ * @version 1.0\r
+ * @since September 27, 2019\r
+ * @author Prashant Kumar\r
+ */\r
+\r
+@Repository\r
+public interface ConfigurationDataRepository extends CrudRepository<ConfigFileContent, String> {\r
+\r
+}\r
diff --git a/config-data/src/main/java/org/commscope/tr069adapter/config/service/ConfigurationDataService.java b/config-data/src/main/java/org/commscope/tr069adapter/config/service/ConfigurationDataService.java
new file mode 100644 (file)
index 0000000..9717bf2
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config.service;\r
+\r
+import java.nio.charset.StandardCharsets;\r
+import java.util.Optional;\r
+\r
+import org.commscope.tr069adapter.config.constants.Utility;\r
+import org.commscope.tr069adapter.config.dto.ConfigurationData;\r
+import org.commscope.tr069adapter.config.exceptions.InvalidConfigurationServiceException;\r
+import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
+import org.commscope.tr069adapter.config.parser.ConfigurationXMLDataParser;\r
+import org.commscope.tr069adapter.config.repository.ConfigurationDataRepository;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Service;\r
+import org.springframework.util.StringUtils;\r
+import org.springframework.web.multipart.MultipartFile;\r
+\r
+@Service\r
+public class ConfigurationDataService {\r
+  private final Logger logger = LoggerFactory.getLogger(this.getClass());\r
+\r
+  @Autowired\r
+  ConfigurationDataRepository configDataRepository;\r
+\r
+  @Autowired\r
+  ConfigurationXMLDataParser configurationXMLDataParser;\r
+\r
+  public void saveConfigFileContent(ConfigFileContent configFileContent) {\r
+    configDataRepository.save(configFileContent);\r
+  }\r
+\r
+  public Iterable<ConfigFileContent> getAllConfigFileContent() {\r
+    return configDataRepository.findAll();\r
+  }\r
+\r
+  public Optional<ConfigFileContent> getConfigFileContent(String macId) {\r
+    return configDataRepository.findById(macId);\r
+  }\r
+\r
+  public Optional<ConfigurationData> getConfigurationData(String macId)\r
+      throws InvalidConfigurationServiceException {\r
+    ConfigurationData configurationData = null;\r
+    Optional<ConfigFileContent> configFileContent = configDataRepository.findById(macId);\r
+\r
+    if (configFileContent.isPresent()) {\r
+      logger.debug("Parsing configuration file for device {}", macId);\r
+      configurationData = configurationXMLDataParser.parseFile(configFileContent.get());\r
+      logger.debug("Parsing of device configuration file is completed");\r
+    } else {\r
+      logger.error("Configuration file is not available for device {}", macId);\r
+      return Optional.ofNullable(configurationData);\r
+    }\r
+    return Optional.ofNullable(configurationData);\r
+  }\r
+\r
+  public void saveConfigFileContents(MultipartFile file)\r
+      throws InvalidConfigurationServiceException {\r
+    String fileName = StringUtils.cleanPath(file.getOriginalFilename());\r
+\r
+    if (fileName.contains("..")) {\r
+      throw new InvalidConfigurationServiceException(\r
+          "Filename contains invalid path sequence " + fileName);\r
+    }\r
+\r
+    ConfigFileContent configFileContent = new ConfigFileContent();\r
+\r
+    try {\r
+      configFileContent.setFileContent(new String(file.getBytes(), StandardCharsets.UTF_8));\r
+      configFileContent.setMacId(Utility.getMacId(fileName));\r
+\r
+      if (!configFileContent.getFileContent().contains("<configDataFile>")) {\r
+        logger.error(\r
+            "File {} is not a valid configuration file as it doesn't contain tag \"<configDataFile>\"",\r
+            fileName);\r
+        throw new InvalidConfigurationServiceException(\r
+            "File is not a valid configuration file as it doesn't contain tag \"<configDataFile>\"");\r
+      }\r
+\r
+    } catch (Exception e) {\r
+      throw new InvalidConfigurationServiceException(\r
+          "Error occurred while reading file content. Reason: " + e.getMessage());\r
+    }\r
+\r
+    configurationXMLDataParser.validateFile(configFileContent);\r
+\r
+    logger.debug("Saving configuration file {} content for device of macId {}", fileName,\r
+        Utility.getMacId(fileName));\r
+    saveConfigFileContent(configFileContent);\r
+    logger.debug("Configuration file content saved successfully");\r
+  }\r
+\r
+}\r
diff --git a/config-data/src/main/resources/application.properties b/config-data/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..6673c3b
--- /dev/null
@@ -0,0 +1,38 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+server.port=9000\r
+spring.datasource.username=${DB_USERNAME}\r
+spring.datasource.password=${DB_PASSWORD}\r
+spring.datasource.url=jdbc:mariadb://${DB_SERVICE}:3306/${DB_NAME}\r
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver\r
+spring.datasource.platform=mariadb\r
+spring.datasource.initialization-mode=always\r
+spring.jpa.show-sql=true\r
+spring.jpa.hibernate.ddl-auto=none\r
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect\r
+\r
+## MULTIPART (MultipartProperties)\r
+# Enable multipart uploads\r
+spring.servlet.multipart.enabled=true\r
+# Threshold after which files are written to disk.\r
+spring.servlet.multipart.file-size-threshold=2KB\r
+# Max file size.\r
+spring.servlet.multipart.max-file-size=200MB\r
+# Max Request Size\r
+spring.servlet.multipart.max-request-size=215MB
\ No newline at end of file
diff --git a/config-data/src/main/resources/log4j2.xml b/config-data/src/main/resources/log4j2.xml
new file mode 100644 (file)
index 0000000..2d73ef5
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<Configuration status="DEBUG" monitorInterval="30">\r
+    <Properties>\r
+       <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %m%n</Property>\r
+       <Property name="APP_LOG_ROOT">/logs</Property>\r
+       <Property name="LOG_FILE_NAME">configurationServiceLogs</Property>\r
+    </Properties>\r
+    <Appenders>\r
+       <Console name="console" target="SYSTEM_OUT" follow="true">\r
+               <PatternLayout pattern="${LOG_PATTERN}" />\r
+       </Console>\r
+\r
+       <RollingFile name="applicationLog"\r
+               fileName="${APP_LOG_ROOT}/debug/${LOG_FILE_NAME}-debug.log"\r
+               filePattern="${APP_LOG_ROOT}/debug/${LOG_FILE_NAME}-debug-%d{yyyy-MM-dd}-%i.log">\r
+               <PatternLayout>\r
+                       <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%X{client}] [%.-40t]\r
+                               %-25.45c{1} %-5p: %m%n</pattern>\r
+                       <header>Debug Log started at: $${date:yyyy-MM-dd HH:mm:ss}</header>\r
+               </PatternLayout>\r
+               <Policies>\r
+                       <SizeBasedTriggeringPolicy size="4MB" />\r
+                       <TimeBasedTriggeringPolicy interval="1"\r
+                               modulate="true" />\r
+               </Policies>\r
+               <DefaultRolloverStrategy>\r
+                       <Delete basePath="${APP_LOG_ROOT}/debug/" maxDepth="1">\r
+                               <IfFileName glob="application-debug*.log" />\r
+                               <IfAccumulatedFileCount exceeds="10" />\r
+                       </Delete>\r
+               </DefaultRolloverStrategy>\r
+       </RollingFile>\r
+\r
+       <RollingFile name="springLog"\r
+               fileName="${APP_LOG_ROOT}/debug/spring-framework.log" filePattern="${APP_LOG_ROOT}/debug/spring-%d{yyyy-MM-dd}-%i.log">\r
+               <PatternLayout pattern="${LOG_PATTERN}" />\r
+               <Policies>\r
+                       <SizeBasedTriggeringPolicy size="4MB" />\r
+                       <TimeBasedTriggeringPolicy interval="1"\r
+                               modulate="true" />\r
+               </Policies>\r
+               <DefaultRolloverStrategy>\r
+                       <Delete basePath="${APP_LOG_ROOT}/debug/" maxDepth="1">\r
+                               <IfFileName glob="spring*.log" />\r
+                               <IfAccumulatedFileCount exceeds="10" />\r
+                       </Delete>\r
+               </DefaultRolloverStrategy>\r
+       </RollingFile>\r
+\r
+       <RollingFile name="hibernateLog" fileName="${APP_LOG_ROOT}/debug/database.log"\r
+               filePattern="${APP_LOG_ROOT}/debug/database-%d{yyyy-MM-dd}-%i.log">\r
+               <PatternLayout pattern="${LOG_PATTERN}" />\r
+               <Policies>\r
+                       <SizeBasedTriggeringPolicy size="4MB" />\r
+                       <TimeBasedTriggeringPolicy interval="1"\r
+                               modulate="true" />\r
+               </Policies>\r
+               <DefaultRolloverStrategy>\r
+                       <Delete basePath="${APP_LOG_ROOT}/debug/" maxDepth="1">\r
+                               <IfFileName glob="application-debug*.log" />\r
+                               <IfAccumulatedFileCount exceeds="10" />\r
+                       </Delete>\r
+               </DefaultRolloverStrategy>\r
+       </RollingFile>\r
+\r
+    </Appenders>\r
+\r
+    <Loggers>\r
+       <Logger name="org.commscope.tr069adapter.config" level="debug"\r
+               additivity="false">\r
+               <appender-ref ref="console" />\r
+               <appender-ref ref="applicationLog" />\r
+       </Logger>\r
+\r
+       <Logger name="org.springframework" level="error" additivity="false">\r
+               <appender-ref ref="console" />\r
+               <AppenderRef ref="springLog" />\r
+       </Logger>\r
+\r
+       <Logger name="org.hibernate" level="error" additivity="false">\r
+               <appender-ref ref="console" />\r
+               <AppenderRef ref="hibernateLog" />\r
+       </Logger>\r
+\r
+       <Root level="DEBUG" additivity="false" />\r
+    </Loggers>\r
+</Configuration>\r
diff --git a/config-data/src/main/resources/schema-mariadb.sql b/config-data/src/main/resources/schema-mariadb.sql
new file mode 100644 (file)
index 0000000..5f36066
--- /dev/null
@@ -0,0 +1,6 @@
+CREATE TABLE IF NOT EXISTS config_file_content \r
+  (\r
+  macid varchar(255) not null,\r
+  file_content mediumtext not null,\r
+  primary key(macid)\r
+);
\ No newline at end of file
diff --git a/config-data/src/main/resources/xsd/ConfigurationData.xsd b/config-data/src/main/resources/xsd/ConfigurationData.xsd
new file mode 100644 (file)
index 0000000..5f1673c
--- /dev/null
@@ -0,0 +1,2744 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+    <xs:element name="configDataFile">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="fileHeader">
+                               <xs:complexType>
+                                       <xs:attribute name="fileFormatVersion" type="xs:string" use="required"/>
+                                       <xs:attribute name="senderName" type="xs:string" use="optional"/>
+                                       <xs:attribute name="vendorName" type="xs:string" use="optional"/>
+                               </xs:complexType>
+                       </xs:element>
+                       <xs:element ref="configData" minOccurs="1" maxOccurs="1"/>
+                       <xs:element name="fileFooter">
+                               <xs:complexType>
+                                       <xs:attribute name="dateTime" type="xs:dateTime" use="required"/>
+                               </xs:complexType>
+                       </xs:element>
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>              
+
+    <xs:element name="configData">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="managedElement" minOccurs="1" maxOccurs="1"/>
+                       <xs:element ref="Device" minOccurs="1" maxOccurs="1" />
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="managedElement">
+       <xs:complexType>
+               <xs:attribute name="OUI" type="xs:string" use="required"/>
+               <xs:attribute name="localDn" type="xs:string" use="required"/>
+               <xs:attribute name="ProductClass" type="xs:string" use="required"/>
+               <xs:attribute name="swVersion" type="xs:string" use="required"/>
+               <xs:attribute name="hwVersion" type="xs:string" use="optional"/>
+       </xs:complexType>
+
+    </xs:element>
+    <xs:element name="Device">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="DeviceInfo" minOccurs="0"/>
+                       <xs:element ref="Ethernet" minOccurs="0"/>
+                       <xs:element ref="FAP" minOccurs="0"/>
+                       <xs:element ref="FaultMgmt" minOccurs="0"/>
+                       <xs:element ref="IP" minOccurs="0"/>
+                       <xs:element ref="IPsec" minOccurs="0"/>
+                       <xs:element ref="ManagementServer" minOccurs="0"/>
+                       <xs:element ref="NeighborDiscovery" minOccurs="0"/>
+                       <xs:element ref="PeriodicStatistics" minOccurs="0"/>
+                       <xs:element ref="QoS" minOccurs="0"/>
+                       <xs:element ref="Security" minOccurs="0"/>
+                       <xs:element ref="Services" minOccurs="0"/>
+                       <xs:element ref="Time" minOccurs="0"/>
+                       <xs:element ref="UserInterface" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_FHMgmt" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_IPsec2" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_IPsecCA" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_License" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_MIGRATION" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_SoftwareManagement" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="DeviceInfo">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="X_0005B9_OperatorName" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Ethernet">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Interface" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="Link" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="VLANTermination" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Interface">
+               <xs:selector xpath="Interface" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-Link">
+               <xs:selector xpath="Link" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-VLANTermination">
+               <xs:selector xpath="VLANTermination" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="Interface">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DuplexMode" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LowerLayers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxBitRate" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Link">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LowerLayers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PriorityTagging" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="VLANTermination">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LowerLayers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="VLANID" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="FAP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="GPS" minOccurs="0"/>
+                       <xs:element ref="PerfMgmt" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DasRttDelay" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EnableDasMode" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_FileTransfer" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_FileTransfersEnh" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="X_0005B9_LogLevelConfiguration" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_Logging" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PlatformManagementEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_RPLogManagement" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_RU" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="X_0005B9_RUBlacklisted" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_RUSoftwareManagement" minOccurs="0"/>
+                       <xs:element name="X_0005B9_RUWhiteList" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_SlotReservation" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="X_0005B9_Trace" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="X_0005B9_TraceFileTransfer" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_UserManagement" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-X_0005B9_FileTransfersEnh">
+               <xs:selector xpath="X_0005B9_FileTransfersEnh" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-X_0005B9_RU">
+               <xs:selector xpath="X_0005B9_RU" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-X_0005B9_SlotReservation">
+               <xs:selector xpath="X_0005B9_SlotReservation" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-X_0005B9_Trace">
+               <xs:selector xpath="X_0005B9_Trace" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="GPS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="AGPSServerConfig" minOccurs="0"/>
+                       <xs:element name="ContinuousGPS" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="ContinuousGPSStatus" minOccurs="0"/>
+                       <xs:element name="GPSReset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ScanOnBoot" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ScanPeriodically" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ScanTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_HoldoverTimeOutDuration" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_NominalGPS" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="AGPSServerConfig">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Password" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReferenceLatitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReferenceLongitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerPort" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerURL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Username" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_aGPSRetryPeriodMax" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ContinuousGPSStatus">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="FirstFixTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LockTimeOutDuration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SatelliteTrackingInterval" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_NominalGPS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Altitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Confidence" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DegreesOfLatitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DegreesOfLongitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DirectionOfAltitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LatitudeSign" type="xs:string" minOccurs="0"/>
+                       <xs:element name="OrientationOfMajorAxis" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UncertaintyAltitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UncertaintySemiMajor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UncertaintySemiMinor" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PerfMgmt">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Config" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Config">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="X_0005B9_FileType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_XMLFormat" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_FileTransfer">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="FileDetails" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="HistOMFileWithDebugLog" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Password" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RPOMFileWithDebugLog" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerURL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Username" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-FileDetails">
+               <xs:selector xpath="FileDetails" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="FileDetails">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FileName" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IncludeRadioPointLog" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LocationOnServer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferNow" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferWindowDuration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferWindowInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferWindowStartTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_FileTransfersEnh">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="FileDetails" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FileCompressionEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FileCompressionType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FileName" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IncludeRadioPointLog" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LocationOnServer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferNow" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferWindowDuration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferWindowInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferWindowStartTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+                       <xs:element name="Password" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerURL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Username" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+       <xs:unique name="uniqueId-FileDetails1">
+               <xs:selector xpath="FileDetails" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="X_0005B9_LogLevelConfiguration">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CUAPP_CURURecvSendT" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DIMClient" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_FAPController" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_FAPManagement" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_L2L3MessagingInterface" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_RRM" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_RRMUEMGR" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_RuMgr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_SON" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LTEAPP_STACKController" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RRC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RUAPP_RUDiscoveryConfigClient" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_Logging">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="SyslogNg" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SyslogNg">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="EventTypes" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MonitoredInterface" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Port" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Server" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UseIPSecTunnel" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_RPLogManagement">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="IncludePlatformLog" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TransferLogsToController" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_RU">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="Device" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="DeviceInfo" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DeviceType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="InstallationType" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="Location" minOccurs="0"/>
+                       <xs:element ref="NGRP" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="PHY" minOccurs="0"/>
+                       <xs:element ref="RAN" minOccurs="0"/>
+                       <xs:element ref="SlotReservation" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="RUIndex" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Reboot" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Reset" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Location">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Altitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Confidence" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DataObject" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DegreesOfLatitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DegreesOfLongitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DirectionOfAltitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LatitudeSign" type="xs:string" minOccurs="0"/>
+                       <xs:element name="OrientationOfMajorAxis" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UncertaintyAltitude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UncertaintySemiMajor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UncertaintySemiMinor" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="NGRP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="REBOOT" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RESET" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TimingSource" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PHY">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="AntennaInfo" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="AntennaInfo">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AntennaType" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RAN">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="RF" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RF">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="RfTxPower" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SlotReservation">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AntennaPortNumber" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_RUSoftwareManagement">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ApplyImage" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EnableNGRPUpgrade" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FileTransferProtocol" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_SlotReservation">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AntennaPortNumber" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PARTNUMBER" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_Trace">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="UeSpecificTraceEnable" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_TraceFileTransfer">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="FileUploadPeriodicity" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LocationOnServer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Password" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerPort" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Username" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_UserManagement">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ExternalAuthAccess" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="LDAP" minOccurs="0"/>
+                       <xs:element ref="RADIUS" minOccurs="0"/>
+                       <xs:element ref="UserAccount" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-UserAccount">
+               <xs:selector xpath="UserAccount" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="LDAP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AdminDN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AdminPassword" type="xs:string" minOccurs="0"/>
+                       <xs:element name="BaseDN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ConnectionTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Filter" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Port" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RetryCount" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SASL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerIPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerName" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TLSCertificate" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RADIUS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ConnectionTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NASIPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NASIdentifier" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Port" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RetryCount" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerIPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SharedSecretKey" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="UserAccount">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Password" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Privileges" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ResetPassword" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Status" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UserName" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="FaultMgmt">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="CurrentAlarm" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="ExpeditedEvent" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="HistoryEvent" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="SupportedAlarm" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="X_0005B9_SendTestAlarm" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-CurrentAlarm">
+               <xs:selector xpath="CurrentAlarm" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-ExpeditedEvent">
+               <xs:selector xpath="ExpeditedEvent" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-HistoryEvent">
+               <xs:selector xpath="HistoryEvent" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-SupportedAlarm">
+               <xs:selector xpath="SupportedAlarm" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="CurrentAlarm">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CurrentAlarmIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ExpeditedEvent">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ExpediteAlarmIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="HistoryEvent">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="HistoryAlarmIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SupportedAlarm">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ReportingMechanism" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SupportedAlarmIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IP">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="Interface" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AutoIPEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="IPv4Address" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="IPv4Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="IPv6Address" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="IPv6Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="IPv6Prefix" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="Loopback" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxMTUSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Reset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Router" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ULAEnable" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Interface1">
+               <xs:selector xpath="Interface" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-IPv4Address">
+               <xs:selector xpath="IPv4Address" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-IPv6Address">
+               <xs:selector xpath="IPv6Address" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-IPv6Prefix">
+               <xs:selector xpath="IPv6Prefix" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="IPv4Address">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AddressingType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SubnetMask" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DNS" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IPv6Address">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Anycast" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Origin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PreferredLifetime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Prefix" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ValidLifetime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DNS" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Prefix" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IPv6Prefix">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildPrefixBits" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Origin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ParentPrefix" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PreferredLifetime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Prefix" type="xs:string" minOccurs="0"/>
+                       <xs:element name="StaticType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ValidLifetime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IPsec">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="Filter" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="IKEv2SA" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="LogLevel" minOccurs="0"/>
+                       <xs:element ref="Profile" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="Tunnel" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="X_0005B9_ExcludeCP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IgnoreBasicConstraint" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Filter">
+               <xs:selector xpath="Filter" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-IKEv2SA">
+               <xs:selector xpath="IKEv2SA" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-Profile">
+               <xs:selector xpath="Profile" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-Tunnel">
+               <xs:selector xpath="Tunnel" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="Filter">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AllInterfaces" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Interface" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Order" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Profile" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IKEv2SA">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="ChildSA" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+       <xs:unique name="uniqueId-ChildSA">
+               <xs:selector xpath="ChildSA" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="ChildSA">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="LogLevel">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="X_0005B9_cfg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_chd" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_dmn" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_enc" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ike" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_knl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_lib" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_mgr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_net" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Profile">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AHAllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AntiReplayWindowSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildSATimeLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildSATrafficLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DSCPMarkPolicy" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DoNotFragment" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ESPAllowedEncryptionAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ESPAllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedDiffieHellmanGroupTransforms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedEncryptionAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedPseudoRandomFunctions" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AuthenticationMethod" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2DeadPeerDetectionTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2NATTKeepaliveTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2SATimeLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxChildSAs" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Protocol" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RemoteEndpoints" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IKEv2RekeyMargin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IPsec_IKERetryCount" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IPsec_IKERetryTimeOut" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IPsec_IKETunnelBounce" type="xs:string" minOccurs="0"/>
+                       <xs:element name="gtpFragmentation" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Tunnel">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ManagementServer">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ConnectionRequestPassword" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ConnectionRequestUsername" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Password" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicInformEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicInformInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicInformTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="URL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UpgradesManaged" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Username" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="NeighborDiscovery">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="InterfaceSetting" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-InterfaceSetting">
+               <xs:selector xpath="InterfaceSetting" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="InterfaceSetting">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Interface" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxRtrSolicitations" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NUDEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RSEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RetransTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RtrSolicitationInterval" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PeriodicStatistics">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="SampleSet" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-SampleSet">
+               <xs:selector xpath="SampleSet" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="SampleSet">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="SampleInterval" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="QoS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Classification" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Classification">
+               <xs:selector xpath="Classification" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="Classification">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="DSCPMark" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Protocol" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Security">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Certificate" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="X_0005B9_CMPv2" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_WebGUI" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Certificate">
+               <xs:selector xpath="Certificate" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="Certificate">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CertIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_CMPv2">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CAServer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Port" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RenewBefore" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SecGWServer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="URI" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_WebGUI">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ResetAdminUserPassword" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Services">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="FAPService" minOccurs="0" maxOccurs="2"/>
+                       <xs:element ref="VoiceService" minOccurs="0" maxOccurs="2"/>
+                       <xs:element name="X_0005B9_FNEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOCNEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_nRrc4CatM1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_numSectorsPerBC" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="FAPService">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="AccessMgmt" minOccurs="0"/>
+                       <xs:element ref="Capabilities" minOccurs="0"/>
+                       <xs:element ref="CellConfig" minOccurs="0"/>
+                       <xs:element ref="FAPControl" minOccurs="0"/>
+                       <xs:element ref="REM" minOccurs="0"/>
+                       <xs:element ref="Transport" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_AutoConfig" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_AutoTxPower" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_ExpressREM" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_LTE" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="AccessMgmt">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="LTE" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="LTE">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AccessMode" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CSGID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="HNBName" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxCSGMembers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxNonCSGMembers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxResourceNonCSGMembers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxUEsServed" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Capabilities">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="X_0005B9_MaxNumX2" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="CellConfig">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="EPC" minOccurs="0"/>
+    <xs:element name="RAN" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="CellRestriction" minOccurs="0"/>
+                       <xs:element ref="Common" minOccurs="0"/>
+                       <xs:element ref="MAC" minOccurs="0"/>
+                       <xs:element ref="Mobility" minOccurs="0"/>
+                       <xs:element ref="NeighborList" minOccurs="0"/>
+                       <xs:element ref="NeighborListInUse" minOccurs="0"/>
+    <xs:element name="PHY" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="PDSCH" minOccurs="0"/>
+                       <xs:element ref="PRACH" minOccurs="0"/>
+                       <xs:element ref="PUCCH" minOccurs="0"/>
+                       <xs:element ref="PUSCH" minOccurs="0"/>
+                       <xs:element ref="SRS" minOccurs="0"/>
+                       <xs:element ref="ULPowerControl" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RF" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="DLBandwidth" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EARFCNDL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EARFCNUL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FreqBandIndicator" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PBCHPowerOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PSCHPowerOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PhyCellID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReferenceSignalPower" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SSCHPowerOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ULBandwidth" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Imargin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Imax" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxTxPower" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="RLC" minOccurs="0"/>
+                       <xs:element ref="RRCTimers" minOccurs="0"/>
+                       <xs:element ref="S1AP" minOccurs="0"/>
+                       <xs:element ref="S1U" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_X2AP_CE" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="X_0005B9_CE" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_CarrierAggregation" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_RrcConnection" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_RrcConnectionRejection" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="EPC">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AllowedCipheringAlgorithmList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AllowedIntegrityProtectionAlgorithmList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EAID" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="PLMNList" minOccurs="0" maxOccurs="unbounded"/>
+    <xs:element name="QoS" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PacketelayBudget" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Priority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QCI" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Type" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DSCP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DeltaBundle" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PacketLossRate" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_RLCMode" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_RTPBundle" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_SPSPeriodDL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_SPSPeriodUL" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+                       <xs:element name="TAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxConcurrentCMASBroadcasts" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PWSMode" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-PLMNList">
+               <xs:selector xpath="PLMNList" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-QoS">
+               <xs:selector xpath="QoS" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="PLMNList">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReservedForOperatorUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IsPrimary" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PLMNID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringForEmergency" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringSkipForMMTELVideo" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringSkipForMMTELVoice" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringSkipForSMS" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_ImpendingOverload" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MODataBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MODataBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MODataBarringTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOSigBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOSigBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOSigBarringTime" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_NormalLoad" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_Overload" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PLMNListIndex" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Type" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_WarningLoadLvl" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_ImpendingOverload">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="acBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_NormalLoad">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="acBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_Overload">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="acBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_WarningLoadLvl">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="acBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="acBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="CellRestriction">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="BarringForEmergency" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellBarred" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReservedForOperatorUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_AccBarStaticEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_AutoACBEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringSkipForMMTELVideo" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringSkipForMMTELVoice" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_BarringSkipForSMS" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_ImpendingOverload" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ACBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="X_0005B9_L3_ImpendingOverload" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_L3_OK" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_L3_Overload" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_L3_Warning" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MODataBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MODataBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MODataBarringTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOSigBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOSigBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MOSigBarringTime" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_NormalLoad" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ACBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_Overload" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ACBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_WarningLoadLvl" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ACBarringFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringForSpecialAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ACBarringTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="X_0005B9_cellLock" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_guardTimer" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_L3_ImpendingOverload">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="MaxS1PagesPerRRCPage" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_L3_OK">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="MaxS1PagesPerRRCPage" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_L3_Overload">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="MaxS1PagesPerRRCPage" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_L3_Warning">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="MaxS1PagesPerRRCPage" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Common">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CellIdentity" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_CellMode" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_CellName" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="MAC">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="DRX" minOccurs="0"/>
+                       <xs:element ref="RACH" minOccurs="0"/>
+                       <xs:element ref="ULSCH" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DlMssClampVal" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DynDciCQIThreshDl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DynDciCQIThreshUl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_GratUlDciTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_GtpMtu" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_HighCQIAggLevelDl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_HighCQIAggLevelUl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_LowCQIAggLevelDl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_LowCQIAggLevelUl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MacSuspendEnbRlfEnabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxCcchMsgRetx" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxDLUePerTTI" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxGbrBearers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxGbrDLUePerTTI" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxGbrDlBitsPerSec" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxGbrULUePerTTI" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxGbrUlBitsPerSec" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxHarqReTxDl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxNumCzvRp" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MaxULUePerTTI" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MinCzvThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MssClampEnabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PriorityMetricMethod" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PucchPrbReserved" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_QCI6MinDlBitsPerSec" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_QCI6MinUlBitsPerSec" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ReuseInterferenceThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_SingleLayerCLSMEnabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_UlMssClampVal" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="DRX">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="DRXEnabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DRXInactivityTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DRXRetransmissionTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DRXShortCycleTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DRXStartOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LongDRXCycle" type="xs:string" minOccurs="0"/>
+                       <xs:element name="OnDurationTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ShortDRXCycle" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_maxDrxUe" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RACH">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ContentionResolutionTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxHARQMsg3Tx" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MessagePowerOffsetGroupB" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MessageSizeGroupA" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NumberOfRaPreambles" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PowerRampingStep" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PreambleInitialReceivedTargetPower" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PreambleTransMax" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ResponseWindowSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SizeOfRaGroupA" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="PreambleTransMax" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="X_0005B9_CE0" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_CE0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ContentionResolutionTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ResponseWindowSize" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ULSCH">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="X_0005B9_qci1MaxHARQ-Tx" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Mobility">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="ConnMode" minOccurs="0"/>
+                       <xs:element ref="IdleMode" minOccurs="0"/>
+                       <xs:element name="X_0005B9_csfbMeasWaitTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_csfbPrefRat" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_iRatPsRedirection" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ConnMode">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="EUTRA" minOccurs="0"/>
+                       <xs:element ref="IRAT" minOccurs="0"/>
+                       <xs:element name="X_0005B9_HOBlackListEnabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_InterFreqHandOffEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IntraFreqHandOffEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_RSRPThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_RSRQThreshold" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="EUTRA">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="A1ThresholdRSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A1ThresholdRSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A2ThresholdRSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A2ThresholdRSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A3Offset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A5Threshold1RSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A5Threshold1RSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A5Threshold2RSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="A5Threshold2RSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FilterCoefficientRSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FilterCoefficientRSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Hysteresis" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReportAmount" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReportInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReportOnLeave" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ReportQuantity" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TimeToTrigger" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TriggerQuantity" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="A3Offset" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IRAT">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="B1ThresholdUTRAEcN0" type="xs:string" minOccurs="0"/>
+                       <xs:element name="B1ThresholdUTRARSCP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="B2Threshold1RSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="B2Threshold1RSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="B2Threshold2UTRAEcN0" type="xs:string" minOccurs="0"/>
+                       <xs:element name="B2Threshold2UTRARSCP" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IdleMode">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="Common" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="NCellChangeHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NCellChangeMedium" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QHystSFHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QHystSFMedium" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Qhyst" type="xs:string" minOccurs="0"/>
+                       <xs:element name="THystNormal" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Tevaluation" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IRAT" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="CDMA2000" minOccurs="0"/>
+                       <xs:element ref="GERAN" minOccurs="0"/>
+                       <xs:element ref="UTRA" minOccurs="0"/>
+                       <xs:element name="X_0005B9_CSFBMODE" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_CSFBRATTYPE" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EmergencyExcessFactor" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_cSFBDUALReceiveENABLE" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="InterFreq" minOccurs="0"/>
+                       <xs:element ref="IntraFreq" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="CDMA2000">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="CDMA2000Band" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="SearchWindowSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionCDMA2000" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionCDMA2000SFHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionCDMA2000SFMedium" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_CellParam" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_Mobility_SIB8_Parameters" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-CDMA2000Band">
+               <xs:selector xpath="CDMA2000Band" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="CDMA2000Band">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="BandClass" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReselectionPriority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXLow" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Index" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_CellParam">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ReferenceCellID" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_Mobility_SIB8_Parameters">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Auth" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ForeignNidReg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ForeignSidReg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="HomeReg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IMSI1112" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ImsiTSupported" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MCC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxNumAltSO" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MultipleNid" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MultipleSid" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Nid" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PacketZoneId" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ParameReg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PowerDownReg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PowerUpReg" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PrefMSIDType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RegPrd" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RegZone" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Sid" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TotalZone" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ZoneTimer" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="GERAN">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="GERANFreqGroup" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="t-ReselectionGERAN" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-GERANFreqGroup">
+               <xs:selector xpath="GERANFreqGroup" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="GERANFreqGroup">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="BCCHARFCN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="BandIndicator" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReselectionPriority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXLow" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Index" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="UTRA">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="TReselectionUTRA" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="UTRANFDDFreq" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="X_0005B9_threshXHighQr9SIB6" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_threshXLowQr9SIB6" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-UTRANFDDFreq">
+               <xs:selector xpath="UTRANFDDFreq" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="UTRANFDDFreq">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReselectionPriority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PMaxUTRA" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QQualMin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXLow" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UTRACarrierARFCN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Index" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="InterFreq">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Carrier" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Carrier">
+               <xs:selector xpath="Carrier" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="Carrier">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReselectionPriority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EUTRACarrierARFCN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Pmax" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QOffsetFreq" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMinSIB5" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionEUTRA" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionEUTRASFHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionEUTRASFMedium" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshXLow" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MultiBandInfoList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ThreshXHighQr9SIB5" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ThreshXLowQr9SIB5" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_qQualMinSIB5" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="IntraFreq">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CellReselectionPriority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Pmax" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMinOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMinSIB1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMinSIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SIntraSearch" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SNonIntraSearch" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionEUTRA" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionEUTRASFHigh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReselectionEUTRASFMedium" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ThreshServingLow" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="QRxLevMinSIB1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QRxLevMinSIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="qQualMinRSRQSIB1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="qQualMinRSRQSIB3" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="X_0005B9_IntraFreqReselectionSIB1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_allowedMeasurementBandwidthSIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_neighCellConfigSIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_pMaxSIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_presenceAntennaPort1SIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_qQualMinOffsetr9SIB1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_qQualMinSIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_qQualMinr9SIB1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_sIntraSearch_Pr9SIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_sIntraSearch_Qr9SIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_snonIntraSearch_Pr9SIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_snonIntraSearch_Qr9SIB3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_thresholdServingLowQSIB3" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="NeighborList">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="InterRATCell" minOccurs="0"/>
+                       <xs:element ref="LTECell" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-LTECell">
+               <xs:selector xpath="LTECell" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="InterRATCell">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="CDMA2000" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ARFCN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="BandClass" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MustInclude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PNOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Type" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_FpcFchInitSetptRc3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Index" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MinProtocolRevLevel" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_PilotInc" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ProtocolRevLevel" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-CDMA2000">
+               <xs:selector xpath="CDMA2000" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="LTECell">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Blacklisted" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CIO" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EUTRACarrierARFCN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MustInclude" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PLMNID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PhyCellID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Qoffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RSTxPower" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_CSGIdentity" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_CSGIndication" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_FreqBandIndicatorPriority" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_LBPartner" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_LTECellNeighborListIndex" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MFBICapable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MultiBandInfoList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_TAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_X2LinkEnable" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="NeighborListInUse">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="InterRATCell" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="CDMA2000" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="NLInUseCDMA2000Index" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+                       <xs:element ref="GSM" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element ref="UMTS" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="LTECell" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="NeighborListInUseCellIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-CDMA20001">
+               <xs:selector xpath="CDMA2000" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-GSM">
+               <xs:selector xpath="GSM" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-UMTS">
+               <xs:selector xpath="UMTS" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-LTECell1">
+               <xs:selector xpath="LTECell" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="GSM">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="NLInUseGSMIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="UMTS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="NLInUseUMTSIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PDSCH">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Pa" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Pb" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PRACH">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ConfigurationIndex" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FreqOffset" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RootSequenceIndex" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ConfigIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="ZeroCorrelationZoneConfig" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PUCCH">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CQIPUCCHResourceIndex" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DeltaPUCCHShift" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DynamicSRsupport" type="xs:string" minOccurs="0"/>
+                       <xs:element name="N1PUCCHAN" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NRBCQI" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DummyDci0Allocation" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DummyDci0Thr" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="PUSCH">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="ULRS" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ULRS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="SequenceHoppingEnabled" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SRS">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AckNackSRSSimultaneousTransmission" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SRSBandwidthConfig" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SRSEnabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SRSMaxUpPTS" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="ULPowerControl">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alpha" type="xs:string" minOccurs="0"/>
+                       <xs:element name="P0NominalPUCCH" type="xs:string" minOccurs="0"/>
+                       <xs:element name="P0NominalPUSCH" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RLC">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="DRB" minOccurs="0"/>
+                       <xs:element ref="SRB1" minOccurs="0"/>
+                       <xs:element ref="SRB2" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="DRB">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="MaxRetxThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TPollRetransmit" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SRB1">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="DefaultConfiguration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxRetxThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PollByte" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PollPDU" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TPollRetransmit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReordering" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TStatusProhibit" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SRB2">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="DefaultConfiguration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxRetxThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PollByte" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PollPDU" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TPollRetransmit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TReordering" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TStatusProhibit" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="RRCTimers">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="N310" type="xs:string" minOccurs="0"/>
+                       <xs:element name="N311" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T300" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T301" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T302" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T304EUTRA" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T304IRAT" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T310" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T311" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T320" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="T300" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T301" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T304EUTRA" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T310" type="xs:string" minOccurs="0"/>
+                       <xs:element name="T311" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="X_0005B9_RLFWaitForReestTimer" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="S1AP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="TRelocOverall" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TRelocPrep" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="TRelocOverall" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TRelocPrep" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="X_0005B9_eNBName" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="S1U">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="GTPUEchoInterval" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_X2AP_CE">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="TRelocOverall" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TRelocPrep" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_CE">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="eDRXAllowed" type="xs:string" minOccurs="0"/>
+                       <xs:element name="numSib1BrRep" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_CarrierAggregation">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="CaLoadBalance" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CaUeThr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DlQloadLowCount" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DlQloadLowThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="McsScc" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PccCaThr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="QloadCaLimitInstances" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccA2ThreshRSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccA2ThreshRSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccA4ThreshRSRP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccA4ThreshRSRQ" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccColocatedPairTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccCqiLowCount" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccCqiLowThesh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SccCqiStaleTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_RrcConnection">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="NRrcCC" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_RrcConnectionRejection">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="deprioritisationTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="deprioritisationType" type="xs:string" minOccurs="0"/>
+                       <xs:element name="waitTime" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="FAPControl">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AdminState" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="Gateway" minOccurs="0"/>
+                       <xs:element name="PMConfig" type="xs:string" minOccurs="0"/>
+    <xs:element name="X_0005B9_CE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="DefaultPagingCycle" type="xs:string" minOccurs="0"/>
+                       <xs:element name="siRepetitionPattern" type="xs:string" minOccurs="0"/>
+                       <xs:element name="siValidityTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="siWindowLength" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="X_0005B9_CatM1Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_DefaultPagingCycle" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EmergencyErabARP" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_Enable4X4MIMO" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EnableDL256QAM" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EnableDlReuse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EnableUL64QAM" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EnableUlReuse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IdleLoadBalance" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_InactivityTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MCPTTEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MFBISupport" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_MultiBandInfoList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ReuseFactorDl" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_ReuseFactorUl" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_SelfConfig" minOccurs="0"/>
+                       <xs:element name="X_0005B9_UnequalTxPower" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_X2Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_downlinkCaEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_explicitlyReleaseAfter" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_maxSPSDL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_maxSPSUL" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_maxSirThr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_minSirThr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_numConfiguredSPSProcess" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_numRpInMaxQsv" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_spsMcsOverride" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element name="SelfConfigEvents" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Gateway">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="S1ConnectionMode" type="xs:string" minOccurs="0"/>
+                       <xs:element name="S1SigLinkPort" type="xs:string" minOccurs="0"/>
+                       <xs:element name="S1SigLinkServerList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SecGWServer1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SecGWServer2" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SecGWServer3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_EnableDUALTunnel" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_S1apGaurdPeriod" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_SecGW2Server1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_SecGW2Server2" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_SecGW2Server3" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_SelfConfig">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ANRSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AssignSameTAC" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AutoTxPowerEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CellReselectionSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ClearDiscoveredNeighbors" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CrntiHist" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EARFCNDLSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="InterFreqMeasSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="InterRATMeasSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IntraFreqMeasSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NeighborListSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PciColDetectThr" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PciCollisionDetectFlag" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PhyCellIDSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PmaxSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PreambleRACHTxPwrSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PropotionalRrcSplit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RSTxPowerSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RootSequenceIndexSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RsiCollisionDetectFlag" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TACPolicy" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TACSelfConfigEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X2TriggeredPciReconfigAllowed" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="REM">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Cell" minOccurs="0" maxOccurs="unbounded"/>
+                       <xs:element name="EUTRACarrierARFCNDLList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="InServiceHandling" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="REMBandList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="REMPLMNList" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ScanOnBoot" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ScanPeriodically" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ScanTimeout" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="UMTS" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="GSM" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ARFCNList" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+                       <xs:element ref="WCDMA" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Cell">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="RemLteCellIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="WCDMA">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="UARFCNDLList" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Transport">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="SCTP" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="SCTP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="HBInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxAssociationRetransmits" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxInitRetransmits" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxPathRetransmits" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RTOInitial" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RTOMax" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RTOMin" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SCTPMTUSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SackFrequency" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ValCookieLife" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_AutoConfig">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AvgMcsOnDlThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AvgMcsOnUlThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ConnectionDropRateThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EarfcnProgressiveEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EpochCountThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ErabEstablishmentFailureThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FiftyThPercentileMcsDlThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="FiftyThPercentileMcsUlThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="HoSuccessThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PciProgressiveEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PeriodicTime" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RachToConnectionThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RsiProgressiveEnable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RsrpPciThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RssiThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TenThPercentileMcsDlThresh" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TenThPercentileMcsUlThresh" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_AutoTxPower">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AutoPowerConfigTimer" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DisablePowerDuration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="HOCountThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="LeakageRateThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ProcessRLFonRrcConnEst" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RLFRateThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RRCConnectionThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RSRPThreshold" type="xs:string" minOccurs="0"/>
+                       <xs:element name="STmsiAge" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Tcritical" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ToggleCountThreshold" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_ExpressREM">
+       <xs:complexType>
+               <xs:sequence>
+    <xs:element name="LTE" minOccurs="0">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enabled" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NumCarriers" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PCIListLength" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Periodicity" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TimeOut" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_LTE">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ANREpochPeriod" type="xs:string" minOccurs="0"/>
+                       <xs:element name="CrntiStartRange" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EARFCNDLInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="EARFCNULInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PMReportFormat" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PMaxInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PhyCellIDInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PreambleRACHTxPwrInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RSTxPowerInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RootSequenceIndexInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TACInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TACList" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="VoiceService">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="X_0005B9_VoIP" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_VoIP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="EmergencyPolicy" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="Time">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="LocalTimeZone" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NTPServer1" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NTPServer2" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NTPServer3" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NTPServer4" type="xs:string" minOccurs="0"/>
+                       <xs:element name="NTPServer5" type="xs:string" minOccurs="0"/>
+                       <xs:element ref="X_0005B9_PTP" minOccurs="0"/>
+                       <xs:element name="X_0005B9_TimeSource" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_PTP">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AssymetricDelay" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DomainNumber" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MultiCastIPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Server" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ServerInUse" type="xs:string" minOccurs="0"/>
+                       <xs:element name="TCID" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="UserInterface">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="X_0005B9_Enable" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_FHMgmt">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="TrapReceiver" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="TrapReceiver">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AuthKey" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AuthProtocol" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DMSIPAddressPort" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IPAddress" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PrivacyKey" type="xs:string" minOccurs="0"/>
+                       <xs:element name="PrivacyProtocol" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ProcessingRate" type="xs:string" minOccurs="0"/>
+                       <xs:element name="SwitchEngineID" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UserName" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_IPsec2">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ExcludeCP" type="xs:string" minOccurs="0"/>
+    <xs:element name="Filter" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AllInterfaces" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Interface" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Order" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Profile" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+    <xs:element name="IKEv2SA" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+    <xs:element name="ChildSA" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+    <xs:element name="Profile" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AHAllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AntiReplayWindowSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildSATimeLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildSATrafficLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DSCPMarkPolicy" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DoNotFragment" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ESPAllowedEncryptionAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ESPAllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedDiffieHellmanGroupTransforms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedEncryptionAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedPseudoRandomFunctions" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AuthenticationMethod" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2DeadPeerDetectionTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2NATTKeepaliveTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2SATimeLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxChildSAs" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Protocol" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RemoteEndpoints" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IKEv2RekeyMargin" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Filter1">
+               <xs:selector xpath="Filter" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-IKEv2SA1">
+               <xs:selector xpath="IKEv2SA" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-ChildSA1">
+               <xs:selector xpath="ChildSA" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-Profile1">
+               <xs:selector xpath="Profile" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="X_0005B9_IPsecCA">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Enable" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ExcludeCP" type="xs:string" minOccurs="0"/>
+    <xs:element name="Filter" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AllInterfaces" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Interface" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Order" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Profile" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+    <xs:element name="IKEv2SA" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+    <xs:element name="ChildSA" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+    <xs:element name="Profile" minOccurs="0" maxOccurs="unbounded">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="AHAllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Alias" type="xs:string" minOccurs="0"/>
+                       <xs:element name="AntiReplayWindowSize" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildSATimeLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ChildSATrafficLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DSCPMarkPolicy" type="xs:string" minOccurs="0"/>
+                       <xs:element name="DoNotFragment" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ESPAllowedEncryptionAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ESPAllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedDiffieHellmanGroupTransforms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedEncryptionAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedIntegrityAlgorithms" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AllowedPseudoRandomFunctions" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2AuthenticationMethod" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2DeadPeerDetectionTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2NATTKeepaliveTimeout" type="xs:string" minOccurs="0"/>
+                       <xs:element name="IKEv2SATimeLimit" type="xs:string" minOccurs="0"/>
+                       <xs:element name="MaxChildSAs" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Protocol" type="xs:string" minOccurs="0"/>
+                       <xs:element name="RemoteEndpoints" type="xs:string" minOccurs="0"/>
+                       <xs:element name="X_0005B9_IKEv2RekeyMargin" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+               </xs:complexType>
+    </xs:element>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Filter12">
+               <xs:selector xpath="Filter" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-IKEv2SA12">
+               <xs:selector xpath="IKEv2SA" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-ChildSA12">
+               <xs:selector xpath="ChildSA" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+       <xs:unique name="uniqueId-Profile12">
+               <xs:selector xpath="Profile" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="X_0005B9_License">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element ref="Licenses" minOccurs="0" maxOccurs="unbounded"/>
+
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:unique name="uniqueId-Licenses">
+               <xs:selector xpath="Licenses" />
+               <xs:field xpath="@index" />
+       </xs:unique>
+    </xs:element>
+    <xs:element name="Licenses">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="LicenseKeyIndex" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+               <xs:attribute name="index" type="dmsIndex" use="required"/>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_MIGRATION">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="Migrate" type="xs:string" minOccurs="0"/>
+                       <xs:element name="Rollback" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+    <xs:element name="X_0005B9_SoftwareManagement">
+       <xs:complexType>
+               <xs:sequence>
+                       <xs:element name="ApplyWindowDuration" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ApplyWindowInterval" type="xs:string" minOccurs="0"/>
+                       <xs:element name="ApplyWindowStart" type="xs:string" minOccurs="0"/>
+                       <xs:element name="UpgradeState" type="xs:string" minOccurs="0"/>
+
+               </xs:sequence>
+       </xs:complexType>
+    </xs:element>
+
+    <xs:simpleType name="dmsIndex">
+       <xs:restriction base="xs:integer">
+               <xs:minInclusive value="1"/>
+               <xs:pattern value="\d+"/>
+       </xs:restriction>
+    </xs:simpleType>
+</xs:schema>
diff --git a/config-data/src/test/java/com/commscope/tr069adapter/config/ConfigDataApplicationTests.java b/config-data/src/test/java/com/commscope/tr069adapter/config/ConfigDataApplicationTests.java
new file mode 100644 (file)
index 0000000..89b8ab9
--- /dev/null
@@ -0,0 +1,102 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package com.commscope.tr069adapter.config;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.FileReader;\r
+import java.io.IOException;\r
+\r
+import org.commscope.tr069adapter.config.dto.ConfigurationData;\r
+import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+public class ConfigDataApplicationTests {\r
+\r
+  public static final String SERVER_URI = "http://localhost:9000/";\r
+  public static final String macId = "mac2";\r
+\r
+  public static void main(String args[]) {\r
+\r
+    testSaveConfigurationFileContent();\r
+    testGetConfigurationData();\r
+    System.out.println("SUCCESSFUL");\r
+  }\r
+\r
+  private static void testSaveConfigurationFileContent() {\r
+    System.out.println("\n*******Strating test testSaveConfigurationFileContent*******\n");\r
+    RestTemplate restTemplate = new RestTemplate();\r
+\r
+    String fileContent = readFile("ss.xml");\r
+    ConfigFileContent configFleContent = new ConfigFileContent();\r
+\r
+    configFleContent.setMacId(macId);\r
+    configFleContent.setFileContent(fileContent);\r
+\r
+    String response =\r
+        restTemplate.postForObject(SERVER_URI + "/create", configFleContent, String.class);\r
+    System.out.println("Saved");\r
+    // printEmpData(response);\r
+    System.out.println("\n*******Test testGetConfigurationData completed*******\n");\r
+  }\r
+\r
+  private static void testGetConfigurationData() {\r
+    System.out.println("\n*******Strating test testSaveConfigurationFileContent*******\n");\r
+    RestTemplate restTemplate = new RestTemplate();\r
+\r
+    ConfigurationData configData =\r
+        restTemplate.getForObject(SERVER_URI + "/getConfig/" + macId, ConfigurationData.class);\r
+\r
+    if (null == configData) {\r
+      System.out.println("No configuration data exist for device " + macId);\r
+    } else {\r
+      System.out.println(\r
+          "\n***************Configuration data for device " + macId + "***************\n\n");\r
+      System.out.println(configData.getParameterMONameValueMap());\r
+    }\r
+    // printConfigData(configData);\r
+    System.out.println("\n*******Test testGetConfigurationData completed*******\n");\r
+  }\r
+\r
+  public static String readFile(String completeFilePath) {\r
+    BufferedReader reader = null;\r
+    String line = null;\r
+    StringBuilder stringBuilder = new StringBuilder();\r
+    String ls = "\n";\r
+\r
+    try {\r
+      reader = new BufferedReader(new FileReader(completeFilePath));\r
+\r
+      while ((line = reader.readLine()) != null) {\r
+        stringBuilder.append(line);\r
+        stringBuilder.append(ls);\r
+      }\r
+\r
+      return stringBuilder.toString();\r
+    } catch (Exception ex) {\r
+      return null;\r
+    } finally {\r
+      if (null != reader) {\r
+        try {\r
+          reader.close();\r
+        } catch (IOException e) {\r
+        }\r
+      }\r
+    }\r
+  }\r
+}\r
diff --git a/config-data/src/test/java/org/commscope/tr069adapter/config/ConfigDataTestsUtils.java b/config-data/src/test/java/org/commscope/tr069adapter/config/ConfigDataTestsUtils.java
new file mode 100644 (file)
index 0000000..7b5a841
--- /dev/null
@@ -0,0 +1,77 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config;\r
+\r
+import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
+\r
+public class ConfigDataTestsUtils {\r
+\r
+  public static final String SERVER_URI = "http://localhost:9000/";\r
+  public static final String macId = "testMacId";\r
+  public static final String OUI = "0005B9";\r
+  public static final String PRODUCT_CLASS = "LTE_Enterprise_C-RANSC_Cntrl";\r
+  public static final String HAEDWARE_VERSION = "1.1.1.1";\r
+  public static final String SW_VERSION = "4.5.00.001";\r
+\r
+  public static final String CONFIG_FILE_NAME = macId + ".xml";\r
+\r
+  // public static ConfigurationData getConfigurationData() {\r
+  // ConfigurationData configData = new ConfigurationData();\r
+  //\r
+  // configData.setHardwareVersion(HAEDWARE_VERSION);\r
+  // configData.setSoftwareVersion(SW_VERSION);\r
+  // configData.setLocalDn(macId);\r
+  // configData.setOUI(OUI);\r
+  // configData.setProductClass(PRODUCT_CLASS);\r
+  //\r
+  //// Map<String, String> map = new HashMap<String, String>();\r
+  //// map.put(", value)\r
+  //// configData.set\r
+  // return configData;\r
+  // }\r
+\r
+\r
+  public static ConfigFileContent getConfigFileContent() {\r
+    ConfigFileContent configFileContent = new ConfigFileContent();\r
+\r
+    configFileContent.setFileContent(getFileContent());\r
+    configFileContent.setMacId(macId);\r
+\r
+    return configFileContent;\r
+  }\r
+\r
+\r
+  public static String getFileContent() {\r
+    String fileContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + "<configDataFile>\r\n"\r
+        + "  <fileHeader fileFormatVersion=\"32.594 V14.0.0\" vendorName=\"Commscope\"/>\r\n"\r
+        + "  <configData>\r\n"\r
+        + "    <managedElement swVersion=\"4.3.00.038\" localDn=\"0005B95196D0\" hwVersion=\"750742.00.04\" ProductClass=\"LTE_Enterprise_C-RANSC_Cntrl\" OUI=\"0005B9\"/>\r\n"\r
+        + "    <Device>\r\n" + "      <FAP>\r\n" + "        <GPS>\r\n"\r
+        + "          <AGPSServerConfig>\r\n" + "            <Enable>1</Enable>\r\n"\r
+        + "            <Password>dmsuser</Password>\r\n"\r
+        + "            <ServerPort>7001</ServerPort>\r\n"\r
+        + "            <ServerURL>NONE</ServerURL>\r\n"\r
+        + "            <Username>dmsuser</Username>\r\n" + "          </AGPSServerConfig>\r\n"\r
+        + "          <GPSReset>0</GPSReset>\r\n" + "        </GPS>\r\n" + "            </FAP>\r\n"\r
+        + "    </Device>\r\n" + "  </configData>\r\n"\r
+        + "  <fileFooter dateTime=\"2019-07-16T17:32:35+05:30\"/>\r\n" + "</configDataFile>";\r
+\r
+    return fileContent;\r
+  }\r
+}\r
diff --git a/config-data/src/test/java/org/commscope/tr069adapter/config/ConfugurationDataControllerTests.java b/config-data/src/test/java/org/commscope/tr069adapter/config/ConfugurationDataControllerTests.java
new file mode 100644 (file)
index 0000000..58bfea8
--- /dev/null
@@ -0,0 +1,144 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.config;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertThat;\r
+import static org.junit.jupiter.api.Assertions.fail;\r
+\r
+import java.util.Optional;\r
+\r
+import org.commscope.tr069adapter.config.repository.ConfigurationDataRepository;\r
+import org.hamcrest.CoreMatchers;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.mock.web.MockMultipartFile;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@RunWith(SpringRunner.class)\r
+@SpringBootTest(classes = {ConfigDataServiceApplication.class}) // , args = "--schemas-dir\r
+                                                                // test-schemas --debug true\r
+                                                                // --starting-port 17830")\r
+@AutoConfigureMockMvc\r
+public class ConfugurationDataControllerTests {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  ConfigurationDataRepository configDataRepository;\r
+\r
+  @Test\r
+  public void getMessageTest() {\r
+    RequestBuilder requestBuilder =\r
+        MockMvcRequestBuilders.get("/isActive").accept(MediaType.APPLICATION_JSON);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      resultString = result.getResponse().getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    assertEquals("Application is running", resultString);\r
+  }\r
+\r
+  @Test\r
+  public void uploadMultipleFilesTest() {\r
+    MockMultipartFile multiFile =\r
+        new MockMultipartFile("files", ConfigDataTestsUtils.CONFIG_FILE_NAME,\r
+            MediaType.APPLICATION_XML_VALUE, ConfigDataTestsUtils.getFileContent().getBytes());\r
+    MockHttpServletRequestBuilder requestBuilder =\r
+        MockMvcRequestBuilders.multipart("/importConfig").file(multiFile);// .contentType(MediaType.MULTIPART_FORM_DATA_VALUE);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      MockHttpServletResponse response = result.getResponse();\r
+      resultString = response.getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    String expectedResult =\r
+        "File " + ConfigDataTestsUtils.CONFIG_FILE_NAME + " imported successfully";\r
+    assertEquals(expectedResult, resultString);\r
+  }\r
+\r
+  @Test\r
+  public void viewFileContentTest() {\r
+    Mockito.when(configDataRepository.findById(ConfigDataTestsUtils.macId))\r
+        .thenReturn(Optional.of(ConfigDataTestsUtils.getConfigFileContent()));\r
+\r
+    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders\r
+        .get("/getFileContent/" + ConfigDataTestsUtils.macId).accept(MediaType.APPLICATION_JSON);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      MockHttpServletResponse response = result.getResponse();\r
+      resultString = response.getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    String expectedResult =\r
+        "{\"macId\":\"testMacId\",\"fileContent\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\r\\n<configDataFile>\\r\\n  <fileHeader fileFormatVersion=\\\"32.594 V14.0.0\\\" vendorName=\\\"Commscope\\\"/>\\r\\n  <configData>\\r\\n    <managedElement swVersion=\\\"4.3.00.038\\\" localDn=\\\"0005B95196D0\\\" hwVersion=\\\"750742.00.04\\\" ProductClass=\\\"LTE_Enterprise_C-RANSC_Cntrl\\\" OUI=\\\"0005B9\\\"/>\\r\\n    <Device>\\r\\n      <FAP>\\r\\n        <GPS>\\r\\n          <AGPSServerConfig>\\r\\n            <Enable>1</Enable>\\r\\n            <Password>dmsuser</Password>\\r\\n            <ServerPort>7001</ServerPort>\\r\\n            <ServerURL>NONE</ServerURL>\\r\\n            <Username>dmsuser</Username>\\r\\n          </AGPSServerConfig>\\r\\n          <GPSReset>0</GPSReset>\\r\\n        </GPS>\\r\\n\\t\\t</FAP>\\r\\n    </Device>\\r\\n  </configData>\\r\\n  <fileFooter dateTime=\\\"2019-07-16T17:32:35+05:30\\\"/>\\r\\n</configDataFile>\"}";\r
+    assertEquals(expectedResult, resultString);\r
+  }\r
+\r
+\r
+  @Test\r
+  public void viewConfigurationDataTest() {\r
+    Mockito.when(configDataRepository.findById(ConfigDataTestsUtils.macId))\r
+        .thenReturn(Optional.of(ConfigDataTestsUtils.getConfigFileContent()));\r
+\r
+    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders\r
+        .get("/getConfig/" + ConfigDataTestsUtils.macId).accept(MediaType.APPLICATION_JSON);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      MockHttpServletResponse response = result.getResponse();\r
+      resultString = response.getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    String expectedSubString = "\"localDn\":\"0005B95196D0\"";\r
+    assertThat(resultString, CoreMatchers.containsString(expectedSubString));\r
+  }\r
+}\r
diff --git a/config-data/src/test/resources/application.properties b/config-data/src/test/resources/application.properties
new file mode 100644 (file)
index 0000000..8bd220c
--- /dev/null
@@ -0,0 +1,37 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+\r
+spring.datasource.driver-class-name=org.h2.Driver\r
+spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1\r
+spring.datasource.username=sa\r
+spring.datasource.password=sa\r
+spring.jpa.show-sql=true\r
+spring.jpa.hibernate.ddl-auto=create\r
+\r
+\r
+\r
+## MULTIPART (MultipartProperties)\r
+# Enable multipart uploads\r
+spring.servlet.multipart.enabled=true\r
+# Threshold after which files are written to disk.\r
+spring.servlet.multipart.file-size-threshold=2KB\r
+# Max file size.\r
+spring.servlet.multipart.max-file-size=200MB\r
+# Max Request Size\r
+spring.servlet.multipart.max-request-size=215MB
\ No newline at end of file
diff --git a/db/Dockerfile b/db/Dockerfile
new file mode 100644 (file)
index 0000000..d00b6bb
--- /dev/null
@@ -0,0 +1,26 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM mariadb:10.4.7 \r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD config/CSAdapter_DB_password.txt CSAdapter_DB_password.txt\r
+ADD config/CSAdapter_DB_user.txt CSAdapter_DB_user.txt\r
+ADD config/setup.sql /docker-entrypoint-initdb.d/\r
+ADD config/parameter.cnf /etc/mysql/mariadb.conf.d/parameter.cnf\r
diff --git a/db/config/CSAdapter_DB_password.txt b/db/config/CSAdapter_DB_password.txt
new file mode 100644 (file)
index 0000000..e7559ef
--- /dev/null
@@ -0,0 +1 @@
+airvana123\r
diff --git a/db/config/CSAdapter_DB_user.txt b/db/config/CSAdapter_DB_user.txt
new file mode 100644 (file)
index 0000000..35b06d2
--- /dev/null
@@ -0,0 +1 @@
+dmsadmin\r
diff --git a/db/config/parameter.cnf b/db/config/parameter.cnf
new file mode 100644 (file)
index 0000000..a0b99c2
--- /dev/null
@@ -0,0 +1,2 @@
+[mysqld]\r
+event_scheduler=on\r
diff --git a/db/config/setup.sql b/db/config/setup.sql
new file mode 100644 (file)
index 0000000..55759ac
--- /dev/null
@@ -0,0 +1,2 @@
+CREATE DATABASE dmsdb;\r
+SET GLOBAL event_scheduler=ON;\r
diff --git a/db/pom.xml b/db/pom.xml
new file mode 100644 (file)
index 0000000..af0d638
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter.db</groupId>\r
+   <artifactId>maria-db</artifactId>\r
+   <name>maria-db</name>\r
+   <url>http://maven.apache.org</url>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-mariadb</docker.image.name>\r
+   </properties>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                                <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+</project>\r
diff --git a/docs/_static/TR-069AdapterOverview.png b/docs/_static/TR-069AdapterOverview.png
new file mode 100644 (file)
index 0000000..752feee
Binary files /dev/null and b/docs/_static/TR-069AdapterOverview.png differ
index d9fba9f..1e210bf 100644 (file)
@@ -1,39 +1,87 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. SPDX-License-Identifier: CC-BY-4.0
-.. Copyright (C) 2020 highstreet technologies and others
-
-TR069 Adapter Overview
-======================================
-
-The O-RAN SC OAM TR069 Adapter converts BBF-TR069 management interface to 
-O-RAN OAM Interface Specification (O1-interface). 
-
-The project follows the O-RAN Architecture, O-RAN OAM Architecture and OAM
-interface specification as publiched by O-RAN Working Group1. 
-
-
-Project Resources
------------------
-
-The source code is available from the Linux Foundation Gerrit server:
-
-    `<https://gerrit.o-ran-sc.org/r/admin/repos/oam/tr069-adapter>`_
-
-The build (CI) jobs are in the Linux Foundation Jenkins server:
-
-    `<https://jenkins.o-ran-sc.org/view/oam/>`_
-
-Issues are tracked in the Linux Foundation Jira server:
-
-    `<https://jira.o-ran-sc.org/projects/OAM/>`_
-
-Project information is available in the Linux Foundation Wiki:
-
-    `<https://wiki.o-ran-sc.org/display/OAM/TR069+Adapter>`_
-
-
-Scope
------
-
-The TR069 Adapter converts BBF-TR069 messages (SOAP) into O-RAN O1 interface 
-messages for NetConf/YANG and VES. 
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.\r
+.. SPDX-License-Identifier: CC-BY-4.0\r
+.. Copyright (C) 2020 highstreet technologies and CommScope Inc.\r
+\r
+TR069 Adapter Overview\r
+======================================\r
+\r
+The O-RAN SC OAM TR069 Adapter converts BBF-TR069 management interface to \r
+O-RAN OAM Interface Specification (O1-interface). \r
+\r
+The project follows the O-RAN Architecture, O-RAN OAM Architecture and OAM\r
+interface specification as publiched by O-RAN Working Group1. \r
+\r
+\r
+Project Resources\r
+-----------------\r
+\r
+The source code is available from the Linux Foundation Gerrit server:\r
+\r
+    `<https://gerrit.o-ran-sc.org/r/admin/repos/oam/tr069-adapter>`_\r
+\r
+The build (CI) jobs are in the Linux Foundation Jenkins server:\r
+\r
+    `<https://jenkins.o-ran-sc.org/view/oam/>`_\r
+\r
+Issues are tracked in the Linux Foundation Jira server:\r
+\r
+    `<https://jira.o-ran-sc.org/projects/OAM/>`_\r
+\r
+Project information is available in the Linux Foundation Wiki:\r
+\r
+    `<https://wiki.o-ran-sc.org/display/OAM/O1+Small+Cell+Adapter>`_\r
+\r
+\r
+Scope\r
+-----\r
+\r
+The TR069 Adapter enables any TR-069 compliant device to be managed in the \r
+ONAP Environment by translating TR-069 messages (SOAP) to O-RAN O1 interface \r
+messages for NetConf/YANG, VES and vice versa. The TR-069 Adapter also \r
+supports translation of object models between TR Models (TR-196, TR-181) \r
+to  O-RAN O1 interface Yang Models.\r
+\r
+\r
+TR-069Adapter Overview\r
+----------------------\r
+\r
+The following image shows how the BBF-TR069 Device, TR-069Adapter, SDN-R, and DMaap are connected.Each component depicted in the image is briefly described further below:\r
+\r
+\r
+.. image:: _static/TR-069AdapterOverview.png\r
+\r
+\r
+Maria DB\r
+--------\r
+\r
+The Maria DB container instance is used to support data persistence for the TR-069Adapter, such as Factory Table, Initial PnP Config Table, TR-069 Session and Device Connection Request URL information.\r
+\r
+ACS\r
+---\r
+\r
+The Auto Configuration Service (ACS) Module is used to communicate with the Device using the TR-069 protocol.\r
+\r
+Factory\r
+-------\r
+\r
+This module supports Rest APIs to authenticate Device TR-069 sessions using basic authentication. It also supports REST APIs to import a Factory Equipment  file which contains Device authentication information. \r
+\r
+Initial Config\r
+--------------\r
+\r
+This module supports importing 3GPP Config XML for Device. The configurations from XML are used to provision as Initial PnP Parameters to devices as part of BootStrap. This module also supports REST APIs to import Config XML which contains Device Initial PnP Configurations. The initial PnP Parameters are optional and could be used to emulate PnP using TR-069Adapter.\r
+\r
+Mapper\r
+------\r
+\r
+The main function of this mapper is to map the request between NETCONF server and ACS (conversion of NETCONF protocol specific message to TR-069 message and vice versa) and to forward notifications to the VES Notifier.\r
+\r
+NETCONF Server\r
+--------------\r
+\r
+A NETCONF compliant server is used to communicate to SDN-R’s NetConf Client. It internally uses the Yang Model built based on TR-196 and TR-181. \r
+\r
+\r
+VES Notifier\r
+------------\r
+Any notification from the device sent through TR-069Adapter and Mapper, is forwarded to VES by this component.\r
diff --git a/eclipse-formatter.xml b/eclipse-formatter.xml
new file mode 100644 (file)
index 0000000..3c018ea
--- /dev/null
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : tr-069-adapter
+ * =================================================================================================
+ * Copyright (C) 2020 CommScope Inc.
+ * =================================================================================================
+ * This tr-069-adapter software file is distributed by CommScope Inc
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * This file is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ===============LICENSE_END=======================================================================
+*/
+-->
+<profiles version="13">
+   <profile kind="CodeFormatterProfile" name="GoogleStyle" version="13">
+      <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments.count_dependent" value="16|-1|16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_prefer_two_fragments" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_comment_inline_tags" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_local_variable_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="1040" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type.count_dependent" value="1585|-1|1585" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields.count_dependent" value="16|-1|16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression.count_dependent" value="16|4|80" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration.count_dependent" value="16|4|48" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration.count_dependent" value="16|4|49" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments" value="16" />
+      <setting id="org.eclipse.jdt.core.compiler.source" value="1.7" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration.count_dependent" value="16|4|48" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants.count_dependent" value="16|5|48" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation.count_dependent" value="16|4|48" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="1585" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16" />
+      <setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error" />
+      <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_type_annotation" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_field_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.comment_new_line_at_start_of_html_paragraph" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comment_prefix" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_parameter_annotation" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="1585" />
+      <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation.count_dependent" value="16|5|80" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter.count_dependent" value="1040|-1|1040" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package.count_dependent" value="1585|-1|1585" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.force_if_else_statement_brace" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="3" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_package_annotation" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation.count_dependent" value="16|-1|16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="1585" />
+      <setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7" />
+      <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_new_anonymous_class" value="20" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable.count_dependent" value="1585|-1|1585" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent" value="1585|-1|1585" />
+      <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration.count_dependent" value="16|5|80" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert" />
+      <setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant.count_dependent" value="16|-1|16" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="2" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="1585" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer.count_dependent" value="16|5|80" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80" />
+      <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration.count_dependent" value="16|4|48" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method.count_dependent" value="1585|-1|1585" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression.count_dependent" value="16|-1|16" />
+      <setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_member_annotation" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="1585" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call.count_dependent" value="16|5|80" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments.count_dependent" value="16|-1|16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression.count_dependent" value="16|5|80" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration.count_dependent" value="16|5|80" />
+      <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert" />
+      <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.alignment_for_for_statement" value="16" />
+      <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert" />
+      <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false" />
+      <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false" />
+   </profile>
+</profiles>
\ No newline at end of file
diff --git a/factory/Dockerfile b/factory/Dockerfile
new file mode 100644 (file)
index 0000000..69c1f95
--- /dev/null
@@ -0,0 +1,30 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM openjdk:8-alpine\r
+\r
+ARG JAR\r
+\r
+ENV FACTORY_PORT=8089\r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD target/${JAR} ./lib/factory.jar\r
+\r
+EXPOSE ${FACTORY_PORT}\r
+ENTRYPOINT ["java", "-jar", "./lib/factory.jar"]\r
diff --git a/factory/pom.xml b/factory/pom.xml
new file mode 100644 (file)
index 0000000..424adb3
--- /dev/null
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <groupId>org.commscope.tr069adapter.factory</groupId>\r
+   <artifactId>factory</artifactId>\r
+   <name>factory</name>\r
+   <description>Factory import project for Spring Boot</description>\r
+   <licenses>\r
+      <license>\r
+         <name>The Apache Software License, Version 2.0</name>\r
+         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
+      </license>\r
+   </licenses>\r
+   <repositories>\r
+      <repository>\r
+         <id>onap-releases</id>\r
+         <name>onap-releases</name>\r
+         <url>https://nexus.onap.org/content/repositories/releases/</url>\r
+      </repository>\r
+   </repositories>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-acs-factorydb</docker.image.name>\r
+   </properties>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.fasterxml.jackson.core</groupId>\r
+         <artifactId>jackson-databind</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-maven-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-surefire-plugin</artifactId>\r
+            <configuration>\r
+               <skipTests>false</skipTests>\r
+            </configuration>\r
+         </plugin>\r
+         <plugin>\r
+            <artifactId>maven-failsafe-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                                <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/factory/src/main/java/org/commscope/tr069adapter/factory/FactoryDataAccesorApplication.java b/factory/src/main/java/org/commscope/tr069adapter/factory/FactoryDataAccesorApplication.java
new file mode 100644 (file)
index 0000000..f23b907
--- /dev/null
@@ -0,0 +1,31 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.factory;\r
+\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+\r
+@SpringBootApplication\r
+public class FactoryDataAccesorApplication {\r
+\r
+  public static void main(String[] args) {\r
+    SpringApplication.run(FactoryDataAccesorApplication.class, args);\r
+  }\r
+}\r
diff --git a/factory/src/main/java/org/commscope/tr069adapter/factory/controllers/FactoryDataController.java b/factory/src/main/java/org/commscope/tr069adapter/factory/controllers/FactoryDataController.java
new file mode 100644 (file)
index 0000000..c7bf182
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.factory.controllers;\r
+\r
+import org.commscope.tr069adapter.acs.common.dto.DeviceData;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestBody;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+public class FactoryDataController {\r
+\r
+  @PostMapping("/basicAuthenticate")\r
+  public Boolean authenticateDevice(@RequestBody DeviceData deviceInfo) {\r
+    return true;\r
+  }\r
+\r
+  @PostMapping("/digestAuthenticate")\r
+  public Boolean digestAuthenticateDevice(@RequestBody DeviceData deviceInfo) {\r
+    return true;\r
+  }\r
+\r
+  @PostMapping("/validateDevice")\r
+  public Boolean validateDeviceOUIPC(@RequestBody DeviceData deviceData) {\r
+    return true;\r
+  }\r
+}\r
diff --git a/factory/src/main/resources/application.properties b/factory/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..5d8aec0
--- /dev/null
@@ -0,0 +1,19 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+server.port=${FACTORY_PORT}\r
diff --git a/factory/src/main/resources/log4j2.xml b/factory/src/main/resources/log4j2.xml
new file mode 100644 (file)
index 0000000..8865221
--- /dev/null
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<Configuration status="DEBUG" monitorInterval="30">\r
+    <Properties>\r
+       <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %m%n</Property>\r
+       <Property name="APP_LOG_ROOT">/logs</Property>\r
+       <Property name="LOG_FILE_NAME">factoryDataImportLogs</Property>\r
+    </Properties>\r
+    <Appenders>\r
+       <Console name="console" target="SYSTEM_OUT" follow="true">\r
+               <PatternLayout pattern="${LOG_PATTERN}" />\r
+       </Console>\r
+\r
+       <RollingFile name="applicationLog"\r
+               fileName="${APP_LOG_ROOT}/debug/${LOG_FILE_NAME}-debug.log"\r
+               filePattern="${APP_LOG_ROOT}/debug/${LOG_FILE_NAME}-debug-%d{yyyy-MM-dd}-%i.log">\r
+               <PatternLayout>\r
+                       <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%X{client}] [%.-40t]\r
+                               %-25.45c{1} %-5p: %m%n</pattern>\r
+                       <header>Debug Log started at: $${date:yyyy-MM-dd HH:mm:ss}</header>\r
+               </PatternLayout>\r
+               <Policies>\r
+                       <SizeBasedTriggeringPolicy size="4MB" />\r
+                       <TimeBasedTriggeringPolicy interval="1"\r
+                               modulate="true" />\r
+               </Policies>\r
+               <DefaultRolloverStrategy max="100" />\r
+       </RollingFile>\r
+\r
+       <RollingFile name="springLog"\r
+               fileName="${APP_LOG_ROOT}/debug/spring-framework.log" filePattern="${APP_LOG_ROOT}/debug/spring-%d{yyyy-MM-dd}-%i.log">\r
+               <PatternLayout pattern="${LOG_PATTERN}" />\r
+               <Policies>\r
+                       <SizeBasedTriggeringPolicy size="2MB" />\r
+               </Policies>\r
+               <DefaultRolloverStrategy max="100" />\r
+       </RollingFile>\r
+\r
+    </Appenders>\r
+\r
+    <Loggers>\r
+       <Logger name="org.commscope.tr069adapter.factory" level="debug"\r
+               additivity="false">\r
+               <appender-ref ref="console" />\r
+               <appender-ref ref="applicationLog" />\r
+       </Logger>\r
+\r
+       <Logger name="org.springframework" level="error" additivity="false">\r
+               <appender-ref ref="console" />\r
+               <AppenderRef ref="springLog" />\r
+       </Logger>\r
+\r
+       <Root level="DEBUG" additivity="false" />\r
+    </Loggers>\r
+</Configuration>\r
diff --git a/factory/src/test/java/com/commscope/tr069adapter/imports/FactoryDataAccesorApplicationTests.java b/factory/src/test/java/com/commscope/tr069adapter/imports/FactoryDataAccesorApplicationTests.java
new file mode 100644 (file)
index 0000000..1584d7e
--- /dev/null
@@ -0,0 +1,103 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package com.commscope.tr069adapter.imports;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.jupiter.api.Assertions.fail;\r
+\r
+import org.commscope.tr069adapter.factory.FactoryDataAccesorApplication;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.RequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@RunWith(SpringRunner.class)\r
+@SpringBootTest(classes = {FactoryDataAccesorApplication.class})\r
+@AutoConfigureMockMvc\r
+public class FactoryDataAccesorApplicationTests {\r
+\r
+  private String exampleDeviceDataJson =\r
+      "{\"serialNumber\":\"0005B95196D0\",\"autenticationString\":\"abcxyz\",\"oui\":\"0005B9\",\"productClass\":\"LTE_Enterprise_C-RANSC_Cntrl\"}";\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @Test\r
+  public void basicAuthenticateTest() {\r
+\r
+    RequestBuilder requestBuilder =\r
+        MockMvcRequestBuilders.post("/basicAuthenticate").accept(MediaType.APPLICATION_JSON)\r
+            .content(exampleDeviceDataJson).contentType(MediaType.APPLICATION_JSON);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      resultString = result.getResponse().getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    assertEquals("true", resultString);\r
+  }\r
+\r
+  @Test\r
+  public void digestAuthenticateDeviceTest() {\r
+\r
+    RequestBuilder requestBuilder =\r
+        MockMvcRequestBuilders.post("/digestAuthenticate").accept(MediaType.APPLICATION_JSON)\r
+            .content(exampleDeviceDataJson).contentType(MediaType.APPLICATION_JSON);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      resultString = result.getResponse().getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    assertEquals("true", resultString);\r
+  }\r
+\r
+  @Test\r
+  public void validateDeviceOUIPCTest() {\r
+    RequestBuilder requestBuilder =\r
+        MockMvcRequestBuilders.post("/validateDevice").accept(MediaType.APPLICATION_JSON)\r
+            .content(exampleDeviceDataJson).contentType(MediaType.APPLICATION_JSON);\r
+\r
+    MvcResult result = null;\r
+    String resultString = null;\r
+    try {\r
+      result = mockMvc.perform(requestBuilder).andReturn();\r
+      resultString = result.getResponse().getContentAsString();\r
+    } catch (Exception e) {\r
+      fail(e.getMessage());\r
+    }\r
+\r
+    assertEquals("true", resultString);\r
+  }\r
+}\r
diff --git a/mapper/Dockerfile b/mapper/Dockerfile
new file mode 100644 (file)
index 0000000..117d847
--- /dev/null
@@ -0,0 +1,45 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM openjdk:8-alpine\r
+\r
+ARG JAR\r
+\r
+ENV SBI_REST_HOST=tr069adapter-acs\r
+ENV SBI_REST_PORT=9977\r
+ENV CONFIG_DB_REST_HOST=tr069adapter-acs-initialpnpdb\r
+ENV CONFIG_DB_REST_PORT=9000\r
+ENV MAPPER_REST_PORT=9999\r
+ENV REQUEST_TIMEOUT=300\r
+ENV preConfigureOnPNP=true\r
+ENV ALARM_MO_REGEX=(.)*.FaultMgmt.ExpeditedEvent.(.)*\r
+ENV NBI_REST_HOST=tr069adapter-netconf-server\r
+ENV NBI_REST_PORT=8181\r
+ENV VES_REST_HOST=tr069adapter-ves-notifier\r
+ENV VES_REST_PORT=8383\r
+ENV netConfServerPort=17830\r
+ENV netConfServerIP=localhost\r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD target/${JAR} ./lib/mapper.jar\r
+ADD ./mapper-schema ./mapper-schema\r
+ADD ./error-code-mapping.json ./error-code-mapping.json\r
+\r
+\r
+ENTRYPOINT ["java", "-jar", "./lib/mapper.jar"]\r
diff --git a/mapper/csadapter.properties b/mapper/csadapter.properties
new file mode 100644 (file)
index 0000000..abe9cef
--- /dev/null
@@ -0,0 +1,22 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# CS Adapter configuration file. test\r
+REQUEST_TIMEOUT=40\r
+SBI_URI=http://tr069adapter:${SBI_REST_PORT}/tr069DMSBI/operationRequest\r
+NBI_URI=http://netconfserver:${NBI_REST_PORT}/tr069DMSBI/operationRequest
\ No newline at end of file
diff --git a/mapper/error-code-mapping.json b/mapper/error-code-mapping.json
new file mode 100644 (file)
index 0000000..6bb5ade
--- /dev/null
@@ -0,0 +1,254 @@
+{ \r
+   "0":{ \r
+      "errorMessage":"Success",\r
+      "errorType":"",\r
+      "errorTag":"",\r
+      "errorSeverity":""\r
+   },\r
+   "9000":{ \r
+      "errorMessage":"Method not supported",\r
+      "errorType":"application",\r
+      "errorTag":"invalid-value",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9001":{ \r
+      "errorMessage":"Request denied",\r
+      "errorType":"application",\r
+      "errorTag":"operation-not-supported",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9002":{ \r
+      "errorMessage":"Device Internal error",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9003":{ \r
+      "errorMessage":"Invalid arguments",\r
+      "errorType":"application",\r
+      "errorTag":"missing-attribute",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9004":{ \r
+      "errorMessage":"Resources exceeded",\r
+      "errorType":"application",\r
+      "errorTag":"InUse",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9005":{ \r
+      "errorMessage":"Invalid Parameter name",\r
+      "errorType":"application",\r
+      "errorTag":"missing-attribute",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9006":{ \r
+      "errorMessage":"Invalid Parameter type",\r
+      "errorType":"application",\r
+      "errorTag":"bad-attribute",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9007":{ \r
+      "errorMessage":"Invalid Parameter value",\r
+      "errorType":"application",\r
+      "errorTag":"invalid-value",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9008":{ \r
+      "errorMessage":"Attempt to set a non-writable Parameter",\r
+      "errorType":"application",\r
+      "errorTag":"invalid-value",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9009":{ \r
+      "errorMessage":"Notification request rejected",\r
+      "errorType":"application",\r
+      "errorTag":"AccessDenied",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9010":{ \r
+      "errorMessage":"File transfer failure",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9011":{ \r
+      "errorMessage":"Upload failure",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9012":{ \r
+      "errorMessage":"File transfer server authentication failure",\r
+      "errorType":"application",\r
+      "errorTag":"AccessDenied",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9013":{ \r
+      "errorMessage":"Unsupported protocol for file transfer",\r
+      "errorType":"application",\r
+      "errorTag":"operation-not-supported",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9014":{ \r
+      "errorMessage":"File transfer failure: unable to join multicast group",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9015":{ \r
+      "errorMessage":"File transfer failure: unable to contact file server",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9016":{ \r
+      "errorMessage":"File transfer failure: unable to access file",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9017":{ \r
+      "errorMessage":"File transfer failure: unable to complete download",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9018":{ \r
+      "errorMessage":"File transfer failure: file corrupted or otherwise unusable",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9019":{ \r
+      "errorMessage":"File transfer failure: file authentication failure",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9020":{ \r
+      "errorMessage":"File transfer failure: unable to complete download within specified time windows",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9021":{ \r
+      "errorMessage":"Cancelation of file transfer not permitted in current transfer state",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9022":{ \r
+      "errorMessage":"Invalid UUID Format",\r
+      "errorType":"application",\r
+      "errorTag":"invalid-value",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9023":{ \r
+      "errorMessage":"Unknown Execution Environment",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9024":{ \r
+      "errorMessage":"Disabled Execution Environment",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9025":{ \r
+      "errorMessage":"Deployment Unit to Execution Environment Mismatch",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9026":{ \r
+      "errorMessage":"Duplicate Deployment Unit",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9027":{ \r
+      "errorMessage":"System Resources Exceeded",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9028":{ \r
+      "errorMessage":"Unknown Deployment Unit",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9029":{ \r
+      "errorMessage":"Invalid Deployment Unit State",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9030":{ \r
+      "errorMessage":"Invalid Deployment Unit Update â€“ Downgrade not permitted",\r
+      "errorType":"application",\r
+      "errorTag":"operation-not-supported",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9031":{ \r
+      "errorMessage":"Invalid Deployment Unit Update â€“ Version not specified",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9032":{ \r
+      "errorMessage":"Invalid Deployment Unit Update â€“ Version already exists",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "9816":{ \r
+      "errorMessage":"Already Upgrade is in progress",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8000":{ \r
+      "errorMessage":"Device not exists",\r
+      "errorType":"application",\r
+      "errorTag":"invalid-value",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8001":{ \r
+      "errorMessage":"Device not Activated",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8002":{ \r
+      "errorMessage":"Operation Aborted",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8003":{ \r
+      "errorMessage":"Operation Timedout",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8004":{ \r
+      "errorMessage":"Invalid NBI request",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8006":{ \r
+      "errorMessage":"Operation Timed out",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   },\r
+   "8007":{ \r
+      "errorMessage":"Unable to perform Operation",\r
+      "errorType":"application",\r
+      "errorTag":"operation-failed",\r
+      "errorSeverity":"ERROR"\r
+   }\r
+}
\ No newline at end of file
diff --git a/mapper/mapper-schema/CSDMYangMONameMapping.txt b/mapper/mapper-schema/CSDMYangMONameMapping.txt
new file mode 100644 (file)
index 0000000..c4d3e26
--- /dev/null
@@ -0,0 +1,6719 @@
+TRMONAME,YANGMONAME,MOTYPE,TRDATATYPE,YANGNAMESPACE
+Device.,device,ScalarObject,object,urn:onf:otcc:wireless:yang:radio-access-186
+Device.RootDataModelVersion,device.root-data-model-version,Scalar-ReadOnly,string
+Device.InterfaceStackNumberOfEntries,device.interface-stack-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.,device.services,ScalarObject,object
+Device.DeviceInfo.,device.device-info,ScalarObject,object
+Device.DeviceInfo.DeviceCategory,device.device-info.device-category,Scalar-ReadOnly,string
+Device.DeviceInfo.Manufacturer,device.device-info.manufacturer,Scalar-ReadOnly,string
+Device.DeviceInfo.ManufacturerOUI,device.device-info.manufacturer-oui,Scalar-ReadOnly,string
+Device.DeviceInfo.SupportedDataModelNumberOfEntries,device.device-info.supported-data-model-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.ModelName,device.device-info.model-name,Scalar-ReadOnly,string
+Device.DeviceInfo.ModelNumber,device.device-info.model-number,Scalar-ReadOnly,string
+Device.DeviceInfo.Description,device.device-info.description,Scalar-ReadOnly,string
+Device.DeviceInfo.ProductClass,device.device-info.product-class,Scalar-ReadOnly,string
+Device.DeviceInfo.SerialNumber,device.device-info.serial-number,Scalar-ReadOnly,string
+Device.DeviceInfo.HardwareVersion,device.device-info.hardware-version,Scalar-ReadOnly,string
+Device.DeviceInfo.SoftwareVersion,device.device-info.software-version,Scalar-ReadOnly,string
+Device.DeviceInfo.ActiveFirmwareImage,device.device-info.active-firmware-image,Scalar-ReadOnly,string
+Device.DeviceInfo.BootFirmwareImage,device.device-info.boot-firmware-image,Scalar-ReadWrite,string
+Device.DeviceInfo.AdditionalHardwareVersion,device.device-info.additional-hardware-version,Scalar-ReadOnly,string
+Device.DeviceInfo.AdditionalSoftwareVersion,device.device-info.additional-software-version,Scalar-ReadOnly,string
+Device.DeviceInfo.ProvisioningCode,device.device-info.provisioning-code,Scalar-ReadWrite,string
+Device.DeviceInfo.UpTime,device.device-info.up-time,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.FirstUseDate,device.device-info.first-use-date,Scalar-ReadOnly,dateTime
+Device.DeviceInfo.FirmwareImageNumberOfEntries,device.device-info.firmware-image-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.VendorConfigFileNumberOfEntries,device.device-info.vendor-config-file-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessorNumberOfEntries,device.device-info.processor-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.VendorLogFileNumberOfEntries,device.device-info.vendor-log-file-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.LocationNumberOfEntries,device.device-info.location-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.DeviceImageNumberOfEntries,device.device-info.device-image-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.VendorConfigFile.{i}.,device.device-info.vendor-config-file.{i}.,TabularObject,object
+Device.DeviceInfo.VendorConfigFile.{i}.Alias,device.device-info.vendor-config-file.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.VendorConfigFile.{i}.Name,device.device-info.vendor-config-file.{i}.name,Tabular-ReadOnly,string
+Device.DeviceInfo.VendorConfigFile.{i}.Version,device.device-info.vendor-config-file.{i}.version,Tabular-ReadOnly,string
+Device.DeviceInfo.VendorConfigFile.{i}.Date,device.device-info.vendor-config-file.{i}.date,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.VendorConfigFile.{i}.Description,device.device-info.vendor-config-file.{i}.description,Tabular-ReadOnly,string
+Device.DeviceInfo.VendorConfigFile.{i}.UseForBackupRestore,device.device-info.vendor-config-file.{i}.use-for-backup-restore,Tabular-ReadOnly,boolean
+Device.DeviceInfo.MemoryStatus.,device.device-info.memory-status,ScalarObject,object
+Device.DeviceInfo.MemoryStatus.Total,device.device-info.memory-status.total,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.MemoryStatus.Free,device.device-info.memory-status.free,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.,device.device-info.process-status,ScalarObject,object
+Device.DeviceInfo.ProcessStatus.CPUUsage,device.device-info.process-status.cpu-usage,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.ProcessNumberOfEntries,device.device-info.process-status.process-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.Process.{i}.,device.device-info.process-status.process.{i}.,TabularObject,object
+Device.DeviceInfo.ProcessStatus.Process.{i}.PID,device.device-info.process-status.process.{i}.pid,Tabular-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.Process.{i}.Command,device.device-info.process-status.process.{i}.command,Tabular-ReadOnly,string
+Device.DeviceInfo.ProcessStatus.Process.{i}.Size,device.device-info.process-status.process.{i}.size,Tabular-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.Process.{i}.Priority,device.device-info.process-status.process.{i}.priority,Tabular-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.Process.{i}.CPUTime,device.device-info.process-status.process.{i}.cpu-time,Tabular-ReadOnly,unsignedInt
+Device.DeviceInfo.ProcessStatus.Process.{i}.State,device.device-info.process-status.process.{i}.state,Tabular-ReadOnly,string
+Device.DeviceInfo.TemperatureStatus.,device.device-info.temperature-status,ScalarObject,object
+Device.DeviceInfo.TemperatureStatus.TemperatureSensorNumberOfEntries,device.device-info.temperature-status.temperature-sensor-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.,device.device-info.temperature-status.temperature-sensor.{i}.,TabularObject,object
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.Alias,device.device-info.temperature-status.temperature-sensor.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.Enable,device.device-info.temperature-status.temperature-sensor.{i}.enable,Tabular-ReadWrite,boolean
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.Status,device.device-info.temperature-status.temperature-sensor.{i}.status,Tabular-ReadOnly,string
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.ResetTime,device.device-info.temperature-status.temperature-sensor.{i}.reset-time,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.Name,device.device-info.temperature-status.temperature-sensor.{i}.name,Tabular-ReadOnly,string
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.Value,device.device-info.temperature-status.temperature-sensor.{i}.value,Tabular-ReadOnly,int
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.LastUpdate,device.device-info.temperature-status.temperature-sensor.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.MinValue,device.device-info.temperature-status.temperature-sensor.{i}.min-value,Tabular-ReadOnly,int
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.MinTime,device.device-info.temperature-status.temperature-sensor.{i}.min-time,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.MaxValue,device.device-info.temperature-status.temperature-sensor.{i}.max-value,Tabular-ReadOnly,int
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.MaxTime,device.device-info.temperature-status.temperature-sensor.{i}.max-time,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.LowAlarmValue,device.device-info.temperature-status.temperature-sensor.{i}.low-alarm-value,Tabular-ReadWrite,int
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.LowAlarmTime,device.device-info.temperature-status.temperature-sensor.{i}.low-alarm-time,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.HighAlarmValue,device.device-info.temperature-status.temperature-sensor.{i}.high-alarm-value,Tabular-ReadWrite,int
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.PollingInterval,device.device-info.temperature-status.temperature-sensor.{i}.polling-interval,Tabular-ReadWrite,unsignedInt
+Device.DeviceInfo.TemperatureStatus.TemperatureSensor.{i}.HighAlarmTime,device.device-info.temperature-status.temperature-sensor.{i}.high-alarm-time,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.NetworkProperties.,device.device-info.network-properties,ScalarObject,object
+Device.DeviceInfo.NetworkProperties.MaxTCPWindowSize,device.device-info.network-properties.max-tcp-window-size,Scalar-ReadOnly,unsignedInt
+Device.DeviceInfo.NetworkProperties.TCPImplementation,device.device-info.network-properties.tcp-implementation,Scalar-ReadOnly,string
+Device.DeviceInfo.Processor.{i}.,device.device-info.processor.{i}.,TabularObject,object
+Device.DeviceInfo.Processor.{i}.Alias,device.device-info.processor.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.Processor.{i}.Architecture,device.device-info.processor.{i}.architecture,Tabular-ReadOnly,string
+Device.DeviceInfo.VendorLogFile.{i}.,device.device-info.vendor-log-file.{i}.,TabularObject,object
+Device.DeviceInfo.VendorLogFile.{i}.Alias,device.device-info.vendor-log-file.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.VendorLogFile.{i}.Name,device.device-info.vendor-log-file.{i}.name,Tabular-ReadOnly,string
+Device.DeviceInfo.VendorLogFile.{i}.MaximumSize,device.device-info.vendor-log-file.{i}.maximum-size,Tabular-ReadOnly,unsignedInt
+Device.DeviceInfo.VendorLogFile.{i}.Persistent,device.device-info.vendor-log-file.{i}.persistent,Tabular-ReadOnly,boolean
+Device.DeviceInfo.Location.{i}.,device.device-info.location.{i}.,TabularObject,object
+Device.DeviceInfo.Location.{i}.Source,device.device-info.location.{i}.source,Tabular-ReadOnly,string
+Device.DeviceInfo.Location.{i}.AcquiredTime,device.device-info.location.{i}.acquired-time,Tabular-ReadOnly,dateTime
+Device.DeviceInfo.Location.{i}.ExternalSource,device.device-info.location.{i}.external-source,Tabular-ReadOnly,string
+Device.DeviceInfo.Location.{i}.ExternalProtocol,device.device-info.location.{i}.external-protocol,Tabular-ReadOnly,string
+Device.DeviceInfo.Location.{i}.DataObject,device.device-info.location.{i}.data-object,Tabular-ReadWrite,string
+Device.DeviceInfo.DeviceImageFile.{i}.,device.device-info.device-image-file.{i}.,TabularObject,object
+Device.DeviceInfo.DeviceImageFile.{i}.Alias,device.device-info.device-image-file.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.DeviceImageFile.{i}.Location,device.device-info.device-image-file.{i}.location,Tabular-ReadOnly,string
+Device.DeviceInfo.DeviceImageFile.{i}.Image,device.device-info.device-image-file.{i}.image,Tabular-ReadOnly,string
+Device.DeviceInfo.FirmwareImage.{i}.,device.device-info.firmware-image.{i}.,TabularObject,object
+Device.DeviceInfo.FirmwareImage.{i}.Alias,device.device-info.firmware-image.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.FirmwareImage.{i}.Name,device.device-info.firmware-image.{i}.name,Tabular-ReadOnly,string
+Device.DeviceInfo.FirmwareImage.{i}.Version,device.device-info.firmware-image.{i}.version,Tabular-ReadOnly,string
+Device.DeviceInfo.FirmwareImage.{i}.Available,device.device-info.firmware-image.{i}.available,Tabular-ReadWrite,boolean
+Device.DeviceInfo.FirmwareImage.{i}.Status,device.device-info.firmware-image.{i}.status,Tabular-ReadOnly,string
+Device.DeviceInfo.FirmwareImage.{i}.BootFailureLog,device.device-info.firmware-image.{i}.boot-failure-log,Tabular-ReadOnly,string
+Device.DeviceInfo.SupportedDataModel.{i}.,device.device-info.supported-data-model.{i}.,TabularObject,object
+Device.DeviceInfo.SupportedDataModel.{i}.Alias,device.device-info.supported-data-model.{i}.alias,Tabular-ReadWrite,string
+Device.DeviceInfo.SupportedDataModel.{i}.URL,device.device-info.supported-data-model.{i}.url,Tabular-ReadOnly,string
+Device.DeviceInfo.SupportedDataModel.{i}.UUID,device.device-info.supported-data-model.{i}.uuid,Tabular-ReadOnly,string
+Device.DeviceInfo.SupportedDataModel.{i}.URN,device.device-info.supported-data-model.{i}.urn,Tabular-ReadOnly,string
+Device.DeviceInfo.SupportedDataModel.{i}.Features,device.device-info.supported-data-model.{i}.features,Tabular-ReadOnly,string
+Device.DeviceInfo.ProxierInfo.,device.device-info.proxier-info,ScalarObject,object
+Device.DeviceInfo.ProxierInfo.ManufacturerOUI,device.device-info.proxier-info.manufacturer-oui,Scalar-ReadOnly,string
+Device.DeviceInfo.ProxierInfo.ProductClass,device.device-info.proxier-info.product-class,Scalar-ReadOnly,string
+Device.DeviceInfo.ProxierInfo.SerialNumber,device.device-info.proxier-info.serial-number,Scalar-ReadOnly,string
+Device.DeviceInfo.ProxierInfo.ProxyProtocol,device.device-info.proxier-info.proxy-protocol,Scalar-ReadOnly,string
+Device.ManagementServer.,device.management-server,ScalarObject,object
+Device.ManagementServer.EnableCWMP,device.management-server.enable-cwmp,Scalar-ReadWrite,boolean
+Device.ManagementServer.URL,device.management-server.url,Scalar-ReadWrite,string
+Device.ManagementServer.Username,device.management-server.username,Scalar-ReadWrite,string
+Device.ManagementServer.ScheduleReboot,device.management-server.schedule-reboot,Scalar-ReadWrite,dateTime
+Device.ManagementServer.DelayReboot,device.management-server.delay-reboot,Scalar-ReadWrite,int
+Device.ManagementServer.PeriodicInformEnable,device.management-server.periodic-inform-enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.PeriodicInformInterval,device.management-server.periodic-inform-interval,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.PeriodicInformTime,device.management-server.periodic-inform-time,Scalar-ReadWrite,dateTime
+Device.ManagementServer.ParameterKey,device.management-server.parameter-key,Scalar-ReadOnly,string
+Device.ManagementServer.ConnectionRequestURL,device.management-server.connection-request-url,Scalar-ReadOnly,string
+Device.ManagementServer.ConnectionRequestUsername,device.management-server.connection-request-username,Scalar-ReadWrite,string
+Device.ManagementServer.UpgradesManaged,device.management-server.upgrades-managed,Scalar-ReadWrite,boolean
+Device.ManagementServer.KickURL,device.management-server.kick-url,Scalar-ReadOnly,string
+Device.ManagementServer.DownloadProgressURL,device.management-server.download-progress-url,Scalar-ReadOnly,string
+Device.ManagementServer.DefaultActiveNotificationThrottle,device.management-server.default-active-notification-throttle,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.CWMPRetryMinimumWaitInterval,device.management-server.cwmp-retry-minimum-wait-interval,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.CWMPRetryIntervalMultiplier,device.management-server.cwmp-retry-interval-multiplier,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.HTTPConnectionRequestEnable,device.management-server.http-connection-request-enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.UDPConnectionRequestAddress,device.management-server.udp-connection-request-address,Scalar-ReadOnly,string
+Device.ManagementServer.STUNEnable,device.management-server.stun-enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.STUNServerAddress,device.management-server.stun-server-address,Scalar-ReadWrite,string
+Device.ManagementServer.STUNServerPort,device.management-server.stun-server-port,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.STUNUsername,device.management-server.stun-username,Scalar-ReadWrite,string
+Device.ManagementServer.STUNMaximumKeepAlivePeriod,device.management-server.stun-maximum-keep-alive-period,Scalar-ReadWrite,int
+Device.ManagementServer.STUNMinimumKeepAlivePeriod,device.management-server.stun-minimum-keep-alive-period,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.NATDetected,device.management-server.nat-detected,Scalar-ReadOnly,boolean
+Device.ManagementServer.AliasBasedAddressing,device.management-server.alias-based-addressing,Scalar-ReadOnly,boolean
+Device.ManagementServer.InstanceMode,device.management-server.instance-mode,Scalar-ReadWrite,string
+Device.ManagementServer.AutoCreateInstances,device.management-server.auto-create-instances,Scalar-ReadWrite,boolean
+Device.ManagementServer.ManageableDeviceNumberOfEntries,device.management-server.manageable-device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ManagementServer.ManageableDeviceNotificationLimit,device.management-server.manageable-device-notification-limit,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.EmbeddedDeviceNumberOfEntries,device.management-server.embedded-device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ManagementServer.VirtualDeviceNumberOfEntries,device.management-server.virtual-device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ManagementServer.SupportedConnReqMethods,device.management-server.supported-conn-req-methods,Scalar-ReadOnly,string
+Device.ManagementServer.ConnReqXMPPConnection,device.management-server.conn-req-xmpp-connection,Scalar-ReadWrite,string
+Device.ManagementServer.ConnReqAllowedJabberIDs,device.management-server.conn-req-allowed-jabber-i-ds,Scalar-ReadWrite,string
+Device.ManagementServer.ConnReqJabberID,device.management-server.conn-req-jabber-id,Scalar-ReadOnly,string
+Device.ManagementServer.HTTPCompressionSupported,device.management-server.http-compression-supported,Scalar-ReadOnly,string
+Device.ManagementServer.HTTPCompression,device.management-server.http-compression,Scalar-ReadWrite,string
+Device.ManagementServer.LightweightNotificationProtocolsSupported,device.management-server.lightweight-notification-protocols-supported,Scalar-ReadOnly,string
+Device.ManagementServer.LightweightNotificationProtocolsUsed,device.management-server.lightweight-notification-protocols-used,Scalar-ReadWrite,string
+Device.ManagementServer.LightweightNotificationTriggerInterval,device.management-server.lightweight-notification-trigger-interval,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.LightweightNotificationTriggerTime,device.management-server.lightweight-notification-trigger-time,Scalar-ReadWrite,dateTime
+Device.ManagementServer.UDPLightweightNotificationHost,device.management-server.udp-lightweight-notification-host,Scalar-ReadWrite,string
+Device.ManagementServer.UDPLightweightNotificationPort,device.management-server.udp-lightweight-notification-port,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.InstanceWildcardsSupported,device.management-server.instance-wildcards-supported,Scalar-ReadOnly,boolean
+Device.ManagementServer.InformParameterNumberOfEntries,device.management-server.inform-parameter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ManagementServer.ManageableDevice.{i}.,device.management-server.manageable-device.{i}.,TabularObject,object
+Device.ManagementServer.ManageableDevice.{i}.Alias,device.management-server.manageable-device.{i}.alias,Tabular-ReadWrite,string
+Device.ManagementServer.ManageableDevice.{i}.ManufacturerOUI,device.management-server.manageable-device.{i}.manufacturer-oui,Tabular-ReadOnly,string
+Device.ManagementServer.ManageableDevice.{i}.SerialNumber,device.management-server.manageable-device.{i}.serial-number,Tabular-ReadOnly,string
+Device.ManagementServer.ManageableDevice.{i}.ProductClass,device.management-server.manageable-device.{i}.product-class,Tabular-ReadOnly,string
+Device.ManagementServer.ManageableDevice.{i}.Host,device.management-server.manageable-device.{i}.host,Tabular-ReadOnly,string
+Device.ManagementServer.AutonomousTransferCompletePolicy.,device.management-server.autonomous-transfer-complete-policy,ScalarObject,object
+Device.ManagementServer.AutonomousTransferCompletePolicy.Enable,device.management-server.autonomous-transfer-complete-policy.enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.AutonomousTransferCompletePolicy.TransferTypeFilter,device.management-server.autonomous-transfer-complete-policy.transfer-type-filter,Scalar-ReadWrite,string
+Device.ManagementServer.AutonomousTransferCompletePolicy.ResultTypeFilter,device.management-server.autonomous-transfer-complete-policy.result-type-filter,Scalar-ReadWrite,string
+Device.ManagementServer.AutonomousTransferCompletePolicy.FileTypeFilter,device.management-server.autonomous-transfer-complete-policy.file-type-filter,Scalar-ReadWrite,string
+Device.ManagementServer.DownloadAvailability.,device.management-server.download-availability,ScalarObject,object
+Device.ManagementServer.DownloadAvailability.Announcement.,device.management-server.download-availability.announcement,ScalarObject,object
+Device.ManagementServer.DownloadAvailability.Announcement.Enable,device.management-server.download-availability.announcement.enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.DownloadAvailability.Announcement.Status,device.management-server.download-availability.announcement.status,Scalar-ReadOnly,string
+Device.ManagementServer.DownloadAvailability.Announcement.GroupNumberOfEntries,device.management-server.download-availability.announcement.group-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ManagementServer.DownloadAvailability.Announcement.Group.{i}.,device.management-server.download-availability.announcement.group.{i}.,TabularObject,object
+Device.ManagementServer.DownloadAvailability.Announcement.Group.{i}.Alias,device.management-server.download-availability.announcement.group.{i}.alias,Tabular-ReadWrite,string
+Device.ManagementServer.DownloadAvailability.Announcement.Group.{i}.Enable,device.management-server.download-availability.announcement.group.{i}.enable,Tabular-ReadWrite,boolean
+Device.ManagementServer.DownloadAvailability.Announcement.Group.{i}.Status,device.management-server.download-availability.announcement.group.{i}.status,Tabular-ReadOnly,string
+Device.ManagementServer.DownloadAvailability.Announcement.Group.{i}.URL,device.management-server.download-availability.announcement.group.{i}.url,Tabular-ReadWrite,string
+Device.ManagementServer.DownloadAvailability.Query.,device.management-server.download-availability.query,ScalarObject,object
+Device.ManagementServer.DownloadAvailability.Query.Enable,device.management-server.download-availability.query.enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.DownloadAvailability.Query.Status,device.management-server.download-availability.query.status,Scalar-ReadOnly,string
+Device.ManagementServer.DownloadAvailability.Query.URL,device.management-server.download-availability.query.url,Scalar-ReadWrite,string
+Device.ManagementServer.DUStateChangeComplPolicy.,device.management-server.du-state-change-compl-policy,ScalarObject,object
+Device.ManagementServer.DUStateChangeComplPolicy.Enable,device.management-server.du-state-change-compl-policy.enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.DUStateChangeComplPolicy.OperationTypeFilter,device.management-server.du-state-change-compl-policy.operation-type-filter,Scalar-ReadWrite,string
+Device.ManagementServer.DUStateChangeComplPolicy.ResultTypeFilter,device.management-server.du-state-change-compl-policy.result-type-filter,Scalar-ReadWrite,string
+Device.ManagementServer.DUStateChangeComplPolicy.FaultCodeFilter,device.management-server.du-state-change-compl-policy.fault-code-filter,Scalar-ReadWrite,string
+Device.ManagementServer.EmbeddedDevice.{i}.,device.management-server.embedded-device.{i}.,TabularObject,object
+Device.ManagementServer.EmbeddedDevice.{i}.ControllerID,device.management-server.embedded-device.{i}.controller-id,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.ProxiedDeviceID,device.management-server.embedded-device.{i}.proxied-device-id,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.Reference,device.management-server.embedded-device.{i}.reference,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.SupportedDataModel,device.management-server.embedded-device.{i}.supported-data-model,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.Host,device.management-server.embedded-device.{i}.host,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.ProxyProtocol,device.management-server.embedded-device.{i}.proxy-protocol,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.ProxyProtocolReference,device.management-server.embedded-device.{i}.proxy-protocol-reference,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.DiscoveryProtocol,device.management-server.embedded-device.{i}.discovery-protocol,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.DiscoveryProtocolReference,device.management-server.embedded-device.{i}.discovery-protocol-reference,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.CommandProcessed,device.management-server.embedded-device.{i}.command-processed,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.CommandProcessingErrMsg,device.management-server.embedded-device.{i}.command-processing-err-msg,Tabular-ReadOnly,string
+Device.ManagementServer.EmbeddedDevice.{i}.LastSyncTime,device.management-server.embedded-device.{i}.last-sync-time,Tabular-ReadOnly,dateTime
+Device.ManagementServer.VirtualDevice.{i}.,device.management-server.virtual-device.{i}.,TabularObject,object
+Device.ManagementServer.VirtualDevice.{i}.ManufacturerOUI,device.management-server.virtual-device.{i}.manufacturer-oui,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.ProductClass,device.management-server.virtual-device.{i}.product-class,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.SerialNumber,device.management-server.virtual-device.{i}.serial-number,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.Host,device.management-server.virtual-device.{i}.host,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.ProxyProtocol,device.management-server.virtual-device.{i}.proxy-protocol,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.ProxyProtocolReference,device.management-server.virtual-device.{i}.proxy-protocol-reference,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.DiscoveryProtocol,device.management-server.virtual-device.{i}.discovery-protocol,Tabular-ReadOnly,string
+Device.ManagementServer.VirtualDevice.{i}.DiscoveryProtocolReference,device.management-server.virtual-device.{i}.discovery-protocol-reference,Tabular-ReadOnly,string
+Device.ManagementServer.StandbyPolicy.,device.management-server.standby-policy,ScalarObject,object
+Device.ManagementServer.StandbyPolicy.CRUnawarenessMaxDuration,device.management-server.standby-policy.cr-unawareness-max-duration,Scalar-ReadWrite,int
+Device.ManagementServer.StandbyPolicy.MaxMissedPeriodic,device.management-server.standby-policy.max-missed-periodic,Scalar-ReadWrite,int
+Device.ManagementServer.StandbyPolicy.NotifyMissedScheduled,device.management-server.standby-policy.notify-missed-scheduled,Scalar-ReadWrite,boolean
+Device.ManagementServer.StandbyPolicy.NetworkAwarenessCapable,device.management-server.standby-policy.network-awareness-capable,Scalar-ReadOnly,boolean
+Device.ManagementServer.StandbyPolicy.SelfTimerCapable,device.management-server.standby-policy.self-timer-capable,Scalar-ReadOnly,boolean
+Device.ManagementServer.StandbyPolicy.CRAwarenessRequested,device.management-server.standby-policy.cr-awareness-requested,Scalar-ReadWrite,boolean
+Device.ManagementServer.StandbyPolicy.PeriodicAwarenessRequested,device.management-server.standby-policy.periodic-awareness-requested,Scalar-ReadWrite,boolean
+Device.ManagementServer.StandbyPolicy.ScheduledAwarenessRequested,device.management-server.standby-policy.scheduled-awareness-requested,Scalar-ReadWrite,boolean
+Device.ManagementServer.InformParameter.{i}.,device.management-server.inform-parameter.{i}.,TabularObject,object
+Device.ManagementServer.InformParameter.{i}.Enable,device.management-server.inform-parameter.{i}.enable,Tabular-ReadWrite,boolean
+Device.ManagementServer.InformParameter.{i}.Alias,device.management-server.inform-parameter.{i}.alias,Tabular-ReadWrite,string
+Device.ManagementServer.InformParameter.{i}.ParameterName,device.management-server.inform-parameter.{i}.parameter-name,Tabular-ReadWrite,string
+Device.ManagementServer.InformParameter.{i}.EventList,device.management-server.inform-parameter.{i}.event-list,Tabular-ReadWrite,string
+Device.ManagementServer.HeartbeatPolicy.,device.management-server.heartbeat-policy,ScalarObject,object
+Device.ManagementServer.HeartbeatPolicy.Enable,device.management-server.heartbeat-policy.enable,Scalar-ReadWrite,boolean
+Device.ManagementServer.HeartbeatPolicy.ReportingInterval,device.management-server.heartbeat-policy.reporting-interval,Scalar-ReadWrite,unsignedInt
+Device.ManagementServer.HeartbeatPolicy.InitiationTime,device.management-server.heartbeat-policy.initiation-time,Scalar-ReadWrite,dateTime
+Device.SoftwareModules.,device.software-modules,ScalarObject,object
+Device.SoftwareModules.ExecEnvNumberOfEntries,device.software-modules.exec-env-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.SoftwareModules.DeploymentUnitNumberOfEntries,device.software-modules.deployment-unit-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.SoftwareModules.ExecutionUnitNumberOfEntries,device.software-modules.execution-unit-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.SoftwareModules.ExecEnv.{i}.,device.software-modules.exec-env.{i}.,TabularObject,object
+Device.SoftwareModules.ExecEnv.{i}.Enable,device.software-modules.exec-env.{i}.enable,Tabular-ReadWrite,boolean
+Device.SoftwareModules.ExecEnv.{i}.Status,device.software-modules.exec-env.{i}.status,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.Alias,device.software-modules.exec-env.{i}.alias,Tabular-ReadWrite,string
+Device.SoftwareModules.ExecEnv.{i}.Name,device.software-modules.exec-env.{i}.name,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.Type,device.software-modules.exec-env.{i}.type,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.InitialRunLevel,device.software-modules.exec-env.{i}.initial-run-level,Tabular-ReadWrite,unsignedInt
+Device.SoftwareModules.ExecEnv.{i}.CurrentRunLevel,device.software-modules.exec-env.{i}.current-run-level,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecEnv.{i}.InitialExecutionUnitRunLevel,device.software-modules.exec-env.{i}.initial-execution-unit-run-level,Tabular-ReadWrite,int
+Device.SoftwareModules.ExecEnv.{i}.Vendor,device.software-modules.exec-env.{i}.vendor,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.Version,device.software-modules.exec-env.{i}.version,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.ParentExecEnv,device.software-modules.exec-env.{i}.parent-exec-env,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.AllocatedDiskSpace,device.software-modules.exec-env.{i}.allocated-disk-space,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecEnv.{i}.AvailableDiskSpace,device.software-modules.exec-env.{i}.available-disk-space,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecEnv.{i}.AllocatedMemory,device.software-modules.exec-env.{i}.allocated-memory,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecEnv.{i}.AvailableMemory,device.software-modules.exec-env.{i}.available-memory,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecEnv.{i}.ActiveExecutionUnits,device.software-modules.exec-env.{i}.active-execution-units,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecEnv.{i}.ProcessorRefList,device.software-modules.exec-env.{i}.processor-ref-list,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.,device.software-modules.deployment-unit.{i}.,TabularObject,object
+Device.SoftwareModules.DeploymentUnit.{i}.UUID,device.software-modules.deployment-unit.{i}.uuid,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.DUID,device.software-modules.deployment-unit.{i}.duid,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.Alias,device.software-modules.deployment-unit.{i}.alias,Tabular-ReadWrite,string
+Device.SoftwareModules.DeploymentUnit.{i}.Name,device.software-modules.deployment-unit.{i}.name,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.Status,device.software-modules.deployment-unit.{i}.status,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.Resolved,device.software-modules.deployment-unit.{i}.resolved,Tabular-ReadOnly,boolean
+Device.SoftwareModules.DeploymentUnit.{i}.URL,device.software-modules.deployment-unit.{i}.url,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.Description,device.software-modules.deployment-unit.{i}.description,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.Vendor,device.software-modules.deployment-unit.{i}.vendor,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.Version,device.software-modules.deployment-unit.{i}.version,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.VendorLogList,device.software-modules.deployment-unit.{i}.vendor-log-list,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.VendorConfigList,device.software-modules.deployment-unit.{i}.vendor-config-list,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.ExecutionUnitList,device.software-modules.deployment-unit.{i}.execution-unit-list,Tabular-ReadOnly,string
+Device.SoftwareModules.DeploymentUnit.{i}.ExecutionEnvRef,device.software-modules.deployment-unit.{i}.execution-env-ref,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.,device.software-modules.execution-unit.{i}.,TabularObject,object
+Device.SoftwareModules.ExecutionUnit.{i}.EUID,device.software-modules.execution-unit.{i}.euid,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.Alias,device.software-modules.execution-unit.{i}.alias,Tabular-ReadWrite,string
+Device.SoftwareModules.ExecutionUnit.{i}.Name,device.software-modules.execution-unit.{i}.name,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.ExecEnvLabel,device.software-modules.execution-unit.{i}.exec-env-label,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.Status,device.software-modules.execution-unit.{i}.status,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.ExecutionFaultCode,device.software-modules.execution-unit.{i}.execution-fault-code,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.ExecutionFaultMessage,device.software-modules.execution-unit.{i}.execution-fault-message,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.AutoStart,device.software-modules.execution-unit.{i}.auto-start,Tabular-ReadWrite,boolean
+Device.SoftwareModules.ExecutionUnit.{i}.RunLevel,device.software-modules.execution-unit.{i}.run-level,Tabular-ReadWrite,unsignedInt
+Device.SoftwareModules.ExecutionUnit.{i}.Vendor,device.software-modules.execution-unit.{i}.vendor,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.Version,device.software-modules.execution-unit.{i}.version,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.Description,device.software-modules.execution-unit.{i}.description,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.DiskSpaceInUse,device.software-modules.execution-unit.{i}.disk-space-in-use,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecutionUnit.{i}.MemoryInUse,device.software-modules.execution-unit.{i}.memory-in-use,Tabular-ReadOnly,int
+Device.SoftwareModules.ExecutionUnit.{i}.References,device.software-modules.execution-unit.{i}.references,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.AssociatedProcessList,device.software-modules.execution-unit.{i}.associated-process-list,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.VendorLogList,device.software-modules.execution-unit.{i}.vendor-log-list,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.VendorConfigList,device.software-modules.execution-unit.{i}.vendor-config-list,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.SupportedDataModelList,device.software-modules.execution-unit.{i}.supported-data-model-list,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.ExecutionEnvRef,device.software-modules.execution-unit.{i}.execution-env-ref,Tabular-ReadOnly,string
+Device.SoftwareModules.ExecutionUnit.{i}.Extensions.,device.software-modules.execution-unit.{i}.extensions,ScalarObject,object
+Device.ETSIM2M.,device.etsi-m2-m,ScalarObject,object
+Device.ETSIM2M.SCLNumberOfEntries,device.etsi-m2-m.scl-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.,device.etsi-m2-m.scl.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.Enable,device.etsi-m2-m.scl.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.Alias,device.etsi-m2-m.scl.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.AnnouncedToSCLList,device.etsi-m2-m.scl.{i}.announced-to-scl-list,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySetNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.AreaNwkInstanceNumberOfEntries,device.etsi-m2-m.scl.{i}.area-nwk-instance-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstanceNumberOfEntries,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.Discovery.,device.etsi-m2-m.scl.{i}.discovery,ScalarObject,object
+Device.ETSIM2M.SCL.{i}.Discovery.MaxNumberOfDiscovRecords,device.etsi-m2-m.scl.{i}.discovery.max-number-of-discov-records,Scalar-ReadWrite,unsignedInt
+Device.ETSIM2M.SCL.{i}.Discovery.MaxSizeOfDiscovAnswer,device.etsi-m2-m.scl.{i}.discovery.max-size-of-discov-answer,Scalar-ReadWrite,unsignedInt
+Device.ETSIM2M.SCL.{i}.Reregistration.,device.etsi-m2-m.scl.{i}.reregistration,ScalarObject,object
+Device.ETSIM2M.SCL.{i}.Reregistration.RegTargetNSCLList,device.etsi-m2-m.scl.{i}.reregistration.reg-target-nscl-list,Scalar-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.Reregistration.RegSearchStrings,device.etsi-m2-m.scl.{i}.reregistration.reg-search-strings,Scalar-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.Reregistration.RegAccessRightID,device.etsi-m2-m.scl.{i}.reregistration.reg-access-right-id,Scalar-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.Reregistration.RegExpirationDuration,device.etsi-m2-m.scl.{i}.reregistration.reg-expiration-duration,Scalar-ReadWrite,int
+Device.ETSIM2M.SCL.{i}.Reregistration.ActionStatus.,device.etsi-m2-m.scl.{i}.reregistration.action-status,ScalarObject,object
+Device.ETSIM2M.SCL.{i}.Reregistration.ActionStatus.Progress,device.etsi-m2-m.scl.{i}.reregistration.action-status.progress,Scalar-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.Reregistration.ActionStatus.FinalStatus,device.etsi-m2-m.scl.{i}.reregistration.action-status.final-status,Scalar-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.PolicyScope,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.policy-scope,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicyNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.ANName,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.an-name,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.BlockPeriodNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.block-period-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategoryNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.BlockPeriod.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.block-period.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.BlockPeriod.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.block-period.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.BlockPeriod.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.block-period.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.BlockPeriod.{i}.FailedAttempts,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.block-period.{i}.failed-attempts,Tabular-ReadWrite,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.BlockPeriod.{i}.BlockDuration,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.block-period.{i}.block-duration,Tabular-ReadWrite,int
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.RCAT,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.rcat,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.ScheduleNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.Schedules,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.schedules,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.AbsTimeSpanNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.abs-time-span-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.AbsTimeSpan.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.abs-time-span.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.AbsTimeSpan.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.abs-time-span.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.AbsTimeSpan.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.abs-time-span.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.AbsTimeSpan.{i}.StartTime,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.abs-time-span.{i}.start-time,Tabular-ReadWrite,dateTime
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.ANPPolicy.{i}.RequestCategory.{i}.Schedule.{i}.AbsTimeSpan.{i}.EndTime,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.anp-policy.{i}.request-category.{i}.schedule.{i}.abs-time-span.{i}.end-time,Tabular-ReadWrite,dateTime
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy,ScalarObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.DefaultRCATValue,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.default-rcat-value,Scalar-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategoryNumberOfEntries,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.Enable,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.enable,Tabular-ReadWrite,boolean
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.Alias,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.alias,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.RCAT,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.rcat,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.TolerableDelay,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.tolerable-delay,Tabular-ReadWrite,int
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.Thresh,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.thresh,Tabular-ReadWrite,unsignedInt
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.Mem,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.mem,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.SAFPolicySet.{i}.M2MSPPolicy.RequestCategory.{i}.RankedANList,device.etsi-m2-m.scl.{i}.saf-policy-set.{i}.m2-msp-policy.request-category.{i}.ranked-an-list,Tabular-ReadWrite,string
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.ID,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.id,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.AreaNwkType,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.area-nwk-type,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.ListOfDevices,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.list-of-devices,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.PropertyNumberOfEntries,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.property-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.Property.{i}.,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.property.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.Property.{i}.Name,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.property.{i}.name,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkInstance.{i}.Property.{i}.Value,device.etsi-m2-m.scl.{i}.area-nwk-instance.{i}.property.{i}.value,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.AreaNwkInstance,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.area-nwk-instance,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.Host,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.host,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.ListOfDeviceNeighbors,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.list-of-device-neighbors,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.ListOfDeviceApplications,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.list-of-device-applications,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.SleepInterval,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.sleep-interval,Tabular-ReadWrite,unsignedInt
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.SleepDuration,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.sleep-duration,Tabular-ReadWrite,unsignedInt
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.Status,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.status,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.Active,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.active,Tabular-ReadOnly,boolean
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.PropertyNumberOfEntries,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.property-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.Property.{i}.,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.property.{i}.,TabularObject,object
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.Property.{i}.Name,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.property.{i}.name,Tabular-ReadOnly,string
+Device.ETSIM2M.SCL.{i}.AreaNwkDeviceInfoInstance.{i}.Property.{i}.Value,device.etsi-m2-m.scl.{i}.area-nwk-device-info-instance.{i}.property.{i}.value,Tabular-ReadOnly,string
+Device.GatewayInfo.,device.gateway-info,ScalarObject,object
+Device.GatewayInfo.ManufacturerOUI,device.gateway-info.manufacturer-oui,Scalar-ReadOnly,string
+Device.GatewayInfo.ProductClass,device.gateway-info.product-class,Scalar-ReadOnly,string
+Device.GatewayInfo.SerialNumber,device.gateway-info.serial-number,Scalar-ReadOnly,string
+Device.Time.,device.time,ScalarObject,object
+Device.Time.Enable,device.time.enable,Scalar-ReadWrite,boolean
+Device.Time.Status,device.time.status,Scalar-ReadOnly,string
+Device.Time.NTPServer1,device.time.ntp-server1,Scalar-ReadWrite,string
+Device.Time.NTPServer2,device.time.ntp-server2,Scalar-ReadWrite,string
+Device.Time.NTPServer3,device.time.ntp-server3,Scalar-ReadWrite,string
+Device.Time.NTPServer4,device.time.ntp-server4,Scalar-ReadWrite,string
+Device.Time.NTPServer5,device.time.ntp-server5,Scalar-ReadWrite,string
+Device.Time.CurrentLocalTime,device.time.current-local-time,Scalar-ReadOnly,dateTime
+Device.Time.LocalTimeZone,device.time.local-time-zone,Scalar-ReadWrite,string
+Device.UserInterface.,device.user-interface,ScalarObject,object
+Device.UserInterface.Enable,device.user-interface.enable,Scalar-ReadWrite,boolean
+Device.UserInterface.PasswordRequired,device.user-interface.password-required,Scalar-ReadWrite,boolean
+Device.UserInterface.PasswordUserSelectable,device.user-interface.password-user-selectable,Scalar-ReadWrite,boolean
+Device.UserInterface.UpgradeAvailable,device.user-interface.upgrade-available,Scalar-ReadWrite,boolean
+Device.UserInterface.WarrantyDate,device.user-interface.warranty-date,Scalar-ReadWrite,dateTime
+Device.UserInterface.ISPName,device.user-interface.isp-name,Scalar-ReadWrite,string
+Device.UserInterface.ISPHelpDesk,device.user-interface.isp-help-desk,Scalar-ReadWrite,string
+Device.UserInterface.ISPHomePage,device.user-interface.isp-home-page,Scalar-ReadWrite,string
+Device.UserInterface.ISPHelpPage,device.user-interface.isp-help-page,Scalar-ReadWrite,string
+Device.UserInterface.ISPLogo,device.user-interface.isp-logo,Scalar-ReadWrite,string
+Device.UserInterface.ISPLogoSize,device.user-interface.isp-logo-size,Scalar-ReadWrite,unsignedInt
+Device.UserInterface.ISPMailServer,device.user-interface.isp-mail-server,Scalar-ReadWrite,string
+Device.UserInterface.ISPNewsServer,device.user-interface.isp-news-server,Scalar-ReadWrite,string
+Device.UserInterface.TextColor,device.user-interface.text-color,Scalar-ReadWrite,string
+Device.UserInterface.BackgroundColor,device.user-interface.background-color,Scalar-ReadWrite,string
+Device.UserInterface.ButtonColor,device.user-interface.button-color,Scalar-ReadWrite,string
+Device.UserInterface.ButtonTextColor,device.user-interface.button-text-color,Scalar-ReadWrite,string
+Device.UserInterface.AutoUpdateServer,device.user-interface.auto-update-server,Scalar-ReadWrite,string
+Device.UserInterface.UserUpdateServer,device.user-interface.user-update-server,Scalar-ReadWrite,string
+Device.UserInterface.AvailableLanguages,device.user-interface.available-languages,Scalar-ReadOnly,string
+Device.UserInterface.CurrentLanguage,device.user-interface.current-language,Scalar-ReadWrite,string
+Device.UserInterface.RemoteAccess.,device.user-interface.remote-access,ScalarObject,object
+Device.UserInterface.RemoteAccess.Enable,device.user-interface.remote-access.enable,Scalar-ReadWrite,boolean
+Device.UserInterface.RemoteAccess.Port,device.user-interface.remote-access.port,Scalar-ReadWrite,unsignedInt
+Device.UserInterface.RemoteAccess.SupportedProtocols,device.user-interface.remote-access.supported-protocols,Scalar-ReadOnly,string
+Device.UserInterface.RemoteAccess.Protocol,device.user-interface.remote-access.protocol,Scalar-ReadWrite,string
+Device.UserInterface.LocalDisplay.,device.user-interface.local-display,ScalarObject,object
+Device.UserInterface.LocalDisplay.Movable,device.user-interface.local-display.movable,Scalar-ReadWrite,boolean
+Device.UserInterface.LocalDisplay.Resizable,device.user-interface.local-display.resizable,Scalar-ReadWrite,boolean
+Device.UserInterface.LocalDisplay.PosX,device.user-interface.local-display.pos-x,Scalar-ReadWrite,int
+Device.UserInterface.LocalDisplay.PosY,device.user-interface.local-display.pos-y,Scalar-ReadWrite,int
+Device.UserInterface.LocalDisplay.Width,device.user-interface.local-display.width,Scalar-ReadWrite,unsignedInt
+Device.UserInterface.LocalDisplay.Height,device.user-interface.local-display.height,Scalar-ReadWrite,unsignedInt
+Device.UserInterface.LocalDisplay.DisplayWidth,device.user-interface.local-display.display-width,Scalar-ReadOnly,unsignedInt
+Device.UserInterface.LocalDisplay.DisplayHeight,device.user-interface.local-display.display-height,Scalar-ReadOnly,unsignedInt
+Device.UserInterface.Messages.,device.user-interface.messages,ScalarObject,object
+Device.UserInterface.Messages.Enable,device.user-interface.messages.enable,Scalar-ReadWrite,boolean
+Device.UserInterface.Messages.Title,device.user-interface.messages.title,Scalar-ReadWrite,string
+Device.UserInterface.Messages.SubTitle,device.user-interface.messages.sub-title,Scalar-ReadWrite,string
+Device.UserInterface.Messages.Text,device.user-interface.messages.text,Scalar-ReadWrite,string
+Device.UserInterface.Messages.IconType,device.user-interface.messages.icon-type,Scalar-ReadWrite,string
+Device.UserInterface.Messages.MessageColor,device.user-interface.messages.message-color,Scalar-ReadWrite,string
+Device.UserInterface.Messages.BackgroundColor,device.user-interface.messages.background-color,Scalar-ReadWrite,string
+Device.UserInterface.Messages.TitleColor,device.user-interface.messages.title-color,Scalar-ReadWrite,string
+Device.UserInterface.Messages.SubTitleColor,device.user-interface.messages.sub-title-color,Scalar-ReadWrite,string
+Device.UserInterface.Messages.RequestedNumberOfRepetitions,device.user-interface.messages.requested-number-of-repetitions,Scalar-ReadWrite,unsignedInt
+Device.UserInterface.Messages.ExecutedNumberOfRepetitions,device.user-interface.messages.executed-number-of-repetitions,Scalar-ReadOnly,unsignedInt
+Device.InterfaceStack.{i}.,device.interface-stack.{i}.,TabularObject,object
+Device.InterfaceStack.{i}.Alias,device.interface-stack.{i}.alias,Tabular-ReadWrite,string
+Device.InterfaceStack.{i}.HigherLayer,device.interface-stack.{i}.higher-layer,Tabular-ReadOnly,string
+Device.InterfaceStack.{i}.LowerLayer,device.interface-stack.{i}.lower-layer,Tabular-ReadOnly,string
+Device.InterfaceStack.{i}.HigherAlias,device.interface-stack.{i}.higher-alias,Tabular-ReadOnly,string
+Device.InterfaceStack.{i}.LowerAlias,device.interface-stack.{i}.lower-alias,Tabular-ReadOnly,string
+Device.DSL.,device.dsl,ScalarObject,object
+Device.DSL.LineNumberOfEntries,device.dsl.line-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DSL.ChannelNumberOfEntries,device.dsl.channel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroupNumberOfEntries,device.dsl.bonding-group-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.,device.dsl.line.{i}.,TabularObject,object
+Device.DSL.Line.{i}.Enable,device.dsl.line.{i}.enable,Tabular-ReadWrite,boolean
+Device.DSL.Line.{i}.EnableDataGathering,device.dsl.line.{i}.enable-data-gathering,Tabular-ReadWrite,boolean
+Device.DSL.Line.{i}.Status,device.dsl.line.{i}.status,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.Alias,device.dsl.line.{i}.alias,Tabular-ReadWrite,string
+Device.DSL.Line.{i}.Name,device.dsl.line.{i}.name,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.LastChange,device.dsl.line.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.LowerLayers,device.dsl.line.{i}.lower-layers,Tabular-ReadWrite,string
+Device.DSL.Line.{i}.Upstream,device.dsl.line.{i}.upstream,Tabular-ReadOnly,boolean
+Device.DSL.Line.{i}.FirmwareVersion,device.dsl.line.{i}.firmware-version,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.LinkStatus,device.dsl.line.{i}.link-status,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.StandardsSupported,device.dsl.line.{i}.standards-supported,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.XTSE,device.dsl.line.{i}.xtse,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.StandardUsed,device.dsl.line.{i}.standard-used,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.XTSUsed,device.dsl.line.{i}.xts-used,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.LineEncoding,device.dsl.line.{i}.line-encoding,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.AllowedProfiles,device.dsl.line.{i}.allowed-profiles,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.CurrentProfile,device.dsl.line.{i}.current-profile,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.PowerManagementState,device.dsl.line.{i}.power-management-state,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.SuccessFailureCause,device.dsl.line.{i}.success-failure-cause,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.UPBOKLER,device.dsl.line.{i}.upbokler,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.UPBOKLEPb,device.dsl.line.{i}.upbokle-pb,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.UPBOKLERPb,device.dsl.line.{i}.upbokler-pb,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.RXTHRSHds,device.dsl.line.{i}.rxthrs-hds,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.ACTRAMODEds,device.dsl.line.{i}.actramod-eds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.ACTRAMODEus,device.dsl.line.{i}.actramod-eus,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.ACTINPROCds,device.dsl.line.{i}.actinpro-cds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.ACTINPROCus,device.dsl.line.{i}.actinpro-cus,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.SNRMROCds,device.dsl.line.{i}.snrmro-cds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.SNRMROCus,device.dsl.line.{i}.snrmro-cus,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.LastStateTransmittedDownstream,device.dsl.line.{i}.last-state-transmitted-downstream,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.LastStateTransmittedUpstream,device.dsl.line.{i}.last-state-transmitted-upstream,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.UPBOKLE,device.dsl.line.{i}.upbokle,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.MREFPSDds,device.dsl.line.{i}.mrefps-dds,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.MREFPSDus,device.dsl.line.{i}.mrefps-dus,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.LIMITMASK,device.dsl.line.{i}.limitmask,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.US0MASK,device.dsl.line.{i}.u-s0-mask,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TRELLISds,device.dsl.line.{i}.trelli-sds,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.TRELLISus,device.dsl.line.{i}.trelli-sus,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.ACTSNRMODEds,device.dsl.line.{i}.actsnrmod-eds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.ACTSNRMODEus,device.dsl.line.{i}.actsnrmod-eus,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.VirtualNoisePSDds,device.dsl.line.{i}.virtual-noise-ps-dds,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.VirtualNoisePSDus,device.dsl.line.{i}.virtual-noise-ps-dus,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.ACTUALCE,device.dsl.line.{i}.actualce,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.LineNumber,device.dsl.line.{i}.line-number,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.UpstreamMaxBitRate,device.dsl.line.{i}.upstream-max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.DownstreamMaxBitRate,device.dsl.line.{i}.downstream-max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.UpstreamNoiseMargin,device.dsl.line.{i}.upstream-noise-margin,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.DownstreamNoiseMargin,device.dsl.line.{i}.downstream-noise-margin,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.SNRMpbus,device.dsl.line.{i}.snr-mpbus,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.SNRMpbds,device.dsl.line.{i}.snr-mpbds,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.INMIATOds,device.dsl.line.{i}.inmiat-ods,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.INMIATSds,device.dsl.line.{i}.inmiat-sds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.INMCCds,device.dsl.line.{i}.inmc-cds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.INMINPEQMODEds,device.dsl.line.{i}.inminpeqmod-eds,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.UpstreamAttenuation,device.dsl.line.{i}.upstream-attenuation,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.DownstreamAttenuation,device.dsl.line.{i}.downstream-attenuation,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.UpstreamPower,device.dsl.line.{i}.upstream-power,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.DownstreamPower,device.dsl.line.{i}.downstream-power,Tabular-ReadOnly,int
+Device.DSL.Line.{i}.XTURVendor,device.dsl.line.{i}.xtur-vendor,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.XTURCountry,device.dsl.line.{i}.xtur-country,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.XTURANSIStd,device.dsl.line.{i}.xturansi-std,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.XTURANSIRev,device.dsl.line.{i}.xturansi-rev,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.XTUCVendor,device.dsl.line.{i}.xtuc-vendor,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.XTUCCountry,device.dsl.line.{i}.xtuc-country,Tabular-ReadOnly,string
+Device.DSL.Line.{i}.XTUCANSIStd,device.dsl.line.{i}.xtucansi-std,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.XTUCANSIRev,device.dsl.line.{i}.xtucansi-rev,Tabular-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.,device.dsl.line.{i}.stats,ScalarObject,object
+Device.DSL.Line.{i}.Stats.BytesSent,device.dsl.line.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.Line.{i}.Stats.BytesReceived,device.dsl.line.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.Line.{i}.Stats.PacketsSent,device.dsl.line.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.Line.{i}.Stats.PacketsReceived,device.dsl.line.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.Line.{i}.Stats.ErrorsSent,device.dsl.line.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.ErrorsReceived,device.dsl.line.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.DiscardPacketsSent,device.dsl.line.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.DiscardPacketsReceived,device.dsl.line.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.TotalStart,device.dsl.line.{i}.stats.total-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.ShowtimeStart,device.dsl.line.{i}.stats.showtime-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.LastShowtimeStart,device.dsl.line.{i}.stats.last-showtime-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.CurrentDayStart,device.dsl.line.{i}.stats.current-day-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.QuarterHourStart,device.dsl.line.{i}.stats.quarter-hour-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.Total.,device.dsl.line.{i}.stats.total,ScalarObject,object
+Device.DSL.Line.{i}.Stats.Total.ErroredSecs,device.dsl.line.{i}.stats.total.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.Total.SeverelyErroredSecs,device.dsl.line.{i}.stats.total.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.Showtime.,device.dsl.line.{i}.stats.showtime,ScalarObject,object
+Device.DSL.Line.{i}.Stats.Showtime.ErroredSecs,device.dsl.line.{i}.stats.showtime.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.Showtime.SeverelyErroredSecs,device.dsl.line.{i}.stats.showtime.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.LastShowtime.,device.dsl.line.{i}.stats.last-showtime,ScalarObject,object
+Device.DSL.Line.{i}.Stats.LastShowtime.ErroredSecs,device.dsl.line.{i}.stats.last-showtime.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.LastShowtime.SeverelyErroredSecs,device.dsl.line.{i}.stats.last-showtime.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.CurrentDay.,device.dsl.line.{i}.stats.current-day,ScalarObject,object
+Device.DSL.Line.{i}.Stats.CurrentDay.ErroredSecs,device.dsl.line.{i}.stats.current-day.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.CurrentDay.SeverelyErroredSecs,device.dsl.line.{i}.stats.current-day.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.QuarterHour.,device.dsl.line.{i}.stats.quarter-hour,ScalarObject,object
+Device.DSL.Line.{i}.Stats.QuarterHour.ErroredSecs,device.dsl.line.{i}.stats.quarter-hour.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.Stats.QuarterHour.SeverelyErroredSecs,device.dsl.line.{i}.stats.quarter-hour.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.,device.dsl.line.{i}.test-params,ScalarObject,object
+Device.DSL.Line.{i}.TestParams.HLOGGds,device.dsl.line.{i}.test-params.hlog-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.HLOGGus,device.dsl.line.{i}.test-params.hlog-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.HLOGpsds,device.dsl.line.{i}.test-params.hlo-gpsds,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.HLOGpsus,device.dsl.line.{i}.test-params.hlo-gpsus,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.HLOGMTds,device.dsl.line.{i}.test-params.hlogm-tds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.HLOGMTus,device.dsl.line.{i}.test-params.hlogm-tus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.QLNGds,device.dsl.line.{i}.test-params.qln-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.QLNGus,device.dsl.line.{i}.test-params.qln-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.QLNpsds,device.dsl.line.{i}.test-params.ql-npsds,Scalar-ReadOnly,int
+Device.DSL.Line.{i}.TestParams.QLNpsus,device.dsl.line.{i}.test-params.ql-npsus,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.QLNMTds,device.dsl.line.{i}.test-params.qlnm-tds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.QLNMTus,device.dsl.line.{i}.test-params.qlnm-tus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.SNRGds,device.dsl.line.{i}.test-params.snr-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.SNRGus,device.dsl.line.{i}.test-params.snr-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.SNRpsds,device.dsl.line.{i}.test-params.sn-rpsds,Scalar-ReadOnly,int
+Device.DSL.Line.{i}.TestParams.SNRpsus,device.dsl.line.{i}.test-params.sn-rpsus,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.SNRMTds,device.dsl.line.{i}.test-params.snrm-tds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.SNRMTus,device.dsl.line.{i}.test-params.snrm-tus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.TestParams.LATNds,device.dsl.line.{i}.test-params.lat-nds,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.LATNus,device.dsl.line.{i}.test-params.lat-nus,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.SATNds,device.dsl.line.{i}.test-params.sat-nds,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.TestParams.SATNus,device.dsl.line.{i}.test-params.sat-nus,Scalar-ReadOnly,string
+Device.DSL.Line.{i}.DataGathering.,device.dsl.line.{i}.data-gathering,ScalarObject,object
+Device.DSL.Line.{i}.DataGathering.LoggingDepthR,device.dsl.line.{i}.data-gathering.logging-depth-r,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.DataGathering.ActLoggingDepthReportingR,device.dsl.line.{i}.data-gathering.act-logging-depth-reporting-r,Scalar-ReadOnly,unsignedInt
+Device.DSL.Line.{i}.DataGathering.EventTraceBufferR,device.dsl.line.{i}.data-gathering.event-trace-buffer-r,Scalar-ReadOnly,string
+Device.DSL.Channel.{i}.,device.dsl.channel.{i}.,TabularObject,object
+Device.DSL.Channel.{i}.Enable,device.dsl.channel.{i}.enable,Tabular-ReadWrite,boolean
+Device.DSL.Channel.{i}.Status,device.dsl.channel.{i}.status,Tabular-ReadOnly,string
+Device.DSL.Channel.{i}.Alias,device.dsl.channel.{i}.alias,Tabular-ReadWrite,string
+Device.DSL.Channel.{i}.Name,device.dsl.channel.{i}.name,Tabular-ReadOnly,string
+Device.DSL.Channel.{i}.LastChange,device.dsl.channel.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.LowerLayers,device.dsl.channel.{i}.lower-layers,Tabular-ReadOnly,string
+Device.DSL.Channel.{i}.LinkEncapsulationSupported,device.dsl.channel.{i}.link-encapsulation-supported,Tabular-ReadOnly,string
+Device.DSL.Channel.{i}.LinkEncapsulationUsed,device.dsl.channel.{i}.link-encapsulation-used,Tabular-ReadOnly,string
+Device.DSL.Channel.{i}.LPATH,device.dsl.channel.{i}.lpath,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.INTLVDEPTH,device.dsl.channel.{i}.intlvdepth,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.INTLVBLOCK,device.dsl.channel.{i}.intlvblock,Tabular-ReadOnly,int
+Device.DSL.Channel.{i}.ActualInterleavingDelay,device.dsl.channel.{i}.actual-interleaving-delay,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.ACTINP,device.dsl.channel.{i}.actinp,Tabular-ReadOnly,int
+Device.DSL.Channel.{i}.INPREPORT,device.dsl.channel.{i}.inpreport,Tabular-ReadOnly,boolean
+Device.DSL.Channel.{i}.NFEC,device.dsl.channel.{i}.nfec,Tabular-ReadOnly,int
+Device.DSL.Channel.{i}.RFEC,device.dsl.channel.{i}.rfec,Tabular-ReadOnly,int
+Device.DSL.Channel.{i}.LSYMB,device.dsl.channel.{i}.lsymb,Tabular-ReadOnly,int
+Device.DSL.Channel.{i}.UpstreamCurrRate,device.dsl.channel.{i}.upstream-curr-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.DownstreamCurrRate,device.dsl.channel.{i}.downstream-curr-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.ACTNDR,device.dsl.channel.{i}.actndr,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.ACTINPREIN,device.dsl.channel.{i}.actinprein,Tabular-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.,device.dsl.channel.{i}.stats,ScalarObject,object
+Device.DSL.Channel.{i}.Stats.BytesSent,device.dsl.channel.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.Channel.{i}.Stats.BytesReceived,device.dsl.channel.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.Channel.{i}.Stats.PacketsSent,device.dsl.channel.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.Channel.{i}.Stats.PacketsReceived,device.dsl.channel.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.Channel.{i}.Stats.ErrorsSent,device.dsl.channel.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.ErrorsReceived,device.dsl.channel.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.DiscardPacketsSent,device.dsl.channel.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.DiscardPacketsReceived,device.dsl.channel.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.TotalStart,device.dsl.channel.{i}.stats.total-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.ShowtimeStart,device.dsl.channel.{i}.stats.showtime-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtimeStart,device.dsl.channel.{i}.stats.last-showtime-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDayStart,device.dsl.channel.{i}.stats.current-day-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHourStart,device.dsl.channel.{i}.stats.quarter-hour-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Total.,device.dsl.channel.{i}.stats.total,ScalarObject,object
+Device.DSL.Channel.{i}.Stats.Total.XTURFECErrors,device.dsl.channel.{i}.stats.total.xturfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Total.XTUCFECErrors,device.dsl.channel.{i}.stats.total.xtucfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Total.XTURHECErrors,device.dsl.channel.{i}.stats.total.xturhec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Total.XTUCHECErrors,device.dsl.channel.{i}.stats.total.xtuchec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Total.XTURCRCErrors,device.dsl.channel.{i}.stats.total.xturcrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Total.XTUCCRCErrors,device.dsl.channel.{i}.stats.total.xtuccrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Showtime.,device.dsl.channel.{i}.stats.showtime,ScalarObject,object
+Device.DSL.Channel.{i}.Stats.Showtime.XTURFECErrors,device.dsl.channel.{i}.stats.showtime.xturfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Showtime.XTUCFECErrors,device.dsl.channel.{i}.stats.showtime.xtucfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Showtime.XTURHECErrors,device.dsl.channel.{i}.stats.showtime.xturhec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Showtime.XTUCHECErrors,device.dsl.channel.{i}.stats.showtime.xtuchec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Showtime.XTURCRCErrors,device.dsl.channel.{i}.stats.showtime.xturcrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.Showtime.XTUCCRCErrors,device.dsl.channel.{i}.stats.showtime.xtuccrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtime.,device.dsl.channel.{i}.stats.last-showtime,ScalarObject,object
+Device.DSL.Channel.{i}.Stats.LastShowtime.XTURFECErrors,device.dsl.channel.{i}.stats.last-showtime.xturfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtime.XTUCFECErrors,device.dsl.channel.{i}.stats.last-showtime.xtucfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtime.XTURHECErrors,device.dsl.channel.{i}.stats.last-showtime.xturhec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtime.XTUCHECErrors,device.dsl.channel.{i}.stats.last-showtime.xtuchec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtime.XTURCRCErrors,device.dsl.channel.{i}.stats.last-showtime.xturcrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.LastShowtime.XTUCCRCErrors,device.dsl.channel.{i}.stats.last-showtime.xtuccrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDay.,device.dsl.channel.{i}.stats.current-day,ScalarObject,object
+Device.DSL.Channel.{i}.Stats.CurrentDay.XTURFECErrors,device.dsl.channel.{i}.stats.current-day.xturfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDay.XTUCFECErrors,device.dsl.channel.{i}.stats.current-day.xtucfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDay.XTURHECErrors,device.dsl.channel.{i}.stats.current-day.xturhec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDay.XTUCHECErrors,device.dsl.channel.{i}.stats.current-day.xtuchec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDay.XTURCRCErrors,device.dsl.channel.{i}.stats.current-day.xturcrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.CurrentDay.XTUCCRCErrors,device.dsl.channel.{i}.stats.current-day.xtuccrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHour.,device.dsl.channel.{i}.stats.quarter-hour,ScalarObject,object
+Device.DSL.Channel.{i}.Stats.QuarterHour.XTURFECErrors,device.dsl.channel.{i}.stats.quarter-hour.xturfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHour.XTUCFECErrors,device.dsl.channel.{i}.stats.quarter-hour.xtucfec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHour.XTURHECErrors,device.dsl.channel.{i}.stats.quarter-hour.xturhec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHour.XTUCHECErrors,device.dsl.channel.{i}.stats.quarter-hour.xtuchec-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHour.XTURCRCErrors,device.dsl.channel.{i}.stats.quarter-hour.xturcrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.Channel.{i}.Stats.QuarterHour.XTUCCRCErrors,device.dsl.channel.{i}.stats.quarter-hour.xtuccrc-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.,device.dsl.bonding-group.{i}.,TabularObject,object
+Device.DSL.BondingGroup.{i}.Enable,device.dsl.bonding-group.{i}.enable,Tabular-ReadWrite,boolean
+Device.DSL.BondingGroup.{i}.Status,device.dsl.bonding-group.{i}.status,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.Alias,device.dsl.bonding-group.{i}.alias,Tabular-ReadWrite,string
+Device.DSL.BondingGroup.{i}.Name,device.dsl.bonding-group.{i}.name,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.LastChange,device.dsl.bonding-group.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.LowerLayers,device.dsl.bonding-group.{i}.lower-layers,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.GroupStatus,device.dsl.bonding-group.{i}.group-status,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.GroupID,device.dsl.bonding-group.{i}.group-id,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondSchemesSupported,device.dsl.bonding-group.{i}.bond-schemes-supported,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.BondScheme,device.dsl.bonding-group.{i}.bond-scheme,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.GroupCapacity,device.dsl.bonding-group.{i}.group-capacity,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.RunningTime,device.dsl.bonding-group.{i}.running-time,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.TargetUpRate,device.dsl.bonding-group.{i}.target-up-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.TargetDownRate,device.dsl.bonding-group.{i}.target-down-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.ThreshLowUpRate,device.dsl.bonding-group.{i}.thresh-low-up-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.ThreshLowDownRate,device.dsl.bonding-group.{i}.thresh-low-down-rate,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.UpstreamDifferentialDelayTolerance,device.dsl.bonding-group.{i}.upstream-differential-delay-tolerance,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.DownstreamDifferentialDelayTolerance,device.dsl.bonding-group.{i}.downstream-differential-delay-tolerance,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannelNumberOfEntries,device.dsl.bonding-group.{i}.bonded-channel-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.,device.dsl.bonding-group.{i}.bonded-channel.{i}.,TabularObject,object
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Alias,device.dsl.bonding-group.{i}.bonded-channel.{i}.alias,Tabular-ReadWrite,string
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Channel,device.dsl.bonding-group.{i}.bonded-channel.{i}.channel,Tabular-ReadOnly,string
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet,ScalarObject,object
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats,ScalarObject,object
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.UnderflowErrorsSent,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.underflow-errors-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.CRCErrorsReceived,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.crc-errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.AlignmentErrorsReceived,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.alignment-errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.ShortPacketsReceived,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.short-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.LongPacketsReceived,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.long-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.OverflowErrorsReceived,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.overflow-errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.PauseFramesReceived,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.pause-frames-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.BondedChannel.{i}.Ethernet.Stats.FramesDropped,device.dsl.bonding-group.{i}.bonded-channel.{i}.ethernet.stats.frames-dropped,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.,device.dsl.bonding-group.{i}.stats,ScalarObject,object
+Device.DSL.BondingGroup.{i}.Stats.BytesSent,device.dsl.bonding-group.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.BytesReceived,device.dsl.bonding-group.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.PacketsSent,device.dsl.bonding-group.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.PacketsReceived,device.dsl.bonding-group.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.ErrorsSent,device.dsl.bonding-group.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.ErrorsReceived,device.dsl.bonding-group.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.UnicastPacketsSent,device.dsl.bonding-group.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.UnicastPacketsReceived,device.dsl.bonding-group.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.DiscardPacketsSent,device.dsl.bonding-group.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.DiscardPacketsReceived,device.dsl.bonding-group.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.MulticastPacketsSent,device.dsl.bonding-group.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.MulticastPacketsReceived,device.dsl.bonding-group.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.BroadcastPacketsSent,device.dsl.bonding-group.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.BroadcastPacketsReceived,device.dsl.bonding-group.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.DSL.BondingGroup.{i}.Stats.UnknownProtoPacketsReceived,device.dsl.bonding-group.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.TotalStart,device.dsl.bonding-group.{i}.stats.total-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDayStart,device.dsl.bonding-group.{i}.stats.current-day-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHourStart,device.dsl.bonding-group.{i}.stats.quarter-hour-start,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.,device.dsl.bonding-group.{i}.stats.total,ScalarObject,object
+Device.DSL.BondingGroup.{i}.Stats.Total.FailureReasons,device.dsl.bonding-group.{i}.stats.total.failure-reasons,Scalar-ReadOnly,string
+Device.DSL.BondingGroup.{i}.Stats.Total.UpstreamRate,device.dsl.bonding-group.{i}.stats.total.upstream-rate,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.DownstreamRate,device.dsl.bonding-group.{i}.stats.total.downstream-rate,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.UpstreamPacketLoss,device.dsl.bonding-group.{i}.stats.total.upstream-packet-loss,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.DownstreamPacketLoss,device.dsl.bonding-group.{i}.stats.total.downstream-packet-loss,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.UpstreamDifferentialDelay,device.dsl.bonding-group.{i}.stats.total.upstream-differential-delay,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.DownstreamDifferentialDelay,device.dsl.bonding-group.{i}.stats.total.downstream-differential-delay,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.FailureCount,device.dsl.bonding-group.{i}.stats.total.failure-count,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.ErroredSeconds,device.dsl.bonding-group.{i}.stats.total.errored-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.SeverelyErroredSeconds,device.dsl.bonding-group.{i}.stats.total.severely-errored-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.Total.UnavailableSeconds,device.dsl.bonding-group.{i}.stats.total.unavailable-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.,device.dsl.bonding-group.{i}.stats.current-day,ScalarObject,object
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.FailureReasons,device.dsl.bonding-group.{i}.stats.current-day.failure-reasons,Scalar-ReadOnly,string
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.UpstreamRate,device.dsl.bonding-group.{i}.stats.current-day.upstream-rate,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.DownstreamRate,device.dsl.bonding-group.{i}.stats.current-day.downstream-rate,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.UpstreamPacketLoss,device.dsl.bonding-group.{i}.stats.current-day.upstream-packet-loss,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.DownstreamPacketLoss,device.dsl.bonding-group.{i}.stats.current-day.downstream-packet-loss,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.UpstreamDifferentialDelay,device.dsl.bonding-group.{i}.stats.current-day.upstream-differential-delay,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.DownstreamDifferentialDelay,device.dsl.bonding-group.{i}.stats.current-day.downstream-differential-delay,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.FailureCount,device.dsl.bonding-group.{i}.stats.current-day.failure-count,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.ErroredSeconds,device.dsl.bonding-group.{i}.stats.current-day.errored-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.SeverelyErroredSeconds,device.dsl.bonding-group.{i}.stats.current-day.severely-errored-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.CurrentDay.UnavailableSeconds,device.dsl.bonding-group.{i}.stats.current-day.unavailable-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.,device.dsl.bonding-group.{i}.stats.quarter-hour,ScalarObject,object
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.FailureReasons,device.dsl.bonding-group.{i}.stats.quarter-hour.failure-reasons,Scalar-ReadOnly,string
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.UpstreamRate,device.dsl.bonding-group.{i}.stats.quarter-hour.upstream-rate,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.DownstreamRate,device.dsl.bonding-group.{i}.stats.quarter-hour.downstream-rate,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.UpstreamPacketLoss,device.dsl.bonding-group.{i}.stats.quarter-hour.upstream-packet-loss,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.DownstreamPacketLoss,device.dsl.bonding-group.{i}.stats.quarter-hour.downstream-packet-loss,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.UpstreamDifferentialDelay,device.dsl.bonding-group.{i}.stats.quarter-hour.upstream-differential-delay,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.DownstreamDifferentialDelay,device.dsl.bonding-group.{i}.stats.quarter-hour.downstream-differential-delay,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.FailureCount,device.dsl.bonding-group.{i}.stats.quarter-hour.failure-count,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.ErroredSeconds,device.dsl.bonding-group.{i}.stats.quarter-hour.errored-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.SeverelyErroredSeconds,device.dsl.bonding-group.{i}.stats.quarter-hour.severely-errored-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Stats.QuarterHour.UnavailableSeconds,device.dsl.bonding-group.{i}.stats.quarter-hour.unavailable-seconds,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.,device.dsl.bonding-group.{i}.ethernet,ScalarObject,object
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.,device.dsl.bonding-group.{i}.ethernet.stats,ScalarObject,object
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFErrors,device.dsl.bonding-group.{i}.ethernet.stats.paf-errors,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFSmallFragments,device.dsl.bonding-group.{i}.ethernet.stats.paf-small-fragments,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFLargeFragments,device.dsl.bonding-group.{i}.ethernet.stats.paf-large-fragments,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFBadFragments,device.dsl.bonding-group.{i}.ethernet.stats.paf-bad-fragments,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFLostFragments,device.dsl.bonding-group.{i}.ethernet.stats.paf-lost-fragments,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFLateFragments,device.dsl.bonding-group.{i}.ethernet.stats.paf-late-fragments,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFLostStarts,device.dsl.bonding-group.{i}.ethernet.stats.paf-lost-starts,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFLostEnds,device.dsl.bonding-group.{i}.ethernet.stats.paf-lost-ends,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PAFOverflows,device.dsl.bonding-group.{i}.ethernet.stats.paf-overflows,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.PauseFramesSent,device.dsl.bonding-group.{i}.ethernet.stats.pause-frames-sent,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.CRCErrorsReceived,device.dsl.bonding-group.{i}.ethernet.stats.crc-errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.AlignmentErrorsReceived,device.dsl.bonding-group.{i}.ethernet.stats.alignment-errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.ShortPacketsReceived,device.dsl.bonding-group.{i}.ethernet.stats.short-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.LongPacketsReceived,device.dsl.bonding-group.{i}.ethernet.stats.long-packets-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.OverflowErrorsReceived,device.dsl.bonding-group.{i}.ethernet.stats.overflow-errors-received,Scalar-ReadOnly,unsignedInt
+Device.DSL.BondingGroup.{i}.Ethernet.Stats.FramesDropped,device.dsl.bonding-group.{i}.ethernet.stats.frames-dropped,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.,device.dsl.diagnostics,ScalarObject,object
+Device.DSL.Diagnostics.ADSLLineTest.,device.dsl.diagnostics.adsl-line-test,ScalarObject,object
+Device.DSL.Diagnostics.ADSLLineTest.DiagnosticsState,device.dsl.diagnostics.adsl-line-test.diagnostics-state,Scalar-ReadWrite,string
+Device.DSL.Diagnostics.ADSLLineTest.Interface,device.dsl.diagnostics.adsl-line-test.interface,Scalar-ReadWrite,string
+Device.DSL.Diagnostics.ADSLLineTest.ACTPSDds,device.dsl.diagnostics.adsl-line-test.actps-dds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.ACTPSDus,device.dsl.diagnostics.adsl-line-test.actps-dus,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.ACTATPds,device.dsl.diagnostics.adsl-line-test.actat-pds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.ACTATPus,device.dsl.diagnostics.adsl-line-test.actat-pus,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.HLINSCds,device.dsl.diagnostics.adsl-line-test.hlins-cds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.HLINSCus,device.dsl.diagnostics.adsl-line-test.hlins-cus,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.HLINGds,device.dsl.diagnostics.adsl-line-test.hlin-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.HLINGus,device.dsl.diagnostics.adsl-line-test.hlin-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.HLOGGds,device.dsl.diagnostics.adsl-line-test.hlog-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.HLOGGus,device.dsl.diagnostics.adsl-line-test.hlog-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.HLOGpsds,device.dsl.diagnostics.adsl-line-test.hlo-gpsds,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.HLOGpsus,device.dsl.diagnostics.adsl-line-test.hlo-gpsus,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.HLOGMTds,device.dsl.diagnostics.adsl-line-test.hlogm-tds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.HLOGMTus,device.dsl.diagnostics.adsl-line-test.hlogm-tus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.LATNpbds,device.dsl.diagnostics.adsl-line-test.lat-npbds,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.LATNpbus,device.dsl.diagnostics.adsl-line-test.lat-npbus,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.SATNds,device.dsl.diagnostics.adsl-line-test.sat-nds,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.SATNus,device.dsl.diagnostics.adsl-line-test.sat-nus,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.HLINpsds,device.dsl.diagnostics.adsl-line-test.hli-npsds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.HLINpsus,device.dsl.diagnostics.adsl-line-test.hli-npsus,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.QLNGds,device.dsl.diagnostics.adsl-line-test.qln-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.QLNGus,device.dsl.diagnostics.adsl-line-test.qln-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.QLNpsds,device.dsl.diagnostics.adsl-line-test.ql-npsds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.QLNpsus,device.dsl.diagnostics.adsl-line-test.ql-npsus,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.QLNMTds,device.dsl.diagnostics.adsl-line-test.qlnm-tds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.QLNMTus,device.dsl.diagnostics.adsl-line-test.qlnm-tus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.SNRGds,device.dsl.diagnostics.adsl-line-test.snr-gds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.SNRGus,device.dsl.diagnostics.adsl-line-test.snr-gus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.SNRpsds,device.dsl.diagnostics.adsl-line-test.sn-rpsds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.SNRpsus,device.dsl.diagnostics.adsl-line-test.sn-rpsus,Scalar-ReadOnly,string
+Device.DSL.Diagnostics.ADSLLineTest.SNRMTds,device.dsl.diagnostics.adsl-line-test.snrm-tds,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.SNRMTus,device.dsl.diagnostics.adsl-line-test.snrm-tus,Scalar-ReadOnly,unsignedInt
+Device.DSL.Diagnostics.ADSLLineTest.BITSpsds,device.dsl.diagnostics.adsl-line-test.bit-spsds,Scalar-ReadOnly,int
+Device.DSL.Diagnostics.ADSLLineTest.BITSpsus,device.dsl.diagnostics.adsl-line-test.bit-spsus,Scalar-ReadOnly,string
+Device.FAST.,device.fast,ScalarObject,object
+Device.FAST.LineNumberOfEntries,device.fast.line-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.,device.fast.line.{i}.,TabularObject,object
+Device.FAST.Line.{i}.Enable,device.fast.line.{i}.enable,Tabular-ReadWrite,boolean
+Device.FAST.Line.{i}.Status,device.fast.line.{i}.status,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.Alias,device.fast.line.{i}.alias,Tabular-ReadWrite,string
+Device.FAST.Line.{i}.Name,device.fast.line.{i}.name,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.LastChange,device.fast.line.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.LowerLayers,device.fast.line.{i}.lower-layers,Tabular-ReadWrite,string
+Device.FAST.Line.{i}.Upstream,device.fast.line.{i}.upstream,Tabular-ReadOnly,boolean
+Device.FAST.Line.{i}.FirmwareVersion,device.fast.line.{i}.firmware-version,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.LinkStatus,device.fast.line.{i}.link-status,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.AllowedProfiles,device.fast.line.{i}.allowed-profiles,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.CurrentProfile,device.fast.line.{i}.current-profile,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.PowerManagementState,device.fast.line.{i}.power-management-state,Tabular-ReadOnly,string
+Device.FAST.Line.{i}.SuccessFailureCause,device.fast.line.{i}.success-failure-cause,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.UPBOKLER,device.fast.line.{i}.upbokler,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.LastTransmittedDownstreamSignal,device.fast.line.{i}.last-transmitted-downstream-signal,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.LastTransmittedUpstreamSignal,device.fast.line.{i}.last-transmitted-upstream-signal,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.UPBOKLE,device.fast.line.{i}.upbokle,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.LineNumber,device.fast.line.{i}.line-number,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.UpstreamMaxBitRate,device.fast.line.{i}.upstream-max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.DownstreamMaxBitRate,device.fast.line.{i}.downstream-max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.UpstreamNoiseMargin,device.fast.line.{i}.upstream-noise-margin,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.DownstreamNoiseMargin,device.fast.line.{i}.downstream-noise-margin,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.UpstreamAttenuation,device.fast.line.{i}.upstream-attenuation,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.DownstreamAttenuation,device.fast.line.{i}.downstream-attenuation,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.UpstreamPower,device.fast.line.{i}.upstream-power,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.DownstreamPower,device.fast.line.{i}.downstream-power,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.SNRMRMCds,device.fast.line.{i}.snrmrm-cds,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.SNRMRMCus,device.fast.line.{i}.snrmrm-cus,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.BITSRMCpsds,device.fast.line.{i}.bitsrm-cpsds,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.BITSRMCpsus,device.fast.line.{i}.bitsrm-cpsus,Tabular-ReadOnly,int
+Device.FAST.Line.{i}.FEXTCANCELds,device.fast.line.{i}.fextcance-lds,Tabular-ReadOnly,boolean
+Device.FAST.Line.{i}.FEXTCANCELus,device.fast.line.{i}.fextcance-lus,Tabular-ReadOnly,boolean
+Device.FAST.Line.{i}.ETRds,device.fast.line.{i}.et-rds,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.ETRus,device.fast.line.{i}.et-rus,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.ATTETRds,device.fast.line.{i}.attet-rds,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.ATTETRus,device.fast.line.{i}.attet-rus,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.MINEFTR,device.fast.line.{i}.mineftr,Tabular-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.,device.fast.line.{i}.stats,ScalarObject,object
+Device.FAST.Line.{i}.Stats.BytesSent,device.fast.line.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.FAST.Line.{i}.Stats.BytesReceived,device.fast.line.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.FAST.Line.{i}.Stats.PacketsSent,device.fast.line.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.FAST.Line.{i}.Stats.PacketsReceived,device.fast.line.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.FAST.Line.{i}.Stats.ErrorsSent,device.fast.line.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.ErrorsReceived,device.fast.line.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.DiscardPacketsSent,device.fast.line.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.DiscardPacketsReceived,device.fast.line.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.TotalStart,device.fast.line.{i}.stats.total-start,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.ShowtimeStart,device.fast.line.{i}.stats.showtime-start,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtimeStart,device.fast.line.{i}.stats.last-showtime-start,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDayStart,device.fast.line.{i}.stats.current-day-start,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHourStart,device.fast.line.{i}.stats.quarter-hour-start,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.,device.fast.line.{i}.stats.total,ScalarObject,object
+Device.FAST.Line.{i}.Stats.Total.ErroredSecs,device.fast.line.{i}.stats.total.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.SeverelyErroredSecs,device.fast.line.{i}.stats.total.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.LOSS,device.fast.line.{i}.stats.total.loss,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.LORS,device.fast.line.{i}.stats.total.lors,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.UAS,device.fast.line.{i}.stats.total.uas,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.RTXUC,device.fast.line.{i}.stats.total.rtxuc,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.RTXTX,device.fast.line.{i}.stats.total.rtxtx,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.SuccessBSW,device.fast.line.{i}.stats.total.success-bsw,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.SuccessSRA,device.fast.line.{i}.stats.total.success-sra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.SuccessFRA,device.fast.line.{i}.stats.total.success-fra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.SuccessRPA,device.fast.line.{i}.stats.total.success-rpa,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Total.SuccessTIGA,device.fast.line.{i}.stats.total.success-tiga,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.,device.fast.line.{i}.stats.showtime,ScalarObject,object
+Device.FAST.Line.{i}.Stats.Showtime.ErroredSecs,device.fast.line.{i}.stats.showtime.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.SeverelyErroredSecs,device.fast.line.{i}.stats.showtime.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.LOSS,device.fast.line.{i}.stats.showtime.loss,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.LORS,device.fast.line.{i}.stats.showtime.lors,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.UAS,device.fast.line.{i}.stats.showtime.uas,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.RTXUC,device.fast.line.{i}.stats.showtime.rtxuc,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.RTXTX,device.fast.line.{i}.stats.showtime.rtxtx,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.SuccessBSW,device.fast.line.{i}.stats.showtime.success-bsw,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.SuccessSRA,device.fast.line.{i}.stats.showtime.success-sra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.SuccessFRA,device.fast.line.{i}.stats.showtime.success-fra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.SuccessRPA,device.fast.line.{i}.stats.showtime.success-rpa,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.Showtime.SuccessTIGA,device.fast.line.{i}.stats.showtime.success-tiga,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.,device.fast.line.{i}.stats.last-showtime,ScalarObject,object
+Device.FAST.Line.{i}.Stats.LastShowtime.ErroredSecs,device.fast.line.{i}.stats.last-showtime.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.SeverelyErroredSecs,device.fast.line.{i}.stats.last-showtime.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.LOSS,device.fast.line.{i}.stats.last-showtime.loss,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.LORS,device.fast.line.{i}.stats.last-showtime.lors,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.UAS,device.fast.line.{i}.stats.last-showtime.uas,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.RTXUC,device.fast.line.{i}.stats.last-showtime.rtxuc,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.RTXTX,device.fast.line.{i}.stats.last-showtime.rtxtx,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.SuccessBSW,device.fast.line.{i}.stats.last-showtime.success-bsw,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.SuccessSRA,device.fast.line.{i}.stats.last-showtime.success-sra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.SuccessFRA,device.fast.line.{i}.stats.last-showtime.success-fra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.SuccessRPA,device.fast.line.{i}.stats.last-showtime.success-rpa,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.LastShowtime.SuccessTIGA,device.fast.line.{i}.stats.last-showtime.success-tiga,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.,device.fast.line.{i}.stats.current-day,ScalarObject,object
+Device.FAST.Line.{i}.Stats.CurrentDay.ErroredSecs,device.fast.line.{i}.stats.current-day.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.SeverelyErroredSecs,device.fast.line.{i}.stats.current-day.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.LOSS,device.fast.line.{i}.stats.current-day.loss,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.LORS,device.fast.line.{i}.stats.current-day.lors,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.UAS,device.fast.line.{i}.stats.current-day.uas,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.RTXUC,device.fast.line.{i}.stats.current-day.rtxuc,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.RTXTX,device.fast.line.{i}.stats.current-day.rtxtx,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.SuccessBSW,device.fast.line.{i}.stats.current-day.success-bsw,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.SuccessSRA,device.fast.line.{i}.stats.current-day.success-sra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.SuccessFRA,device.fast.line.{i}.stats.current-day.success-fra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.SuccessRPA,device.fast.line.{i}.stats.current-day.success-rpa,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.CurrentDay.SuccessTIGA,device.fast.line.{i}.stats.current-day.success-tiga,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.,device.fast.line.{i}.stats.quarter-hour,ScalarObject,object
+Device.FAST.Line.{i}.Stats.QuarterHour.ErroredSecs,device.fast.line.{i}.stats.quarter-hour.errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.SeverelyErroredSecs,device.fast.line.{i}.stats.quarter-hour.severely-errored-secs,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.LOSS,device.fast.line.{i}.stats.quarter-hour.loss,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.LORS,device.fast.line.{i}.stats.quarter-hour.lors,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.UAS,device.fast.line.{i}.stats.quarter-hour.uas,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.RTXUC,device.fast.line.{i}.stats.quarter-hour.rtxuc,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.RTXTX,device.fast.line.{i}.stats.quarter-hour.rtxtx,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.SuccessBSW,device.fast.line.{i}.stats.quarter-hour.success-bsw,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.SuccessSRA,device.fast.line.{i}.stats.quarter-hour.success-sra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.SuccessFRA,device.fast.line.{i}.stats.quarter-hour.success-fra,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.SuccessRPA,device.fast.line.{i}.stats.quarter-hour.success-rpa,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.Stats.QuarterHour.SuccessTIGA,device.fast.line.{i}.stats.quarter-hour.success-tiga,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.,device.fast.line.{i}.test-params,ScalarObject,object
+Device.FAST.Line.{i}.TestParams.SNRGds,device.fast.line.{i}.test-params.snr-gds,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.SNRGus,device.fast.line.{i}.test-params.snr-gus,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.SNRpsds,device.fast.line.{i}.test-params.sn-rpsds,Scalar-ReadOnly,int
+Device.FAST.Line.{i}.TestParams.SNRpsus,device.fast.line.{i}.test-params.sn-rpsus,Scalar-ReadOnly,string
+Device.FAST.Line.{i}.TestParams.SNRMTds,device.fast.line.{i}.test-params.snrm-tds,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.SNRMTus,device.fast.line.{i}.test-params.snrm-tus,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.ACTINP,device.fast.line.{i}.test-params.actinp,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.NFEC,device.fast.line.{i}.test-params.nfec,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.RFEC,device.fast.line.{i}.test-params.rfec,Scalar-ReadOnly,int
+Device.FAST.Line.{i}.TestParams.UpstreamCurrRate,device.fast.line.{i}.test-params.upstream-curr-rate,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.DownstreamCurrRate,device.fast.line.{i}.test-params.downstream-curr-rate,Scalar-ReadOnly,unsignedInt
+Device.FAST.Line.{i}.TestParams.ACTINPREIN,device.fast.line.{i}.test-params.actinprein,Scalar-ReadOnly,unsignedInt
+Device.Optical.,device.optical,ScalarObject,object
+Device.Optical.InterfaceNumberOfEntries,device.optical.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Optical.Interface.{i}.,device.optical.interface.{i}.,TabularObject,object
+Device.Optical.Interface.{i}.Enable,device.optical.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.Optical.Interface.{i}.Status,device.optical.interface.{i}.status,Tabular-ReadOnly,string
+Device.Optical.Interface.{i}.Alias,device.optical.interface.{i}.alias,Tabular-ReadWrite,string
+Device.Optical.Interface.{i}.Name,device.optical.interface.{i}.name,Tabular-ReadOnly,string
+Device.Optical.Interface.{i}.LastChange,device.optical.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Optical.Interface.{i}.LowerLayers,device.optical.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Optical.Interface.{i}.Upstream,device.optical.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.Optical.Interface.{i}.OpticalSignalLevel,device.optical.interface.{i}.optical-signal-level,Tabular-ReadOnly,int
+Device.Optical.Interface.{i}.LowerOpticalThreshold,device.optical.interface.{i}.lower-optical-threshold,Tabular-ReadOnly,int
+Device.Optical.Interface.{i}.UpperOpticalThreshold,device.optical.interface.{i}.upper-optical-threshold,Tabular-ReadOnly,int
+Device.Optical.Interface.{i}.TransmitOpticalLevel,device.optical.interface.{i}.transmit-optical-level,Tabular-ReadOnly,int
+Device.Optical.Interface.{i}.LowerTransmitPowerThreshold,device.optical.interface.{i}.lower-transmit-power-threshold,Tabular-ReadOnly,int
+Device.Optical.Interface.{i}.UpperTransmitPowerThreshold,device.optical.interface.{i}.upper-transmit-power-threshold,Tabular-ReadOnly,int
+Device.Optical.Interface.{i}.Stats.,device.optical.interface.{i}.stats,ScalarObject,object
+Device.Optical.Interface.{i}.Stats.BytesSent,device.optical.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Optical.Interface.{i}.Stats.BytesReceived,device.optical.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Optical.Interface.{i}.Stats.PacketsSent,device.optical.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Optical.Interface.{i}.Stats.PacketsReceived,device.optical.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Optical.Interface.{i}.Stats.ErrorsSent,device.optical.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Optical.Interface.{i}.Stats.ErrorsReceived,device.optical.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Optical.Interface.{i}.Stats.DiscardPacketsSent,device.optical.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Optical.Interface.{i}.Stats.DiscardPacketsReceived,device.optical.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Cellular.,device.cellular,ScalarObject,object
+Device.Cellular.RoamingEnabled,device.cellular.roaming-enabled,Scalar-ReadWrite,boolean
+Device.Cellular.RoamingStatus,device.cellular.roaming-status,Scalar-ReadOnly,string
+Device.Cellular.InterfaceNumberOfEntries,device.cellular.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Cellular.AccessPointNumberOfEntries,device.cellular.access-point-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Cellular.Interface.{i}.,device.cellular.interface.{i}.,TabularObject,object
+Device.Cellular.Interface.{i}.Enable,device.cellular.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.Cellular.Interface.{i}.Status,device.cellular.interface.{i}.status,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.Alias,device.cellular.interface.{i}.alias,Tabular-ReadWrite,string
+Device.Cellular.Interface.{i}.Name,device.cellular.interface.{i}.name,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.LastChange,device.cellular.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Cellular.Interface.{i}.LowerLayers,device.cellular.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Cellular.Interface.{i}.Upstream,device.cellular.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.Cellular.Interface.{i}.IMEI,device.cellular.interface.{i}.imei,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.SupportedAccessTechnologies,device.cellular.interface.{i}.supported-access-technologies,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.PreferredAccessTechnology,device.cellular.interface.{i}.preferred-access-technology,Tabular-ReadWrite,string
+Device.Cellular.Interface.{i}.CurrentAccessTechnology,device.cellular.interface.{i}.current-access-technology,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.AvailableNetworks,device.cellular.interface.{i}.available-networks,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.NetworkRequested,device.cellular.interface.{i}.network-requested,Tabular-ReadWrite,string
+Device.Cellular.Interface.{i}.NetworkInUse,device.cellular.interface.{i}.network-in-use,Tabular-ReadOnly,string
+Device.Cellular.Interface.{i}.RSSI,device.cellular.interface.{i}.rssi,Tabular-ReadOnly,int
+Device.Cellular.Interface.{i}.UpstreamMaxBitRate,device.cellular.interface.{i}.upstream-max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.Cellular.Interface.{i}.DownstreamMaxBitRate,device.cellular.interface.{i}.downstream-max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.Cellular.Interface.{i}.USIM.,device.cellular.interface.{i}.usim,ScalarObject,object
+Device.Cellular.Interface.{i}.USIM.Status,device.cellular.interface.{i}.usim.status,Scalar-ReadOnly,string
+Device.Cellular.Interface.{i}.USIM.IMSI,device.cellular.interface.{i}.usim.imsi,Scalar-ReadOnly,string
+Device.Cellular.Interface.{i}.USIM.ICCID,device.cellular.interface.{i}.usim.iccid,Scalar-ReadOnly,string
+Device.Cellular.Interface.{i}.USIM.MSISDN,device.cellular.interface.{i}.usim.msisdn,Scalar-ReadOnly,string
+Device.Cellular.Interface.{i}.USIM.PINCheck,device.cellular.interface.{i}.usim.pin-check,Scalar-ReadWrite,string
+Device.Cellular.Interface.{i}.Stats.,device.cellular.interface.{i}.stats,ScalarObject,object
+Device.Cellular.Interface.{i}.Stats.BytesSent,device.cellular.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.BytesReceived,device.cellular.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.PacketsSent,device.cellular.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.PacketsReceived,device.cellular.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.ErrorsSent,device.cellular.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.ErrorsReceived,device.cellular.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.UnicastPacketsSent,device.cellular.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.UnicastPacketsReceived,device.cellular.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.DiscardPacketsSent,device.cellular.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.DiscardPacketsReceived,device.cellular.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.MulticastPacketsSent,device.cellular.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.MulticastPacketsReceived,device.cellular.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.BroadcastPacketsSent,device.cellular.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.BroadcastPacketsReceived,device.cellular.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.cellular.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Cellular.AccessPoint.{i}.,device.cellular.access-point.{i}.,TabularObject,object
+Device.Cellular.AccessPoint.{i}.Enable,device.cellular.access-point.{i}.enable,Tabular-ReadWrite,boolean
+Device.Cellular.AccessPoint.{i}.Alias,device.cellular.access-point.{i}.alias,Tabular-ReadWrite,string
+Device.Cellular.AccessPoint.{i}.APN,device.cellular.access-point.{i}.apn,Tabular-ReadWrite,string
+Device.Cellular.AccessPoint.{i}.Username,device.cellular.access-point.{i}.username,Tabular-ReadWrite,string
+Device.Cellular.AccessPoint.{i}.Proxy,device.cellular.access-point.{i}.proxy,Tabular-ReadWrite,string
+Device.Cellular.AccessPoint.{i}.ProxyPort,device.cellular.access-point.{i}.proxy-port,Tabular-ReadWrite,unsignedInt
+Device.Cellular.AccessPoint.{i}.Interface,device.cellular.access-point.{i}.interface,Tabular-ReadWrite,string
+Device.ATM.,device.atm,ScalarObject,object
+Device.ATM.LinkNumberOfEntries,device.atm.link-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.,device.atm.link.{i}.,TabularObject,object
+Device.ATM.Link.{i}.Enable,device.atm.link.{i}.enable,Tabular-ReadWrite,boolean
+Device.ATM.Link.{i}.Status,device.atm.link.{i}.status,Tabular-ReadOnly,string
+Device.ATM.Link.{i}.Alias,device.atm.link.{i}.alias,Tabular-ReadWrite,string
+Device.ATM.Link.{i}.Name,device.atm.link.{i}.name,Tabular-ReadOnly,string
+Device.ATM.Link.{i}.LastChange,device.atm.link.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.LowerLayers,device.atm.link.{i}.lower-layers,Tabular-ReadWrite,string
+Device.ATM.Link.{i}.LinkType,device.atm.link.{i}.link-type,Tabular-ReadWrite,string
+Device.ATM.Link.{i}.AutoConfig,device.atm.link.{i}.auto-config,Tabular-ReadOnly,boolean
+Device.ATM.Link.{i}.DestinationAddress,device.atm.link.{i}.destination-address,Tabular-ReadWrite,string
+Device.ATM.Link.{i}.Encapsulation,device.atm.link.{i}.encapsulation,Tabular-ReadWrite,string
+Device.ATM.Link.{i}.FCSPreserved,device.atm.link.{i}.fcs-preserved,Tabular-ReadWrite,boolean
+Device.ATM.Link.{i}.VCSearchList,device.atm.link.{i}.vc-search-list,Tabular-ReadWrite,string
+Device.ATM.Link.{i}.AAL,device.atm.link.{i}.aal,Tabular-ReadOnly,string
+Device.ATM.Link.{i}.Stats.,device.atm.link.{i}.stats,ScalarObject,object
+Device.ATM.Link.{i}.Stats.BytesSent,device.atm.link.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.BytesReceived,device.atm.link.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.PacketsSent,device.atm.link.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.PacketsReceived,device.atm.link.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.ErrorsSent,device.atm.link.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.ErrorsReceived,device.atm.link.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.UnicastPacketsSent,device.atm.link.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.UnicastPacketsReceived,device.atm.link.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.DiscardPacketsSent,device.atm.link.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.DiscardPacketsReceived,device.atm.link.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.MulticastPacketsSent,device.atm.link.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.MulticastPacketsReceived,device.atm.link.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.BroadcastPacketsSent,device.atm.link.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.BroadcastPacketsReceived,device.atm.link.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.ATM.Link.{i}.Stats.UnknownProtoPacketsReceived,device.atm.link.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.TransmittedBlocks,device.atm.link.{i}.stats.transmitted-blocks,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.ReceivedBlocks,device.atm.link.{i}.stats.received-blocks,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.CRCErrors,device.atm.link.{i}.stats.crc-errors,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.Stats.HECErrors,device.atm.link.{i}.stats.hec-errors,Scalar-ReadOnly,unsignedInt
+Device.ATM.Link.{i}.QoS.,device.atm.link.{i}.qo-s,ScalarObject,object
+Device.ATM.Link.{i}.QoS.QoSClass,device.atm.link.{i}.qo-s.qo-s-class,Scalar-ReadWrite,string
+Device.ATM.Link.{i}.QoS.PeakCellRate,device.atm.link.{i}.qo-s.peak-cell-rate,Scalar-ReadWrite,unsignedInt
+Device.ATM.Link.{i}.QoS.MaximumBurstSize,device.atm.link.{i}.qo-s.maximum-burst-size,Scalar-ReadWrite,unsignedInt
+Device.ATM.Link.{i}.QoS.SustainableCellRate,device.atm.link.{i}.qo-s.sustainable-cell-rate,Scalar-ReadWrite,unsignedInt
+Device.ATM.Diagnostics.,device.atm.diagnostics,ScalarObject,object
+Device.ATM.Diagnostics.F5Loopback.,device.atm.diagnostics.f5-loopback,ScalarObject,object
+Device.ATM.Diagnostics.F5Loopback.DiagnosticsState,device.atm.diagnostics.f5-loopback.diagnostics-state,Scalar-ReadWrite,string
+Device.ATM.Diagnostics.F5Loopback.Interface,device.atm.diagnostics.f5-loopback.interface,Scalar-ReadWrite,string
+Device.ATM.Diagnostics.F5Loopback.NumberOfRepetitions,device.atm.diagnostics.f5-loopback.number-of-repetitions,Scalar-ReadWrite,unsignedInt
+Device.ATM.Diagnostics.F5Loopback.Timeout,device.atm.diagnostics.f5-loopback.timeout,Scalar-ReadWrite,unsignedInt
+Device.ATM.Diagnostics.F5Loopback.SuccessCount,device.atm.diagnostics.f5-loopback.success-count,Scalar-ReadOnly,unsignedInt
+Device.ATM.Diagnostics.F5Loopback.FailureCount,device.atm.diagnostics.f5-loopback.failure-count,Scalar-ReadOnly,unsignedInt
+Device.ATM.Diagnostics.F5Loopback.AverageResponseTime,device.atm.diagnostics.f5-loopback.average-response-time,Scalar-ReadOnly,unsignedInt
+Device.ATM.Diagnostics.F5Loopback.MinimumResponseTime,device.atm.diagnostics.f5-loopback.minimum-response-time,Scalar-ReadOnly,unsignedInt
+Device.ATM.Diagnostics.F5Loopback.MaximumResponseTime,device.atm.diagnostics.f5-loopback.maximum-response-time,Scalar-ReadOnly,unsignedInt
+Device.PTM.,device.ptm,ScalarObject,object
+Device.PTM.LinkNumberOfEntries,device.ptm.link-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.PTM.Link.{i}.,device.ptm.link.{i}.,TabularObject,object
+Device.PTM.Link.{i}.Enable,device.ptm.link.{i}.enable,Tabular-ReadWrite,boolean
+Device.PTM.Link.{i}.Status,device.ptm.link.{i}.status,Tabular-ReadOnly,string
+Device.PTM.Link.{i}.Alias,device.ptm.link.{i}.alias,Tabular-ReadWrite,string
+Device.PTM.Link.{i}.Name,device.ptm.link.{i}.name,Tabular-ReadOnly,string
+Device.PTM.Link.{i}.LastChange,device.ptm.link.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.PTM.Link.{i}.LowerLayers,device.ptm.link.{i}.lower-layers,Tabular-ReadWrite,string
+Device.PTM.Link.{i}.MACAddress,device.ptm.link.{i}.mac-address,Tabular-ReadOnly,string
+Device.PTM.Link.{i}.Stats.,device.ptm.link.{i}.stats,ScalarObject,object
+Device.PTM.Link.{i}.Stats.BytesSent,device.ptm.link.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.BytesReceived,device.ptm.link.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.PacketsSent,device.ptm.link.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.PacketsReceived,device.ptm.link.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.ErrorsSent,device.ptm.link.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.PTM.Link.{i}.Stats.ErrorsReceived,device.ptm.link.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.PTM.Link.{i}.Stats.UnicastPacketsSent,device.ptm.link.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.UnicastPacketsReceived,device.ptm.link.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.DiscardPacketsSent,device.ptm.link.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.PTM.Link.{i}.Stats.DiscardPacketsReceived,device.ptm.link.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.PTM.Link.{i}.Stats.MulticastPacketsSent,device.ptm.link.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.MulticastPacketsReceived,device.ptm.link.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.BroadcastPacketsSent,device.ptm.link.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.BroadcastPacketsReceived,device.ptm.link.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.PTM.Link.{i}.Stats.UnknownProtoPacketsReceived,device.ptm.link.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.,device.ethernet,ScalarObject,object
+Device.Ethernet.InterfaceNumberOfEntries,device.ethernet.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.LinkNumberOfEntries,device.ethernet.link-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.VLANTerminationNumberOfEntries,device.ethernet.vlan-termination-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.RMONStatsNumberOfEntries,device.ethernet.rmon-stats-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.LAGNumberOfEntries,device.ethernet.lag-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.,device.ethernet.interface.{i}.,TabularObject,object
+Device.Ethernet.Interface.{i}.Enable,device.ethernet.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ethernet.Interface.{i}.Status,device.ethernet.interface.{i}.status,Tabular-ReadOnly,string
+Device.Ethernet.Interface.{i}.Alias,device.ethernet.interface.{i}.alias,Tabular-ReadWrite,string
+Device.Ethernet.Interface.{i}.Name,device.ethernet.interface.{i}.name,Tabular-ReadOnly,string
+Device.Ethernet.Interface.{i}.LastChange,device.ethernet.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.LowerLayers,device.ethernet.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Ethernet.Interface.{i}.Upstream,device.ethernet.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.Ethernet.Interface.{i}.MACAddress,device.ethernet.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.Ethernet.Interface.{i}.MaxBitRate,device.ethernet.interface.{i}.max-bit-rate,Tabular-ReadWrite,int
+Device.Ethernet.Interface.{i}.CurrentBitRate,device.ethernet.interface.{i}.current-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.DuplexMode,device.ethernet.interface.{i}.duplex-mode,Tabular-ReadWrite,string
+Device.Ethernet.Interface.{i}.EEECapability,device.ethernet.interface.{i}.eee-capability,Tabular-ReadOnly,boolean
+Device.Ethernet.Interface.{i}.EEEEnable,device.ethernet.interface.{i}.eee-enable,Tabular-ReadWrite,boolean
+Device.Ethernet.Interface.{i}.Stats.,device.ethernet.interface.{i}.stats,ScalarObject,object
+Device.Ethernet.Interface.{i}.Stats.BytesSent,device.ethernet.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.BytesReceived,device.ethernet.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.PacketsSent,device.ethernet.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.PacketsReceived,device.ethernet.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.ErrorsSent,device.ethernet.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.Stats.ErrorsReceived,device.ethernet.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.Stats.UnicastPacketsSent,device.ethernet.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.UnicastPacketsReceived,device.ethernet.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.DiscardPacketsSent,device.ethernet.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.Stats.DiscardPacketsReceived,device.ethernet.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Interface.{i}.Stats.MulticastPacketsSent,device.ethernet.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.MulticastPacketsReceived,device.ethernet.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.BroadcastPacketsSent,device.ethernet.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.BroadcastPacketsReceived,device.ethernet.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.ethernet.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Link.{i}.,device.ethernet.link.{i}.,TabularObject,object
+Device.Ethernet.Link.{i}.Enable,device.ethernet.link.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ethernet.Link.{i}.Status,device.ethernet.link.{i}.status,Tabular-ReadOnly,string
+Device.Ethernet.Link.{i}.Alias,device.ethernet.link.{i}.alias,Tabular-ReadWrite,string
+Device.Ethernet.Link.{i}.Name,device.ethernet.link.{i}.name,Tabular-ReadOnly,string
+Device.Ethernet.Link.{i}.LastChange,device.ethernet.link.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.Link.{i}.LowerLayers,device.ethernet.link.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Ethernet.Link.{i}.MACAddress,device.ethernet.link.{i}.mac-address,Tabular-ReadOnly,string
+Device.Ethernet.Link.{i}.PriorityTagging,device.ethernet.link.{i}.priority-tagging,Tabular-ReadWrite,boolean
+Device.Ethernet.Link.{i}.Stats.,device.ethernet.link.{i}.stats,ScalarObject,object
+Device.Ethernet.Link.{i}.Stats.BytesSent,device.ethernet.link.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.BytesReceived,device.ethernet.link.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.PacketsSent,device.ethernet.link.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.PacketsReceived,device.ethernet.link.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.ErrorsSent,device.ethernet.link.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Link.{i}.Stats.ErrorsReceived,device.ethernet.link.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Link.{i}.Stats.UnicastPacketsSent,device.ethernet.link.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.UnicastPacketsReceived,device.ethernet.link.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.DiscardPacketsSent,device.ethernet.link.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Link.{i}.Stats.DiscardPacketsReceived,device.ethernet.link.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.Link.{i}.Stats.MulticastPacketsSent,device.ethernet.link.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.MulticastPacketsReceived,device.ethernet.link.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.BroadcastPacketsSent,device.ethernet.link.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.BroadcastPacketsReceived,device.ethernet.link.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.Link.{i}.Stats.UnknownProtoPacketsReceived,device.ethernet.link.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.VLANTermination.{i}.,device.ethernet.vlan-termination.{i}.,TabularObject,object
+Device.Ethernet.VLANTermination.{i}.Enable,device.ethernet.vlan-termination.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ethernet.VLANTermination.{i}.Status,device.ethernet.vlan-termination.{i}.status,Tabular-ReadOnly,string
+Device.Ethernet.VLANTermination.{i}.Alias,device.ethernet.vlan-termination.{i}.alias,Tabular-ReadWrite,string
+Device.Ethernet.VLANTermination.{i}.Name,device.ethernet.vlan-termination.{i}.name,Tabular-ReadOnly,string
+Device.Ethernet.VLANTermination.{i}.LastChange,device.ethernet.vlan-termination.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.VLANTermination.{i}.LowerLayers,device.ethernet.vlan-termination.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Ethernet.VLANTermination.{i}.VLANID,device.ethernet.vlan-termination.{i}.vlanid,Tabular-ReadWrite,unsignedInt
+Device.Ethernet.VLANTermination.{i}.TPID,device.ethernet.vlan-termination.{i}.tpid,Tabular-ReadWrite,unsignedInt
+Device.Ethernet.VLANTermination.{i}.Stats.,device.ethernet.vlan-termination.{i}.stats,ScalarObject,object
+Device.Ethernet.VLANTermination.{i}.Stats.BytesSent,device.ethernet.vlan-termination.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.BytesReceived,device.ethernet.vlan-termination.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.PacketsSent,device.ethernet.vlan-termination.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.PacketsReceived,device.ethernet.vlan-termination.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.ErrorsSent,device.ethernet.vlan-termination.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.VLANTermination.{i}.Stats.ErrorsReceived,device.ethernet.vlan-termination.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.VLANTermination.{i}.Stats.UnicastPacketsSent,device.ethernet.vlan-termination.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.UnicastPacketsReceived,device.ethernet.vlan-termination.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.DiscardPacketsSent,device.ethernet.vlan-termination.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.VLANTermination.{i}.Stats.DiscardPacketsReceived,device.ethernet.vlan-termination.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.VLANTermination.{i}.Stats.MulticastPacketsSent,device.ethernet.vlan-termination.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.MulticastPacketsReceived,device.ethernet.vlan-termination.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.BroadcastPacketsSent,device.ethernet.vlan-termination.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.BroadcastPacketsReceived,device.ethernet.vlan-termination.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.VLANTermination.{i}.Stats.UnknownProtoPacketsReceived,device.ethernet.vlan-termination.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.RMONStats.{i}.,device.ethernet.rmon-stats.{i}.,TabularObject,object
+Device.Ethernet.RMONStats.{i}.Enable,device.ethernet.rmon-stats.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ethernet.RMONStats.{i}.Status,device.ethernet.rmon-stats.{i}.status,Tabular-ReadOnly,string
+Device.Ethernet.RMONStats.{i}.Alias,device.ethernet.rmon-stats.{i}.alias,Tabular-ReadWrite,string
+Device.Ethernet.RMONStats.{i}.Name,device.ethernet.rmon-stats.{i}.name,Tabular-ReadOnly,string
+Device.Ethernet.RMONStats.{i}.Interface,device.ethernet.rmon-stats.{i}.interface,Tabular-ReadWrite,string
+Device.Ethernet.RMONStats.{i}.VLANID,device.ethernet.rmon-stats.{i}.vlanid,Tabular-ReadWrite,unsignedInt
+Device.Ethernet.RMONStats.{i}.Queue,device.ethernet.rmon-stats.{i}.queue,Tabular-ReadWrite,string
+Device.Ethernet.RMONStats.{i}.AllQueues,device.ethernet.rmon-stats.{i}.all-queues,Tabular-ReadWrite,boolean
+Device.Ethernet.RMONStats.{i}.DropEvents,device.ethernet.rmon-stats.{i}.drop-events,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.RMONStats.{i}.Bytes,device.ethernet.rmon-stats.{i}.bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.Packets,device.ethernet.rmon-stats.{i}.packets,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.BroadcastPackets,device.ethernet.rmon-stats.{i}.broadcast-packets,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.MulticastPackets,device.ethernet.rmon-stats.{i}.multicast-packets,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.CRCErroredPackets,device.ethernet.rmon-stats.{i}.crc-errored-packets,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.RMONStats.{i}.UndersizePackets,device.ethernet.rmon-stats.{i}.undersize-packets,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.RMONStats.{i}.OversizePackets,device.ethernet.rmon-stats.{i}.oversize-packets,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.RMONStats.{i}.Packets64Bytes,device.ethernet.rmon-stats.{i}.packets64-bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.Packets65to127Bytes,device.ethernet.rmon-stats.{i}.packets65to127-bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.Packets128to255Bytes,device.ethernet.rmon-stats.{i}.packets128to255-bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.Packets256to511Bytes,device.ethernet.rmon-stats.{i}.packets256to511-bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.Packets512to1023Bytes,device.ethernet.rmon-stats.{i}.packets512to1023-bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.RMONStats.{i}.Packets1024to1518Bytes,device.ethernet.rmon-stats.{i}.packets1024to1518-bytes,Tabular-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.,device.ethernet.lag.{i}.,TabularObject,object
+Device.Ethernet.LAG.{i}.Enable,device.ethernet.lag.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ethernet.LAG.{i}.Status,device.ethernet.lag.{i}.status,Tabular-ReadOnly,string
+Device.Ethernet.LAG.{i}.Alias,device.ethernet.lag.{i}.alias,Tabular-ReadWrite,string
+Device.Ethernet.LAG.{i}.Name,device.ethernet.lag.{i}.name,Tabular-ReadOnly,string
+Device.Ethernet.LAG.{i}.LastChange,device.ethernet.lag.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Ethernet.LAG.{i}.LowerLayers,device.ethernet.lag.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Ethernet.LAG.{i}.MACAddress,device.ethernet.lag.{i}.mac-address,Tabular-ReadWrite,string
+Device.Ethernet.LAG.{i}.Stats.,device.ethernet.lag.{i}.stats,ScalarObject,object
+Device.Ethernet.LAG.{i}.Stats.BytesSent,device.ethernet.lag.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.BytesReceived,device.ethernet.lag.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.PacketsSent,device.ethernet.lag.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.PacketsReceived,device.ethernet.lag.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.ErrorsSent,device.ethernet.lag.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.LAG.{i}.Stats.ErrorsReceived,device.ethernet.lag.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.LAG.{i}.Stats.UnicastPacketsSent,device.ethernet.lag.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.UnicastPacketsReceived,device.ethernet.lag.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.DiscardPacketsSent,device.ethernet.lag.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.LAG.{i}.Stats.DiscardPacketsReceived,device.ethernet.lag.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ethernet.LAG.{i}.Stats.MulticastPacketsSent,device.ethernet.lag.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.MulticastPacketsReceived,device.ethernet.lag.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.BroadcastPacketsSent,device.ethernet.lag.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.BroadcastPacketsReceived,device.ethernet.lag.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ethernet.LAG.{i}.Stats.UnknownProtoPacketsReceived,device.ethernet.lag.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.USB.,device.usb,ScalarObject,object
+Device.USB.InterfaceNumberOfEntries,device.usb.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.USB.PortNumberOfEntries,device.usb.port-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.,device.usb.interface.{i}.,TabularObject,object
+Device.USB.Interface.{i}.Enable,device.usb.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.USB.Interface.{i}.Status,device.usb.interface.{i}.status,Tabular-ReadOnly,string
+Device.USB.Interface.{i}.Alias,device.usb.interface.{i}.alias,Tabular-ReadWrite,string
+Device.USB.Interface.{i}.Name,device.usb.interface.{i}.name,Tabular-ReadOnly,string
+Device.USB.Interface.{i}.LastChange,device.usb.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.LowerLayers,device.usb.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.USB.Interface.{i}.Upstream,device.usb.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.USB.Interface.{i}.MACAddress,device.usb.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.USB.Interface.{i}.MaxBitRate,device.usb.interface.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.Port,device.usb.interface.{i}.port,Tabular-ReadOnly,string
+Device.USB.Interface.{i}.Stats.,device.usb.interface.{i}.stats,ScalarObject,object
+Device.USB.Interface.{i}.Stats.BytesSent,device.usb.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.BytesReceived,device.usb.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.PacketsSent,device.usb.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.PacketsReceived,device.usb.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.ErrorsSent,device.usb.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.Stats.ErrorsReceived,device.usb.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.Stats.UnicastPacketsSent,device.usb.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.UnicastPacketsReceived,device.usb.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.DiscardPacketsSent,device.usb.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.Stats.DiscardPacketsReceived,device.usb.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.USB.Interface.{i}.Stats.MulticastPacketsSent,device.usb.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.MulticastPacketsReceived,device.usb.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.BroadcastPacketsSent,device.usb.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.BroadcastPacketsReceived,device.usb.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.USB.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.usb.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.USB.Port.{i}.,device.usb.port.{i}.,TabularObject,object
+Device.USB.Port.{i}.Alias,device.usb.port.{i}.alias,Tabular-ReadWrite,string
+Device.USB.Port.{i}.Name,device.usb.port.{i}.name,Tabular-ReadOnly,string
+Device.USB.Port.{i}.Standard,device.usb.port.{i}.standard,Tabular-ReadOnly,string
+Device.USB.Port.{i}.Type,device.usb.port.{i}.type,Tabular-ReadOnly,string
+Device.USB.Port.{i}.Receptacle,device.usb.port.{i}.receptacle,Tabular-ReadOnly,string
+Device.USB.Port.{i}.Rate,device.usb.port.{i}.rate,Tabular-ReadOnly,string
+Device.USB.Port.{i}.Power,device.usb.port.{i}.power,Tabular-ReadOnly,string
+Device.USB.USBHosts.,device.usb.usb-hosts,ScalarObject,object
+Device.USB.USBHosts.HostNumberOfEntries,device.usb.usb-hosts.host-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.,device.usb.usb-hosts.host.{i}.,TabularObject,object
+Device.USB.USBHosts.Host.{i}.Alias,device.usb.usb-hosts.host.{i}.alias,Tabular-ReadWrite,string
+Device.USB.USBHosts.Host.{i}.Enable,device.usb.usb-hosts.host.{i}.enable,Tabular-ReadWrite,boolean
+Device.USB.USBHosts.Host.{i}.Name,device.usb.usb-hosts.host.{i}.name,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Type,device.usb.usb-hosts.host.{i}.type,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.PowerManagementEnable,device.usb.usb-hosts.host.{i}.power-management-enable,Tabular-ReadWrite,boolean
+Device.USB.USBHosts.Host.{i}.USBVersion,device.usb.usb-hosts.host.{i}.usb-version,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.DeviceNumberOfEntries,device.usb.usb-hosts.host.{i}.device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.,device.usb.usb-hosts.host.{i}.device.{i}.,TabularObject,object
+Device.USB.USBHosts.Host.{i}.Device.{i}.DeviceNumber,device.usb.usb-hosts.host.{i}.device.{i}.device-number,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.USBVersion,device.usb.usb-hosts.host.{i}.device.{i}.usb-version,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.DeviceClass,device.usb.usb-hosts.host.{i}.device.{i}.device-class,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.DeviceSubClass,device.usb.usb-hosts.host.{i}.device.{i}.device-sub-class,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.DeviceVersion,device.usb.usb-hosts.host.{i}.device.{i}.device-version,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.DeviceProtocol,device.usb.usb-hosts.host.{i}.device.{i}.device-protocol,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.ProductID,device.usb.usb-hosts.host.{i}.device.{i}.product-id,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.VendorID,device.usb.usb-hosts.host.{i}.device.{i}.vendor-id,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.Manufacturer,device.usb.usb-hosts.host.{i}.device.{i}.manufacturer,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.ProductClass,device.usb.usb-hosts.host.{i}.device.{i}.product-class,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.SerialNumber,device.usb.usb-hosts.host.{i}.device.{i}.serial-number,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.Port,device.usb.usb-hosts.host.{i}.device.{i}.port,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.USBPort,device.usb.usb-hosts.host.{i}.device.{i}.usb-port,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.Rate,device.usb.usb-hosts.host.{i}.device.{i}.rate,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.Parent,device.usb.usb-hosts.host.{i}.device.{i}.parent,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.MaxChildren,device.usb.usb-hosts.host.{i}.device.{i}.max-children,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.IsSuspended,device.usb.usb-hosts.host.{i}.device.{i}.is-suspended,Tabular-ReadOnly,boolean
+Device.USB.USBHosts.Host.{i}.Device.{i}.IsSelfPowered,device.usb.usb-hosts.host.{i}.device.{i}.is-self-powered,Tabular-ReadOnly,boolean
+Device.USB.USBHosts.Host.{i}.Device.{i}.ConfigurationNumberOfEntries,device.usb.usb-hosts.host.{i}.device.{i}.configuration-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.,TabularObject,object
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.ConfigurationNumber,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.configuration-number,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.InterfaceNumberOfEntries,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.interface-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.Interface.{i}.,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.interface.{i}.,TabularObject,object
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.Interface.{i}.InterfaceNumber,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.interface.{i}.interface-number,Tabular-ReadOnly,unsignedInt
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.Interface.{i}.InterfaceClass,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.interface.{i}.interface-class,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.Interface.{i}.InterfaceSubClass,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.interface.{i}.interface-sub-class,Tabular-ReadOnly,string
+Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}.Interface.{i}.InterfaceProtocol,device.usb.usb-hosts.host.{i}.device.{i}.configuration.{i}.interface.{i}.interface-protocol,Tabular-ReadOnly,string
+Device.HPNA.,device.hpna,ScalarObject,object
+Device.HPNA.InterfaceNumberOfEntries,device.hpna.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.,device.hpna.interface.{i}.,TabularObject,object
+Device.HPNA.Interface.{i}.Enable,device.hpna.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.HPNA.Interface.{i}.Status,device.hpna.interface.{i}.status,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.Alias,device.hpna.interface.{i}.alias,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.Name,device.hpna.interface.{i}.name,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.LastChange,device.hpna.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.LowerLayers,device.hpna.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.Upstream,device.hpna.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.HPNA.Interface.{i}.MACAddress,device.hpna.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.FirmwareVersion,device.hpna.interface.{i}.firmware-version,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.NodeID,device.hpna.interface.{i}.node-id,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.IsMaster,device.hpna.interface.{i}.is-master,Tabular-ReadOnly,boolean
+Device.HPNA.Interface.{i}.Synced,device.hpna.interface.{i}.synced,Tabular-ReadOnly,boolean
+Device.HPNA.Interface.{i}.TotalSyncTime,device.hpna.interface.{i}.total-sync-time,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.MaxBitRate,device.hpna.interface.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.NetworkUtilization,device.hpna.interface.{i}.network-utilization,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.PossibleConnectionTypes,device.hpna.interface.{i}.possible-connection-types,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.ConnectionType,device.hpna.interface.{i}.connection-type,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.PossibleSpectralModes,device.hpna.interface.{i}.possible-spectral-modes,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.SpectralMode,device.hpna.interface.{i}.spectral-mode,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.MTU,device.hpna.interface.{i}.mtu,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.NoiseMargin,device.hpna.interface.{i}.noise-margin,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.DefaultNonLARQPER,device.hpna.interface.{i}.default-non-larqper,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.LARQEnable,device.hpna.interface.{i}.larq-enable,Tabular-ReadWrite,boolean
+Device.HPNA.Interface.{i}.MinMulticastRate,device.hpna.interface.{i}.min-multicast-rate,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.NegMulticastRate,device.hpna.interface.{i}.neg-multicast-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.MasterSelectionMode,device.hpna.interface.{i}.master-selection-mode,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.AssociatedDeviceNumberOfEntries,device.hpna.interface.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.Stats.,device.hpna.interface.{i}.stats,ScalarObject,object
+Device.HPNA.Interface.{i}.Stats.BytesSent,device.hpna.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.BytesReceived,device.hpna.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.PacketsSent,device.hpna.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.PacketsReceived,device.hpna.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.ErrorsSent,device.hpna.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.Stats.ErrorsReceived,device.hpna.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.Stats.UnicastPacketsSent,device.hpna.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.UnicastPacketsReceived,device.hpna.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.DiscardPacketsSent,device.hpna.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.Stats.DiscardPacketsReceived,device.hpna.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.Stats.MulticastPacketsSent,device.hpna.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.MulticastPacketsReceived,device.hpna.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.BroadcastPacketsSent,device.hpna.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.BroadcastPacketsReceived,device.hpna.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.HPNA.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.hpna.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.QoS.,device.hpna.interface.{i}.qo-s,ScalarObject,object
+Device.HPNA.Interface.{i}.QoS.FlowSpecNumberOfEntries,device.hpna.interface.{i}.qo-s.flow-spec-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.,device.hpna.interface.{i}.qo-s.flow-spec.{i}.,TabularObject,object
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Enable,device.hpna.interface.{i}.qo-s.flow-spec.{i}.enable,Tabular-ReadWrite,boolean
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Status,device.hpna.interface.{i}.qo-s.flow-spec.{i}.status,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Alias,device.hpna.interface.{i}.qo-s.flow-spec.{i}.alias,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.TrafficClasses,device.hpna.interface.{i}.qo-s.flow-spec.{i}.traffic-classes,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.FlowType,device.hpna.interface.{i}.qo-s.flow-spec.{i}.flow-type,Tabular-ReadWrite,string
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Priority,device.hpna.interface.{i}.qo-s.flow-spec.{i}.priority,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Latency,device.hpna.interface.{i}.qo-s.flow-spec.{i}.latency,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Jitter,device.hpna.interface.{i}.qo-s.flow-spec.{i}.jitter,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.PacketSize,device.hpna.interface.{i}.qo-s.flow-spec.{i}.packet-size,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.MinRate,device.hpna.interface.{i}.qo-s.flow-spec.{i}.min-rate,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.AvgRate,device.hpna.interface.{i}.qo-s.flow-spec.{i}.avg-rate,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.MaxRate,device.hpna.interface.{i}.qo-s.flow-spec.{i}.max-rate,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.PER,device.hpna.interface.{i}.qo-s.flow-spec.{i}.per,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.QoS.FlowSpec.{i}.Timeout,device.hpna.interface.{i}.qo-s.flow-spec.{i}.timeout,Tabular-ReadWrite,unsignedInt
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.,device.hpna.interface.{i}.associated-device.{i}.,TabularObject,object
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.MACAddress,device.hpna.interface.{i}.associated-device.{i}.mac-address,Tabular-ReadOnly,string
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.NodeID,device.hpna.interface.{i}.associated-device.{i}.node-id,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.IsMaster,device.hpna.interface.{i}.associated-device.{i}.is-master,Tabular-ReadOnly,boolean
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.Synced,device.hpna.interface.{i}.associated-device.{i}.synced,Tabular-ReadOnly,boolean
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.TotalSyncTime,device.hpna.interface.{i}.associated-device.{i}.total-sync-time,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.MaxBitRate,device.hpna.interface.{i}.associated-device.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.PHYDiagnosticsEnable,device.hpna.interface.{i}.associated-device.{i}.phy-diagnostics-enable,Tabular-ReadWrite,boolean
+Device.HPNA.Interface.{i}.AssociatedDevice.{i}.Active,device.hpna.interface.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.HPNA.Diagnostics.,device.hpna.diagnostics,ScalarObject,object
+Device.HPNA.Diagnostics.PHYThroughput.,device.hpna.diagnostics.phy-throughput,ScalarObject,object
+Device.HPNA.Diagnostics.PHYThroughput.DiagnosticsState,device.hpna.diagnostics.phy-throughput.diagnostics-state,Scalar-ReadWrite,string
+Device.HPNA.Diagnostics.PHYThroughput.Interface,device.hpna.diagnostics.phy-throughput.interface,Scalar-ReadWrite,string
+Device.HPNA.Diagnostics.PHYThroughput.NumPacketsInBurst,device.hpna.diagnostics.phy-throughput.num-packets-in-burst,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.BurstInterval,device.hpna.diagnostics.phy-throughput.burst-interval,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.TestPacketPayloadLength,device.hpna.diagnostics.phy-throughput.test-packet-payload-length,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.PayloadEncoding,device.hpna.diagnostics.phy-throughput.payload-encoding,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.PayloadDataGen,device.hpna.diagnostics.phy-throughput.payload-data-gen,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.PayloadType,device.hpna.diagnostics.phy-throughput.payload-type,Scalar-ReadWrite,string
+Device.HPNA.Diagnostics.PHYThroughput.PriorityLevel,device.hpna.diagnostics.phy-throughput.priority-level,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.ResultNumberOfEntries,device.hpna.diagnostics.phy-throughput.result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.,device.hpna.diagnostics.phy-throughput.result.{i}.,TabularObject,object
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.SrcMACAddress,device.hpna.diagnostics.phy-throughput.result.{i}.src-mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.DestMACAddress,device.hpna.diagnostics.phy-throughput.result.{i}.dest-mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.PHYRate,device.hpna.diagnostics.phy-throughput.result.{i}.phy-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.BaudRate,device.hpna.diagnostics.phy-throughput.result.{i}.baud-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.SNR,device.hpna.diagnostics.phy-throughput.result.{i}.snr,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.PacketsReceived,device.hpna.diagnostics.phy-throughput.result.{i}.packets-received,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PHYThroughput.Result.{i}.Attenuation,device.hpna.diagnostics.phy-throughput.result.{i}.attenuation,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.,device.hpna.diagnostics.performance-monitoring,ScalarObject,object
+Device.HPNA.Diagnostics.PerformanceMonitoring.DiagnosticsState,device.hpna.diagnostics.performance-monitoring.diagnostics-state,Scalar-ReadWrite,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.Interface,device.hpna.diagnostics.performance-monitoring.interface,Scalar-ReadWrite,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.SampleInterval,device.hpna.diagnostics.performance-monitoring.sample-interval,Scalar-ReadWrite,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.,device.hpna.diagnostics.performance-monitoring.nodes,ScalarObject,object
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.CurrentStart,device.hpna.diagnostics.performance-monitoring.nodes.current-start,Scalar-ReadOnly,dateTime
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.CurrentEnd,device.hpna.diagnostics.performance-monitoring.nodes.current-end,Scalar-ReadOnly,dateTime
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.NodeNumberOfEntries,device.hpna.diagnostics.performance-monitoring.nodes.node-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.,TabularObject,object
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MACAddress,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BytesSent,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.bytes-sent,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BytesReceived,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.bytes-received,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsSent,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-sent,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsReceived,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-received,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BroadcastPacketsSent,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.broadcast-packets-sent,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BroadcastPacketsReceived,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.broadcast-packets-received,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MulticastPacketsSent,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.multicast-packets-sent,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MulticastPacketsReceived,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.multicast-packets-received,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsCrcErrored,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-crc-errored,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsCrcErroredHost,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-crc-errored-host,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsShortErrored,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-short-errored,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsShortErroredHost,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-short-errored-host,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.RxPacketsDropped,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.rx-packets-dropped,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.TxPacketsDropped,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.tx-packets-dropped,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.ControlRequestLocal,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.control-request-local,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.ControlReplyLocal,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.control-reply-local,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.ControlRequestRemote,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.control-request-remote,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.ControlReplyRemote,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.control-reply-remote,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsSentWire,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-sent-wire,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BroadcastPacketsSentWire,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.broadcast-packets-sent-wire,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MulticastPacketsSentWire,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.multicast-packets-sent-wire,Tabular-ReadOnly,unsignedLong
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsInternalControl,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-internal-control,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BroadcastPacketsInternalControl,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.broadcast-packets-internal-control,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsReceivedQueued,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-received-queued,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsReceivedForwardUnknown,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.packets-received-forward-unknown,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.NodeUtilization,device.hpna.diagnostics.performance-monitoring.nodes.node.{i}.node-utilization,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.,device.hpna.diagnostics.performance-monitoring.channels,ScalarObject,object
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.TimeStamp,device.hpna.diagnostics.performance-monitoring.channels.time-stamp,Scalar-ReadOnly,dateTime
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.ChannelNumberOfEntries,device.hpna.diagnostics.performance-monitoring.channels.channel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.,TabularObject,object
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.HostSrcMACAddress,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.host-src-mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.HostDestMACAddress,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.host-dest-mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.HPNASrcMACAddress,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.hpna-src-mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.HPNADestMACAddress,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.hpna-dest-mac-address,Tabular-ReadOnly,string
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.PHYRate,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.phy-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.BaudRate,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.baud-rate,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.SNR,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.snr,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.PacketsSent,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.packets-sent,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.PacketsReceived,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.packets-received,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.LARQPacketsReceived,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.larq-packets-received,Tabular-ReadOnly,unsignedInt
+Device.HPNA.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.FlowSpec,device.hpna.diagnostics.performance-monitoring.channels.channel.{i}.flow-spec,Tabular-ReadOnly,string
+Device.MoCA.,device.mo-ca,ScalarObject,object
+Device.MoCA.InterfaceNumberOfEntries,device.mo-ca.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.,device.mo-ca.interface.{i}.,TabularObject,object
+Device.MoCA.Interface.{i}.Enable,device.mo-ca.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.MoCA.Interface.{i}.Status,device.mo-ca.interface.{i}.status,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.Alias,device.mo-ca.interface.{i}.alias,Tabular-ReadWrite,string
+Device.MoCA.Interface.{i}.Name,device.mo-ca.interface.{i}.name,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.LastChange,device.mo-ca.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.LowerLayers,device.mo-ca.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.MoCA.Interface.{i}.Upstream,device.mo-ca.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.MoCA.Interface.{i}.MACAddress,device.mo-ca.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.FirmwareVersion,device.mo-ca.interface.{i}.firmware-version,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.MaxBitRate,device.mo-ca.interface.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.MaxIngressBW,device.mo-ca.interface.{i}.max-ingress-bw,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.MaxEgressBW,device.mo-ca.interface.{i}.max-egress-bw,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.HighestVersion,device.mo-ca.interface.{i}.highest-version,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.CurrentVersion,device.mo-ca.interface.{i}.current-version,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.NetworkCoordinator,device.mo-ca.interface.{i}.network-coordinator,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.NodeID,device.mo-ca.interface.{i}.node-id,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.MaxNodes,device.mo-ca.interface.{i}.max-nodes,Tabular-ReadOnly,boolean
+Device.MoCA.Interface.{i}.PreferredNC,device.mo-ca.interface.{i}.preferred-nc,Tabular-ReadWrite,boolean
+Device.MoCA.Interface.{i}.BackupNC,device.mo-ca.interface.{i}.backup-nc,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.PrivacyEnabledSetting,device.mo-ca.interface.{i}.privacy-enabled-setting,Tabular-ReadWrite,boolean
+Device.MoCA.Interface.{i}.PrivacyEnabled,device.mo-ca.interface.{i}.privacy-enabled,Tabular-ReadOnly,boolean
+Device.MoCA.Interface.{i}.FreqCapabilityMask,device.mo-ca.interface.{i}.freq-capability-mask,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.FreqCurrentMaskSetting,device.mo-ca.interface.{i}.freq-current-mask-setting,Tabular-ReadWrite,string
+Device.MoCA.Interface.{i}.FreqCurrentMask,device.mo-ca.interface.{i}.freq-current-mask,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.CurrentOperFreq,device.mo-ca.interface.{i}.current-oper-freq,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.LastOperFreq,device.mo-ca.interface.{i}.last-oper-freq,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.TxPowerLimit,device.mo-ca.interface.{i}.tx-power-limit,Tabular-ReadWrite,unsignedInt
+Device.MoCA.Interface.{i}.PowerCntlPhyTarget,device.mo-ca.interface.{i}.power-cntl-phy-target,Tabular-ReadWrite,unsignedInt
+Device.MoCA.Interface.{i}.BeaconPowerLimit,device.mo-ca.interface.{i}.beacon-power-limit,Tabular-ReadWrite,unsignedInt
+Device.MoCA.Interface.{i}.NetworkTabooMask,device.mo-ca.interface.{i}.network-taboo-mask,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.NodeTabooMask,device.mo-ca.interface.{i}.node-taboo-mask,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.TxBcastRate,device.mo-ca.interface.{i}.tx-bcast-rate,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.TxBcastPowerReduction,device.mo-ca.interface.{i}.tx-bcast-power-reduction,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QAM256Capable,device.mo-ca.interface.{i}.qam256-capable,Tabular-ReadOnly,boolean
+Device.MoCA.Interface.{i}.PacketAggregationCapability,device.mo-ca.interface.{i}.packet-aggregation-capability,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDeviceNumberOfEntries,device.mo-ca.interface.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.Stats.,device.mo-ca.interface.{i}.stats,ScalarObject,object
+Device.MoCA.Interface.{i}.Stats.BytesSent,device.mo-ca.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.BytesReceived,device.mo-ca.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.PacketsSent,device.mo-ca.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.PacketsReceived,device.mo-ca.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.ErrorsSent,device.mo-ca.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.Stats.ErrorsReceived,device.mo-ca.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.Stats.UnicastPacketsSent,device.mo-ca.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.UnicastPacketsReceived,device.mo-ca.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.DiscardPacketsSent,device.mo-ca.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.Stats.DiscardPacketsReceived,device.mo-ca.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.Stats.MulticastPacketsSent,device.mo-ca.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.MulticastPacketsReceived,device.mo-ca.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.BroadcastPacketsSent,device.mo-ca.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.BroadcastPacketsReceived,device.mo-ca.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.MoCA.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.mo-ca.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.,device.mo-ca.interface.{i}.qo-s,ScalarObject,object
+Device.MoCA.Interface.{i}.QoS.EgressNumFlows,device.mo-ca.interface.{i}.qo-s.egress-num-flows,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.IngressNumFlows,device.mo-ca.interface.{i}.qo-s.ingress-num-flows,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStatsNumberOfEntries,device.mo-ca.interface.{i}.qo-s.flow-stats-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.,TabularObject,object
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.FlowID,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.flow-id,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.PacketDA,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.packet-da,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.MaxRate,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.max-rate,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.MaxBurstSize,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.max-burst-size,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.LeaseTime,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.lease-time,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.LeaseTimeLeft,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.lease-time-left,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.QoS.FlowStats.{i}.FlowPackets,device.mo-ca.interface.{i}.qo-s.flow-stats.{i}.flow-packets,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.,device.mo-ca.interface.{i}.associated-device.{i}.,TabularObject,object
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.MACAddress,device.mo-ca.interface.{i}.associated-device.{i}.mac-address,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.NodeID,device.mo-ca.interface.{i}.associated-device.{i}.node-id,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.PreferredNC,device.mo-ca.interface.{i}.associated-device.{i}.preferred-nc,Tabular-ReadOnly,boolean
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.HighestVersion,device.mo-ca.interface.{i}.associated-device.{i}.highest-version,Tabular-ReadOnly,string
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.PHYTxRate,device.mo-ca.interface.{i}.associated-device.{i}.phy-tx-rate,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.PHYRxRate,device.mo-ca.interface.{i}.associated-device.{i}.phy-rx-rate,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.TxPowerControlReduction,device.mo-ca.interface.{i}.associated-device.{i}.tx-power-control-reduction,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.RxPowerLevel,device.mo-ca.interface.{i}.associated-device.{i}.rx-power-level,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.TxBcastRate,device.mo-ca.interface.{i}.associated-device.{i}.tx-bcast-rate,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.RxBcastPowerLevel,device.mo-ca.interface.{i}.associated-device.{i}.rx-bcast-power-level,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.TxPackets,device.mo-ca.interface.{i}.associated-device.{i}.tx-packets,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.RxPackets,device.mo-ca.interface.{i}.associated-device.{i}.rx-packets,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.RxErroredAndMissedPackets,device.mo-ca.interface.{i}.associated-device.{i}.rx-errored-and-missed-packets,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.QAM256Capable,device.mo-ca.interface.{i}.associated-device.{i}.qam256-capable,Tabular-ReadOnly,boolean
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.PacketAggregationCapability,device.mo-ca.interface.{i}.associated-device.{i}.packet-aggregation-capability,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.RxSNR,device.mo-ca.interface.{i}.associated-device.{i}.rx-snr,Tabular-ReadOnly,unsignedInt
+Device.MoCA.Interface.{i}.AssociatedDevice.{i}.Active,device.mo-ca.interface.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.Ghn.,device.ghn,ScalarObject,object
+Device.Ghn.InterfaceNumberOfEntries,device.ghn.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.,device.ghn.interface.{i}.,TabularObject,object
+Device.Ghn.Interface.{i}.Enable,device.ghn.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ghn.Interface.{i}.Status,device.ghn.interface.{i}.status,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.Alias,device.ghn.interface.{i}.alias,Tabular-ReadWrite,string
+Device.Ghn.Interface.{i}.Name,device.ghn.interface.{i}.name,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.LastChange,device.ghn.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.LowerLayers,device.ghn.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Ghn.Interface.{i}.Upstream,device.ghn.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.MACAddress,device.ghn.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.FirmwareVersion,device.ghn.interface.{i}.firmware-version,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.ConnectionType,device.ghn.interface.{i}.connection-type,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.MaxTransmitRate,device.ghn.interface.{i}.max-transmit-rate,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.TargetDomainNames,device.ghn.interface.{i}.target-domain-names,Tabular-ReadWrite,string
+Device.Ghn.Interface.{i}.DomainName,device.ghn.interface.{i}.domain-name,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.DomainNameIdentifier,device.ghn.interface.{i}.domain-name-identifier,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.DomainId,device.ghn.interface.{i}.domain-id,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.DeviceId,device.ghn.interface.{i}.device-id,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.MaxBitRate,device.ghn.interface.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.NodeTypeDMCapable,device.ghn.interface.{i}.node-type-dm-capable,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.DMRequested,device.ghn.interface.{i}.dm-requested,Tabular-ReadWrite,boolean
+Device.Ghn.Interface.{i}.IsDM,device.ghn.interface.{i}.is-dm,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.NodeTypeSCCapable,device.ghn.interface.{i}.node-type-sc-capable,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.SCRequested,device.ghn.interface.{i}.sc-requested,Tabular-ReadWrite,boolean
+Device.Ghn.Interface.{i}.IsSC,device.ghn.interface.{i}.is-sc,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.StandardVersions,device.ghn.interface.{i}.standard-versions,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.MaxBandPlan,device.ghn.interface.{i}.max-band-plan,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.MediumType,device.ghn.interface.{i}.medium-type,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.TAIFG,device.ghn.interface.{i}.taifg,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.NotchedAmateurRadioBands,device.ghn.interface.{i}.notched-amateur-radio-bands,Tabular-ReadWrite,string
+Device.Ghn.Interface.{i}.PHYThroughputDiagnosticsEnable,device.ghn.interface.{i}.phy-throughput-diagnostics-enable,Tabular-ReadWrite,string
+Device.Ghn.Interface.{i}.PerformanceMonitoringDiagnosticsEnable,device.ghn.interface.{i}.performance-monitoring-diagnostics-enable,Tabular-ReadWrite,string
+Device.Ghn.Interface.{i}.SMMaskedBandNumberOfEntries,device.ghn.interface.{i}.sm-masked-band-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.NodeTypeDMConfig,device.ghn.interface.{i}.node-type-dm-config,Tabular-ReadWrite,boolean
+Device.Ghn.Interface.{i}.NodeTypeDMStatus,device.ghn.interface.{i}.node-type-dm-status,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.NodeTypeSCStatus,device.ghn.interface.{i}.node-type-sc-status,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.AssociatedDeviceNumberOfEntries,device.ghn.interface.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.PSM,device.ghn.interface.{i}.psm,Tabular-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.Stats.,device.ghn.interface.{i}.stats,ScalarObject,object
+Device.Ghn.Interface.{i}.Stats.BytesSent,device.ghn.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.BytesReceived,device.ghn.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.PacketsSent,device.ghn.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.PacketsReceived,device.ghn.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.ErrorsSent,device.ghn.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.Stats.ErrorsReceived,device.ghn.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.Stats.UnicastPacketsSent,device.ghn.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.UnicastPacketsReceived,device.ghn.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.DiscardPacketsSent,device.ghn.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.Stats.DiscardPacketsReceived,device.ghn.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.Stats.MulticastPacketsSent,device.ghn.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.MulticastPacketsReceived,device.ghn.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.BroadcastPacketsSent,device.ghn.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.BroadcastPacketsReceived,device.ghn.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.ghn.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.Stats.MgmtBytesSent,device.ghn.interface.{i}.stats.mgmt-bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.MgmtBytesReceived,device.ghn.interface.{i}.stats.mgmt-bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.MgmtPacketsSent,device.ghn.interface.{i}.stats.mgmt-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.MgmtPacketsReceived,device.ghn.interface.{i}.stats.mgmt-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.BlocksSent,device.ghn.interface.{i}.stats.blocks-sent,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.BlocksReceived,device.ghn.interface.{i}.stats.blocks-received,Scalar-ReadOnly,unsignedLong
+Device.Ghn.Interface.{i}.Stats.BlocksResent,device.ghn.interface.{i}.stats.blocks-resent,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.Stats.BlocksErrorsReceived,device.ghn.interface.{i}.stats.blocks-errors-received,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.AssociatedDevice.{i}.,device.ghn.interface.{i}.associated-device.{i}.,TabularObject,object
+Device.Ghn.Interface.{i}.AssociatedDevice.{i}.MACAddress,device.ghn.interface.{i}.associated-device.{i}.mac-address,Tabular-ReadOnly,string
+Device.Ghn.Interface.{i}.AssociatedDevice.{i}.DeviceId,device.ghn.interface.{i}.associated-device.{i}.device-id,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.AssociatedDevice.{i}.TxPhyRate,device.ghn.interface.{i}.associated-device.{i}.tx-phy-rate,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.AssociatedDevice.{i}.RxPhyRate,device.ghn.interface.{i}.associated-device.{i}.rx-phy-rate,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.AssociatedDevice.{i}.Active,device.ghn.interface.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.Ghn.Interface.{i}.DMInfo.,device.ghn.interface.{i}.dm-info,ScalarObject,object
+Device.Ghn.Interface.{i}.DMInfo.DomainName,device.ghn.interface.{i}.dm-info.domain-name,Scalar-ReadWrite,string
+Device.Ghn.Interface.{i}.DMInfo.DomainNameIdentifier,device.ghn.interface.{i}.dm-info.domain-name-identifier,Scalar-ReadOnly,string
+Device.Ghn.Interface.{i}.DMInfo.DomainId,device.ghn.interface.{i}.dm-info.domain-id,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Interface.{i}.DMInfo.MACCycleDuration,device.ghn.interface.{i}.dm-info.mac-cycle-duration,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.DMInfo.SCDeviceId,device.ghn.interface.{i}.dm-info.sc-device-id,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.DMInfo.SCMACAddress,device.ghn.interface.{i}.dm-info.scmac-address,Scalar-ReadWrite,string
+Device.Ghn.Interface.{i}.DMInfo.ReregistrationTimePeriod,device.ghn.interface.{i}.dm-info.reregistration-time-period,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.DMInfo.TopologyPeriodicInterval,device.ghn.interface.{i}.dm-info.topology-periodic-interval,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.DMInfo.MinSupportedBandplan,device.ghn.interface.{i}.dm-info.min-supported-bandplan,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.DMInfo.MaxSupportedBandplan,device.ghn.interface.{i}.dm-info.max-supported-bandplan,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.SCInfo.,device.ghn.interface.{i}.sc-info,ScalarObject,object
+Device.Ghn.Interface.{i}.SCInfo.ModesSupported,device.ghn.interface.{i}.sc-info.modes-supported,Scalar-ReadOnly,string
+Device.Ghn.Interface.{i}.SCInfo.ModeEnabled,device.ghn.interface.{i}.sc-info.mode-enabled,Scalar-ReadWrite,string
+Device.Ghn.Interface.{i}.SCInfo.MICSize,device.ghn.interface.{i}.sc-info.mic-size,Scalar-ReadWrite,string
+Device.Ghn.Interface.{i}.SCInfo.Location,device.ghn.interface.{i}.sc-info.location,Scalar-ReadOnly,boolean
+Device.Ghn.Interface.{i}.SMMaskedBand.{i}.,device.ghn.interface.{i}.sm-masked-band.{i}.,TabularObject,object
+Device.Ghn.Interface.{i}.SMMaskedBand.{i}.Enable,device.ghn.interface.{i}.sm-masked-band.{i}.enable,Tabular-ReadWrite,boolean
+Device.Ghn.Interface.{i}.SMMaskedBand.{i}.BandNumber,device.ghn.interface.{i}.sm-masked-band.{i}.band-number,Tabular-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.SMMaskedBand.{i}.StartSubCarrier,device.ghn.interface.{i}.sm-masked-band.{i}.start-sub-carrier,Tabular-ReadWrite,unsignedInt
+Device.Ghn.Interface.{i}.SMMaskedBand.{i}.StopSubCarrier,device.ghn.interface.{i}.sm-masked-band.{i}.stop-sub-carrier,Tabular-ReadWrite,unsignedInt
+Device.Ghn.Diagnostics.,device.ghn.diagnostics,ScalarObject,object
+Device.Ghn.Diagnostics.PHYThroughput.,device.ghn.diagnostics.phy-throughput,ScalarObject,object
+Device.Ghn.Diagnostics.PHYThroughput.DiagnosticsState,device.ghn.diagnostics.phy-throughput.diagnostics-state,Scalar-ReadWrite,string
+Device.Ghn.Diagnostics.PHYThroughput.Interface,device.ghn.diagnostics.phy-throughput.interface,Scalar-ReadWrite,string
+Device.Ghn.Diagnostics.PHYThroughput.DiagnoseMACAddress,device.ghn.diagnostics.phy-throughput.diagnose-mac-address,Scalar-ReadWrite,string
+Device.Ghn.Diagnostics.PHYThroughput.PHYThroughputResultNumberOfEntries,device.ghn.diagnostics.phy-throughput.phy-throughput-result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PHYThroughput.Result.{i}.,device.ghn.diagnostics.phy-throughput.result.{i}.,TabularObject,object
+Device.Ghn.Diagnostics.PHYThroughput.Result.{i}.DestinationMACAddress,device.ghn.diagnostics.phy-throughput.result.{i}.destination-mac-address,Tabular-ReadOnly,string
+Device.Ghn.Diagnostics.PHYThroughput.Result.{i}.LinkState,device.ghn.diagnostics.phy-throughput.result.{i}.link-state,Tabular-ReadOnly,string
+Device.Ghn.Diagnostics.PHYThroughput.Result.{i}.TxPhyRate,device.ghn.diagnostics.phy-throughput.result.{i}.tx-phy-rate,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PHYThroughput.Result.{i}.RxPhyRate,device.ghn.diagnostics.phy-throughput.result.{i}.rx-phy-rate,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.,device.ghn.diagnostics.performance-monitoring,ScalarObject,object
+Device.Ghn.Diagnostics.PerformanceMonitoring.DiagnosticsState,device.ghn.diagnostics.performance-monitoring.diagnostics-state,Scalar-ReadWrite,string
+Device.Ghn.Diagnostics.PerformanceMonitoring.Interface,device.ghn.diagnostics.performance-monitoring.interface,Scalar-ReadWrite,string
+Device.Ghn.Diagnostics.PerformanceMonitoring.DiagnoseMACAddress,device.ghn.diagnostics.performance-monitoring.diagnose-mac-address,Scalar-ReadWrite,string
+Device.Ghn.Diagnostics.PerformanceMonitoring.SampleInterval,device.ghn.diagnostics.performance-monitoring.sample-interval,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.SNRGroupLength,device.ghn.diagnostics.performance-monitoring.snr-group-length,Scalar-ReadWrite,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.,device.ghn.diagnostics.performance-monitoring.nodes,ScalarObject,object
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.CurrentStart,device.ghn.diagnostics.performance-monitoring.nodes.current-start,Scalar-ReadOnly,dateTime
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.CurrentEnd,device.ghn.diagnostics.performance-monitoring.nodes.current-end,Scalar-ReadOnly,dateTime
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.NodeNumberOfEntries,device.ghn.diagnostics.performance-monitoring.nodes.node-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.,TabularObject,object
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.DestinationMACAddress,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.destination-mac-address,Tabular-ReadOnly,string
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BytesSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.bytes-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BytesReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.bytes-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.packets-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.PacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.packets-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.ErrorsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.errors-sent,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.ErrorsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.errors-received,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.UnicastPacketsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.unicast-packets-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.UnicastPacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.unicast-packets-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.DiscardPacketsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.discard-packets-sent,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.DiscardPacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.discard-packets-received,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MulticastPacketsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.multicast-packets-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MulticastPacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.multicast-packets-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BroadcastPacketsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.broadcast-packets-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BroadcastPacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.broadcast-packets-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.UnknownProtoPacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.unknown-proto-packets-received,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MgmtBytesSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.mgmt-bytes-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MgmtBytesReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.mgmt-bytes-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MgmtPacketsSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.mgmt-packets-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.MgmtPacketsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.mgmt-packets-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BlocksSent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.blocks-sent,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BlocksReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.blocks-received,Tabular-ReadOnly,unsignedLong
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BlocksResent,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.blocks-resent,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Nodes.Node.{i}.BlocksErrorsReceived,device.ghn.diagnostics.performance-monitoring.nodes.node.{i}.blocks-errors-received,Tabular-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Channels.,device.ghn.diagnostics.performance-monitoring.channels,ScalarObject,object
+Device.Ghn.Diagnostics.PerformanceMonitoring.Channels.TimeStamp,device.ghn.diagnostics.performance-monitoring.channels.time-stamp,Scalar-ReadOnly,dateTime
+Device.Ghn.Diagnostics.PerformanceMonitoring.Channels.ChannelNumberOfEntries,device.ghn.diagnostics.performance-monitoring.channels.channel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Ghn.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.,device.ghn.diagnostics.performance-monitoring.channels.channel.{i}.,TabularObject,object
+Device.Ghn.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.DestinationMACAddress,device.ghn.diagnostics.performance-monitoring.channels.channel.{i}.destination-mac-address,Tabular-ReadOnly,string
+Device.Ghn.Diagnostics.PerformanceMonitoring.Channels.Channel.{i}.SNR,device.ghn.diagnostics.performance-monitoring.channels.channel.{i}.snr,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.,device.home-plug,ScalarObject,object
+Device.HomePlug.InterfaceNumberOfEntries,device.home-plug.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.,device.home-plug.interface.{i}.,TabularObject,object
+Device.HomePlug.Interface.{i}.Enable,device.home-plug.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.HomePlug.Interface.{i}.Status,device.home-plug.interface.{i}.status,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.Alias,device.home-plug.interface.{i}.alias,Tabular-ReadWrite,string
+Device.HomePlug.Interface.{i}.Name,device.home-plug.interface.{i}.name,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.LastChange,device.home-plug.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.LowerLayers,device.home-plug.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.HomePlug.Interface.{i}.Upstream,device.home-plug.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.HomePlug.Interface.{i}.MACAddress,device.home-plug.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.LogicalNetwork,device.home-plug.interface.{i}.logical-network,Tabular-ReadWrite,string
+Device.HomePlug.Interface.{i}.Version,device.home-plug.interface.{i}.version,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.FirmwareVersion,device.home-plug.interface.{i}.firmware-version,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.ForceCCo,device.home-plug.interface.{i}.force-c-co,Tabular-ReadWrite,boolean
+Device.HomePlug.Interface.{i}.OtherNetworksPresent,device.home-plug.interface.{i}.other-networks-present,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.MaxBitRate,device.home-plug.interface.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.AssociatedDeviceNumberOfEntries,device.home-plug.interface.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.Stats.,device.home-plug.interface.{i}.stats,ScalarObject,object
+Device.HomePlug.Interface.{i}.Stats.BytesSent,device.home-plug.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.BytesReceived,device.home-plug.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.PacketsSent,device.home-plug.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.PacketsReceived,device.home-plug.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.ErrorsSent,device.home-plug.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.Stats.ErrorsReceived,device.home-plug.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.Stats.UnicastPacketsSent,device.home-plug.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.UnicastPacketsReceived,device.home-plug.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.DiscardPacketsSent,device.home-plug.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.Stats.DiscardPacketsReceived,device.home-plug.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.Stats.MulticastPacketsSent,device.home-plug.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.MulticastPacketsReceived,device.home-plug.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.BroadcastPacketsSent,device.home-plug.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.BroadcastPacketsReceived,device.home-plug.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.home-plug.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.Stats.MPDUTxAck,device.home-plug.interface.{i}.stats.mpdu-tx-ack,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.MPDUTxCol,device.home-plug.interface.{i}.stats.mpdu-tx-col,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.MPDUTxFailed,device.home-plug.interface.{i}.stats.mpdu-tx-failed,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.MPDURxAck,device.home-plug.interface.{i}.stats.mpdu-rx-ack,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.Stats.MPDURxFailed,device.home-plug.interface.{i}.stats.mpdu-rx-failed,Scalar-ReadOnly,unsignedLong
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.,device.home-plug.interface.{i}.associated-device.{i}.,TabularObject,object
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.MACAddress,device.home-plug.interface.{i}.associated-device.{i}.mac-address,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.TxPhyRate,device.home-plug.interface.{i}.associated-device.{i}.tx-phy-rate,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.RxPhyRate,device.home-plug.interface.{i}.associated-device.{i}.rx-phy-rate,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.SNRPerTone,device.home-plug.interface.{i}.associated-device.{i}.snr-per-tone,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.AvgAttenuation,device.home-plug.interface.{i}.associated-device.{i}.avg-attenuation,Tabular-ReadOnly,unsignedInt
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.EndStationMACs,device.home-plug.interface.{i}.associated-device.{i}.end-station-ma-cs,Tabular-ReadOnly,string
+Device.HomePlug.Interface.{i}.AssociatedDevice.{i}.Active,device.home-plug.interface.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.UPA.,device.upa,ScalarObject,object
+Device.UPA.InterfaceNumberOfEntries,device.upa.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.,device.upa.interface.{i}.,TabularObject,object
+Device.UPA.Interface.{i}.Enable,device.upa.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.UPA.Interface.{i}.Status,device.upa.interface.{i}.status,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.Alias,device.upa.interface.{i}.alias,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.Name,device.upa.interface.{i}.name,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.LastChange,device.upa.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.LowerLayers,device.upa.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.Upstream,device.upa.interface.{i}.upstream,Tabular-ReadOnly,boolean
+Device.UPA.Interface.{i}.MACAddress,device.upa.interface.{i}.mac-address,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.FirmwareVersion,device.upa.interface.{i}.firmware-version,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.MaxBitRate,device.upa.interface.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.NodeType,device.upa.interface.{i}.node-type,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.LogicalNetwork,device.upa.interface.{i}.logical-network,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.EncryptionMethod,device.upa.interface.{i}.encryption-method,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.PowerBackoffEnabled,device.upa.interface.{i}.power-backoff-enabled,Tabular-ReadWrite,boolean
+Device.UPA.Interface.{i}.PowerBackoffMechanismActive,device.upa.interface.{i}.power-backoff-mechanism-active,Tabular-ReadOnly,boolean
+Device.UPA.Interface.{i}.EstApplicationThroughput,device.upa.interface.{i}.est-application-throughput,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.ActiveNotchEnable,device.upa.interface.{i}.active-notch-enable,Tabular-ReadWrite,boolean
+Device.UPA.Interface.{i}.ActiveNotchNumberOfEntries,device.upa.interface.{i}.active-notch-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDeviceNumberOfEntries,device.upa.interface.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.BridgeForNumberOfEntries,device.upa.interface.{i}.bridge-for-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.Stats.,device.upa.interface.{i}.stats,ScalarObject,object
+Device.UPA.Interface.{i}.Stats.BytesSent,device.upa.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.BytesReceived,device.upa.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.PacketsSent,device.upa.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.PacketsReceived,device.upa.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.ErrorsSent,device.upa.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.Stats.ErrorsReceived,device.upa.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.Stats.UnicastPacketsSent,device.upa.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.UnicastPacketsReceived,device.upa.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.DiscardPacketsSent,device.upa.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.Stats.DiscardPacketsReceived,device.upa.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.Stats.MulticastPacketsSent,device.upa.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.MulticastPacketsReceived,device.upa.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.BroadcastPacketsSent,device.upa.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.BroadcastPacketsReceived,device.upa.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.UPA.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.upa.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.,device.upa.interface.{i}.associated-device.{i}.,TabularObject,object
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.MACAddress,device.upa.interface.{i}.associated-device.{i}.mac-address,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.Port,device.upa.interface.{i}.associated-device.{i}.port,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.LogicalNetwork,device.upa.interface.{i}.associated-device.{i}.logical-network,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.PhyTxThroughput,device.upa.interface.{i}.associated-device.{i}.phy-tx-throughput,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.PhyRxThroughput,device.upa.interface.{i}.associated-device.{i}.phy-rx-throughput,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.RealPhyRxThroughput,device.upa.interface.{i}.associated-device.{i}.real-phy-rx-throughput,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.EstimatedPLR,device.upa.interface.{i}.associated-device.{i}.estimated-plr,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.MeanEstimatedAtt,device.upa.interface.{i}.associated-device.{i}.mean-estimated-att,Tabular-ReadOnly,unsignedInt
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.SmartRouteIntermediatePLCMAC,device.upa.interface.{i}.associated-device.{i}.smart-route-intermediate-plcmac,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.DirectRoute,device.upa.interface.{i}.associated-device.{i}.direct-route,Tabular-ReadOnly,boolean
+Device.UPA.Interface.{i}.AssociatedDevice.{i}.Active,device.upa.interface.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.UPA.Interface.{i}.ActiveNotch.{i}.,device.upa.interface.{i}.active-notch.{i}.,TabularObject,object
+Device.UPA.Interface.{i}.ActiveNotch.{i}.Enable,device.upa.interface.{i}.active-notch.{i}.enable,Tabular-ReadWrite,boolean
+Device.UPA.Interface.{i}.ActiveNotch.{i}.Alias,device.upa.interface.{i}.active-notch.{i}.alias,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.ActiveNotch.{i}.StartFreq,device.upa.interface.{i}.active-notch.{i}.start-freq,Tabular-ReadWrite,unsignedInt
+Device.UPA.Interface.{i}.ActiveNotch.{i}.StopFreq,device.upa.interface.{i}.active-notch.{i}.stop-freq,Tabular-ReadWrite,unsignedInt
+Device.UPA.Interface.{i}.ActiveNotch.{i}.Depth,device.upa.interface.{i}.active-notch.{i}.depth,Tabular-ReadWrite,unsignedInt
+Device.UPA.Interface.{i}.BridgeFor.{i}.,device.upa.interface.{i}.bridge-for.{i}.,TabularObject,object
+Device.UPA.Interface.{i}.BridgeFor.{i}.Alias,device.upa.interface.{i}.bridge-for.{i}.alias,Tabular-ReadWrite,string
+Device.UPA.Interface.{i}.BridgeFor.{i}.MACAddress,device.upa.interface.{i}.bridge-for.{i}.mac-address,Tabular-ReadOnly,string
+Device.UPA.Interface.{i}.BridgeFor.{i}.Port,device.upa.interface.{i}.bridge-for.{i}.port,Tabular-ReadOnly,unsignedInt
+Device.UPA.Diagnostics.,device.upa.diagnostics,ScalarObject,object
+Device.UPA.Diagnostics.InterfaceMeasurement.,device.upa.diagnostics.interface-measurement,ScalarObject,object
+Device.UPA.Diagnostics.InterfaceMeasurement.DiagnosticsState,device.upa.diagnostics.interface-measurement.diagnostics-state,Scalar-ReadWrite,string
+Device.UPA.Diagnostics.InterfaceMeasurement.Type,device.upa.diagnostics.interface-measurement.type,Scalar-ReadWrite,string
+Device.UPA.Diagnostics.InterfaceMeasurement.Interface,device.upa.diagnostics.interface-measurement.interface,Scalar-ReadWrite,string
+Device.UPA.Diagnostics.InterfaceMeasurement.Port,device.upa.diagnostics.interface-measurement.port,Scalar-ReadWrite,unsignedInt
+Device.UPA.Diagnostics.InterfaceMeasurement.Measurements,device.upa.diagnostics.interface-measurement.measurements,Scalar-ReadOnly,unsignedInt
+Device.UPA.Diagnostics.InterfaceMeasurement.RxGain,device.upa.diagnostics.interface-measurement.rx-gain,Scalar-ReadOnly,int
+Device.WiFi.,device.wi-fi,ScalarObject,object
+Device.WiFi.RadioNumberOfEntries,device.wi-fi.radio-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSIDNumberOfEntries,device.wi-fi.ssid-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPointNumberOfEntries,device.wi-fi.access-point-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPointNumberOfEntries,device.wi-fi.end-point-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.WiFi.ResetCounter,device.wi-fi.reset-counter,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.,device.wi-fi.radio.{i}.,TabularObject,object
+Device.WiFi.Radio.{i}.Enable,device.wi-fi.radio.{i}.enable,Tabular-ReadWrite,boolean
+Device.WiFi.Radio.{i}.Status,device.wi-fi.radio.{i}.status,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.Alias,device.wi-fi.radio.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.Name,device.wi-fi.radio.{i}.name,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.LastChange,device.wi-fi.radio.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.LowerLayers,device.wi-fi.radio.{i}.lower-layers,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.Upstream,device.wi-fi.radio.{i}.upstream,Tabular-ReadOnly,boolean
+Device.WiFi.Radio.{i}.MaxBitRate,device.wi-fi.radio.{i}.max-bit-rate,Tabular-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.SupportedFrequencyBands,device.wi-fi.radio.{i}.supported-frequency-bands,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.OperatingFrequencyBand,device.wi-fi.radio.{i}.operating-frequency-band,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.SupportedStandards,device.wi-fi.radio.{i}.supported-standards,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.OperatingStandards,device.wi-fi.radio.{i}.operating-standards,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.PossibleChannels,device.wi-fi.radio.{i}.possible-channels,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.ChannelsInUse,device.wi-fi.radio.{i}.channels-in-use,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.Channel,device.wi-fi.radio.{i}.channel,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.AutoChannelSupported,device.wi-fi.radio.{i}.auto-channel-supported,Tabular-ReadOnly,boolean
+Device.WiFi.Radio.{i}.AutoChannelEnable,device.wi-fi.radio.{i}.auto-channel-enable,Tabular-ReadWrite,boolean
+Device.WiFi.Radio.{i}.AutoChannelRefreshPeriod,device.wi-fi.radio.{i}.auto-channel-refresh-period,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.ChannelLastChange,device.wi-fi.radio.{i}.channel-last-change,Tabular-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.ChannelLastSelectionReason,device.wi-fi.radio.{i}.channel-last-selection-reason,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.MaxSupportedSSIDs,device.wi-fi.radio.{i}.max-supported-ssi-ds,Tabular-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.MaxSupportedAssociations,device.wi-fi.radio.{i}.max-supported-associations,Tabular-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.FirmwareVersion,device.wi-fi.radio.{i}.firmware-version,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.SupportedOperatingChannelBandwidths,device.wi-fi.radio.{i}.supported-operating-channel-bandwidths,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.OperatingChannelBandwidth,device.wi-fi.radio.{i}.operating-channel-bandwidth,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.CurrentOperatingChannelBandwidth,device.wi-fi.radio.{i}.current-operating-channel-bandwidth,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.ExtensionChannel,device.wi-fi.radio.{i}.extension-channel,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.GuardInterval,device.wi-fi.radio.{i}.guard-interval,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.MCS,device.wi-fi.radio.{i}.mcs,Tabular-ReadWrite,int
+Device.WiFi.Radio.{i}.TransmitPowerSupported,device.wi-fi.radio.{i}.transmit-power-supported,Tabular-ReadOnly,int
+Device.WiFi.Radio.{i}.TransmitPower,device.wi-fi.radio.{i}.transmit-power,Tabular-ReadWrite,int
+Device.WiFi.Radio.{i}.IEEE80211hSupported,device.wi-fi.radio.{i}.ieee80211h-supported,Tabular-ReadOnly,boolean
+Device.WiFi.Radio.{i}.IEEE80211hEnabled,device.wi-fi.radio.{i}.ieee80211h-enabled,Tabular-ReadWrite,boolean
+Device.WiFi.Radio.{i}.RegulatoryDomain,device.wi-fi.radio.{i}.regulatory-domain,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.RetryLimit,device.wi-fi.radio.{i}.retry-limit,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.CCARequest,device.wi-fi.radio.{i}.cca-request,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.CCAReport,device.wi-fi.radio.{i}.cca-report,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.RPIHistogramRequest,device.wi-fi.radio.{i}.rpi-histogram-request,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.RPIHistogramReport,device.wi-fi.radio.{i}.rpi-histogram-report,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.FragmentationThreshold,device.wi-fi.radio.{i}.fragmentation-threshold,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.RTSThreshold,device.wi-fi.radio.{i}.rts-threshold,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.LongRetryLimit,device.wi-fi.radio.{i}.long-retry-limit,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.BeaconPeriod,device.wi-fi.radio.{i}.beacon-period,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.DTIMPeriod,device.wi-fi.radio.{i}.dtim-period,Tabular-ReadWrite,unsignedInt
+Device.WiFi.Radio.{i}.PacketAggregationEnable,device.wi-fi.radio.{i}.packet-aggregation-enable,Tabular-ReadWrite,boolean
+Device.WiFi.Radio.{i}.PreambleType,device.wi-fi.radio.{i}.preamble-type,Tabular-ReadWrite,long
+Device.WiFi.Radio.{i}.BasicDataTransmitRates,device.wi-fi.radio.{i}.basic-data-transmit-rates,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.OperationalDataTransmitRates,device.wi-fi.radio.{i}.operational-data-transmit-rates,Tabular-ReadWrite,string
+Device.WiFi.Radio.{i}.SupportedDataTransmitRates,device.wi-fi.radio.{i}.supported-data-transmit-rates,Tabular-ReadOnly,string
+Device.WiFi.Radio.{i}.Stats.,device.wi-fi.radio.{i}.stats,ScalarObject,object
+Device.WiFi.Radio.{i}.Stats.BytesSent,device.wi-fi.radio.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.Radio.{i}.Stats.BytesReceived,device.wi-fi.radio.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.Radio.{i}.Stats.PacketsSent,device.wi-fi.radio.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.Radio.{i}.Stats.PacketsReceived,device.wi-fi.radio.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.Radio.{i}.Stats.ErrorsSent,device.wi-fi.radio.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.ErrorsReceived,device.wi-fi.radio.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.DiscardPacketsSent,device.wi-fi.radio.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.DiscardPacketsReceived,device.wi-fi.radio.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.PLCPErrorCount,device.wi-fi.radio.{i}.stats.plcp-error-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.FCSErrorCount,device.wi-fi.radio.{i}.stats.fcs-error-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.InvalidMACCount,device.wi-fi.radio.{i}.stats.invalid-mac-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.PacketsOtherReceived,device.wi-fi.radio.{i}.stats.packets-other-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.Noise,device.wi-fi.radio.{i}.stats.noise,Scalar-ReadOnly,int
+Device.WiFi.Radio.{i}.Stats.TotalChannelChangeCount,device.wi-fi.radio.{i}.stats.total-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.ManualChannelChangeCount,device.wi-fi.radio.{i}.stats.manual-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.AutoStartupChannelChangeCount,device.wi-fi.radio.{i}.stats.auto-startup-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.AutoUserChannelChangeCount,device.wi-fi.radio.{i}.stats.auto-user-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.AutoRefreshChannelChangeCount,device.wi-fi.radio.{i}.stats.auto-refresh-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.AutoDynamicChannelChangeCount,device.wi-fi.radio.{i}.stats.auto-dynamic-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.Radio.{i}.Stats.AutoDFSChannelChangeCount,device.wi-fi.radio.{i}.stats.auto-dfs-channel-change-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.NeighboringWiFiDiagnostic.,device.wi-fi.neighboring-wi-fi-diagnostic,ScalarObject,object
+Device.WiFi.NeighboringWiFiDiagnostic.DiagnosticsState,device.wi-fi.neighboring-wi-fi-diagnostic.diagnostics-state,Scalar-ReadWrite,string
+Device.WiFi.NeighboringWiFiDiagnostic.ResultNumberOfEntries,device.wi-fi.neighboring-wi-fi-diagnostic.result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.,TabularObject,object
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.Radio,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.radio,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.SSID,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.ssid,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.BSSID,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.bssid,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.Mode,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.mode,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.Channel,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.channel,Tabular-ReadOnly,unsignedInt
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.SignalStrength,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.signal-strength,Tabular-ReadOnly,int
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.SecurityModeEnabled,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.security-mode-enabled,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.EncryptionMode,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.encryption-mode,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.OperatingFrequencyBand,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.operating-frequency-band,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.SupportedStandards,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.supported-standards,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.OperatingStandards,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.operating-standards,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.OperatingChannelBandwidth,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.operating-channel-bandwidth,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.BeaconPeriod,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.beacon-period,Tabular-ReadOnly,unsignedInt
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.Noise,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.noise,Tabular-ReadOnly,int
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.BasicDataTransferRates,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.basic-data-transfer-rates,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.SupportedDataTransferRates,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.supported-data-transfer-rates,Tabular-ReadOnly,string
+Device.WiFi.NeighboringWiFiDiagnostic.Result.{i}.DTIMPeriod,device.wi-fi.neighboring-wi-fi-diagnostic.result.{i}.dtim-period,Tabular-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.,device.wi-fi.ssid.{i}.,TabularObject,object
+Device.WiFi.SSID.{i}.Enable,device.wi-fi.ssid.{i}.enable,Tabular-ReadWrite,boolean
+Device.WiFi.SSID.{i}.Status,device.wi-fi.ssid.{i}.status,Tabular-ReadOnly,string
+Device.WiFi.SSID.{i}.Alias,device.wi-fi.ssid.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.SSID.{i}.Name,device.wi-fi.ssid.{i}.name,Tabular-ReadOnly,string
+Device.WiFi.SSID.{i}.LastChange,device.wi-fi.ssid.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.LowerLayers,device.wi-fi.ssid.{i}.lower-layers,Tabular-ReadWrite,string
+Device.WiFi.SSID.{i}.BSSID,device.wi-fi.ssid.{i}.bssid,Tabular-ReadOnly,string
+Device.WiFi.SSID.{i}.MACAddress,device.wi-fi.ssid.{i}.mac-address,Tabular-ReadOnly,string
+Device.WiFi.SSID.{i}.SSID,device.wi-fi.ssid.{i}.ssid,Tabular-ReadWrite,string
+Device.WiFi.SSID.{i}.Upstream,device.wi-fi.ssid.{i}.upstream,Tabular-ReadOnly,boolean
+Device.WiFi.SSID.{i}.Stats.,device.wi-fi.ssid.{i}.stats,ScalarObject,object
+Device.WiFi.SSID.{i}.Stats.BytesSent,device.wi-fi.ssid.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.BytesReceived,device.wi-fi.ssid.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.PacketsSent,device.wi-fi.ssid.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.PacketsReceived,device.wi-fi.ssid.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.ErrorsSent,device.wi-fi.ssid.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.RetransCount,device.wi-fi.ssid.{i}.stats.retrans-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.FailedRetransCount,device.wi-fi.ssid.{i}.stats.failed-retrans-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.RetryCount,device.wi-fi.ssid.{i}.stats.retry-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.MultipleRetryCount,device.wi-fi.ssid.{i}.stats.multiple-retry-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.ACKFailureCount,device.wi-fi.ssid.{i}.stats.ack-failure-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.AggregatedPacketCount,device.wi-fi.ssid.{i}.stats.aggregated-packet-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.ErrorsReceived,device.wi-fi.ssid.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.UnicastPacketsSent,device.wi-fi.ssid.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.UnicastPacketsReceived,device.wi-fi.ssid.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.DiscardPacketsSent,device.wi-fi.ssid.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.DiscardPacketsReceived,device.wi-fi.ssid.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.SSID.{i}.Stats.MulticastPacketsSent,device.wi-fi.ssid.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.MulticastPacketsReceived,device.wi-fi.ssid.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.BroadcastPacketsSent,device.wi-fi.ssid.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.BroadcastPacketsReceived,device.wi-fi.ssid.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.SSID.{i}.Stats.UnknownProtoPacketsReceived,device.wi-fi.ssid.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.,device.wi-fi.access-point.{i}.,TabularObject,object
+Device.WiFi.AccessPoint.{i}.Enable,device.wi-fi.access-point.{i}.enable,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.Status,device.wi-fi.access-point.{i}.status,Tabular-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.Alias,device.wi-fi.access-point.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.SSIDReference,device.wi-fi.access-point.{i}.ssid-reference,Tabular-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.SSIDAdvertisementEnabled,device.wi-fi.access-point.{i}.ssid-advertisement-enabled,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.RetryLimit,device.wi-fi.access-point.{i}.retry-limit,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.WMMCapability,device.wi-fi.access-point.{i}.wmm-capability,Tabular-ReadOnly,boolean
+Device.WiFi.AccessPoint.{i}.UAPSDCapability,device.wi-fi.access-point.{i}.uapsd-capability,Tabular-ReadOnly,boolean
+Device.WiFi.AccessPoint.{i}.WMMEnable,device.wi-fi.access-point.{i}.wmm-enable,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.UAPSDEnable,device.wi-fi.access-point.{i}.uapsd-enable,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.AssociatedDeviceNumberOfEntries,device.wi-fi.access-point.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.MaxAssociatedDevices,device.wi-fi.access-point.{i}.max-associated-devices,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.IsolationEnable,device.wi-fi.access-point.{i}.isolation-enable,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.MACAddressControlEnabled,device.wi-fi.access-point.{i}.mac-address-control-enabled,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.AllowedMACAddress,device.wi-fi.access-point.{i}.allowed-mac-address,Tabular-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.MaxAllowedAssociations,device.wi-fi.access-point.{i}.max-allowed-associations,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.Security.,device.wi-fi.access-point.{i}.security,ScalarObject,object
+Device.WiFi.AccessPoint.{i}.Security.ModesSupported,device.wi-fi.access-point.{i}.security.modes-supported,Scalar-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.Security.ModeEnabled,device.wi-fi.access-point.{i}.security.mode-enabled,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.Security.RekeyingInterval,device.wi-fi.access-point.{i}.security.rekeying-interval,Scalar-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.Security.RadiusServerIPAddr,device.wi-fi.access-point.{i}.security.radius-server-ip-addr,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.Security.SecondaryRadiusServerIPAddr,device.wi-fi.access-point.{i}.security.secondary-radius-server-ip-addr,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.Security.RadiusServerPort,device.wi-fi.access-point.{i}.security.radius-server-port,Scalar-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.Security.SecondaryRadiusServerPort,device.wi-fi.access-point.{i}.security.secondary-radius-server-port,Scalar-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.Security.MFPConfig,device.wi-fi.access-point.{i}.security.mfp-config,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.WPS.,device.wi-fi.access-point.{i}.wps,ScalarObject,object
+Device.WiFi.AccessPoint.{i}.WPS.Enable,device.wi-fi.access-point.{i}.wps.enable,Scalar-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.WPS.ConfigMethodsSupported,device.wi-fi.access-point.{i}.wps.config-methods-supported,Scalar-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.WPS.ConfigMethodsEnabled,device.wi-fi.access-point.{i}.wps.config-methods-enabled,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.WPS.Status,device.wi-fi.access-point.{i}.wps.status,Scalar-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.WPS.Version,device.wi-fi.access-point.{i}.wps.version,Scalar-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.,device.wi-fi.access-point.{i}.associated-device.{i}.,TabularObject,object
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.MACAddress,device.wi-fi.access-point.{i}.associated-device.{i}.mac-address,Tabular-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.OperatingStandard,device.wi-fi.access-point.{i}.associated-device.{i}.operating-standard,Tabular-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.AuthenticationState,device.wi-fi.access-point.{i}.associated-device.{i}.authentication-state,Tabular-ReadOnly,boolean
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.LastDataDownlinkRate,device.wi-fi.access-point.{i}.associated-device.{i}.last-data-downlink-rate,Tabular-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.LastDataUplinkRate,device.wi-fi.access-point.{i}.associated-device.{i}.last-data-uplink-rate,Tabular-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.AssociationTime,device.wi-fi.access-point.{i}.associated-device.{i}.association-time,Tabular-ReadOnly,dateTime
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.SignalStrength,device.wi-fi.access-point.{i}.associated-device.{i}.signal-strength,Tabular-ReadOnly,int
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Noise,device.wi-fi.access-point.{i}.associated-device.{i}.noise,Tabular-ReadOnly,int
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Retransmissions,device.wi-fi.access-point.{i}.associated-device.{i}.retransmissions,Tabular-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Active,device.wi-fi.access-point.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.,device.wi-fi.access-point.{i}.associated-device.{i}.stats,ScalarObject,object
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.BytesSent,device.wi-fi.access-point.{i}.associated-device.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.BytesReceived,device.wi-fi.access-point.{i}.associated-device.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.PacketsSent,device.wi-fi.access-point.{i}.associated-device.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.PacketsReceived,device.wi-fi.access-point.{i}.associated-device.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.ErrorsSent,device.wi-fi.access-point.{i}.associated-device.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.RetransCount,device.wi-fi.access-point.{i}.associated-device.{i}.stats.retrans-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.FailedRetransCount,device.wi-fi.access-point.{i}.associated-device.{i}.stats.failed-retrans-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.RetryCount,device.wi-fi.access-point.{i}.associated-device.{i}.stats.retry-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}.Stats.MultipleRetryCount,device.wi-fi.access-point.{i}.associated-device.{i}.stats.multiple-retry-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.,device.wi-fi.access-point.{i}.ac.{i}.,TabularObject,object
+Device.WiFi.AccessPoint.{i}.AC.{i}.AccessCategory,device.wi-fi.access-point.{i}.ac.{i}.access-category,Tabular-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.AC.{i}.Alias,device.wi-fi.access-point.{i}.ac.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.AC.{i}.AIFSN,device.wi-fi.access-point.{i}.ac.{i}.aifsn,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.ECWMin,device.wi-fi.access-point.{i}.ac.{i}.ecw-min,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.ECWMax,device.wi-fi.access-point.{i}.ac.{i}.ecw-max,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.TxOpMax,device.wi-fi.access-point.{i}.ac.{i}.tx-op-max,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.AckPolicy,device.wi-fi.access-point.{i}.ac.{i}.ack-policy,Tabular-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.AC.{i}.OutQLenHistogramIntervals,device.wi-fi.access-point.{i}.ac.{i}.out-q-len-histogram-intervals,Tabular-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.AC.{i}.OutQLenHistogramSampleInterval,device.wi-fi.access-point.{i}.ac.{i}.out-q-len-histogram-sample-interval,Tabular-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.,device.wi-fi.access-point.{i}.ac.{i}.stats,ScalarObject,object
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.BytesSent,device.wi-fi.access-point.{i}.ac.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.BytesReceived,device.wi-fi.access-point.{i}.ac.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.PacketsSent,device.wi-fi.access-point.{i}.ac.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.PacketsReceived,device.wi-fi.access-point.{i}.ac.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.ErrorsSent,device.wi-fi.access-point.{i}.ac.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.ErrorsReceived,device.wi-fi.access-point.{i}.ac.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.DiscardPacketsSent,device.wi-fi.access-point.{i}.ac.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.DiscardPacketsReceived,device.wi-fi.access-point.{i}.ac.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.RetransCount,device.wi-fi.access-point.{i}.ac.{i}.stats.retrans-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.AccessPoint.{i}.AC.{i}.Stats.OutQLenHistogram,device.wi-fi.access-point.{i}.ac.{i}.stats.out-q-len-histogram,Scalar-ReadOnly,string
+Device.WiFi.AccessPoint.{i}.Accounting.,device.wi-fi.access-point.{i}.accounting,ScalarObject,object
+Device.WiFi.AccessPoint.{i}.Accounting.Enable,device.wi-fi.access-point.{i}.accounting.enable,Scalar-ReadWrite,boolean
+Device.WiFi.AccessPoint.{i}.Accounting.ServerIPAddr,device.wi-fi.access-point.{i}.accounting.server-ip-addr,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.Accounting.SecondaryServerIPAddr,device.wi-fi.access-point.{i}.accounting.secondary-server-ip-addr,Scalar-ReadWrite,string
+Device.WiFi.AccessPoint.{i}.Accounting.ServerPort,device.wi-fi.access-point.{i}.accounting.server-port,Scalar-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.Accounting.SecondaryServerPort,device.wi-fi.access-point.{i}.accounting.secondary-server-port,Scalar-ReadWrite,unsignedInt
+Device.WiFi.AccessPoint.{i}.Accounting.InterimInterval,device.wi-fi.access-point.{i}.accounting.interim-interval,Scalar-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.,device.wi-fi.end-point.{i}.,TabularObject,object
+Device.WiFi.EndPoint.{i}.Enable,device.wi-fi.end-point.{i}.enable,Tabular-ReadWrite,boolean
+Device.WiFi.EndPoint.{i}.Status,device.wi-fi.end-point.{i}.status,Tabular-ReadOnly,string
+Device.WiFi.EndPoint.{i}.Alias,device.wi-fi.end-point.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.ProfileReference,device.wi-fi.end-point.{i}.profile-reference,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.SSIDReference,device.wi-fi.end-point.{i}.ssid-reference,Tabular-ReadOnly,string
+Device.WiFi.EndPoint.{i}.ProfileNumberOfEntries,device.wi-fi.end-point.{i}.profile-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.Stats.,device.wi-fi.end-point.{i}.stats,ScalarObject,object
+Device.WiFi.EndPoint.{i}.Stats.LastDataDownlinkRate,device.wi-fi.end-point.{i}.stats.last-data-downlink-rate,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.Stats.LastDataUplinkRate,device.wi-fi.end-point.{i}.stats.last-data-uplink-rate,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.Stats.SignalStrength,device.wi-fi.end-point.{i}.stats.signal-strength,Scalar-ReadOnly,int
+Device.WiFi.EndPoint.{i}.Stats.Retransmissions,device.wi-fi.end-point.{i}.stats.retransmissions,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.Security.,device.wi-fi.end-point.{i}.security,ScalarObject,object
+Device.WiFi.EndPoint.{i}.Security.ModesSupported,device.wi-fi.end-point.{i}.security.modes-supported,Scalar-ReadOnly,string
+Device.WiFi.EndPoint.{i}.Profile.{i}.,device.wi-fi.end-point.{i}.profile.{i}.,TabularObject,object
+Device.WiFi.EndPoint.{i}.Profile.{i}.Enable,device.wi-fi.end-point.{i}.profile.{i}.enable,Tabular-ReadWrite,boolean
+Device.WiFi.EndPoint.{i}.Profile.{i}.Status,device.wi-fi.end-point.{i}.profile.{i}.status,Tabular-ReadOnly,string
+Device.WiFi.EndPoint.{i}.Profile.{i}.Alias,device.wi-fi.end-point.{i}.profile.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.Profile.{i}.SSID,device.wi-fi.end-point.{i}.profile.{i}.ssid,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.Profile.{i}.Location,device.wi-fi.end-point.{i}.profile.{i}.location,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.Profile.{i}.Priority,device.wi-fi.end-point.{i}.profile.{i}.priority,Tabular-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.Profile.{i}.Security.,device.wi-fi.end-point.{i}.profile.{i}.security,ScalarObject,object
+Device.WiFi.EndPoint.{i}.Profile.{i}.Security.ModeEnabled,device.wi-fi.end-point.{i}.profile.{i}.security.mode-enabled,Scalar-ReadWrite,string
+Device.WiFi.EndPoint.{i}.Profile.{i}.Security.MFPConfig,device.wi-fi.end-point.{i}.profile.{i}.security.mfp-config,Scalar-ReadWrite,string
+Device.WiFi.EndPoint.{i}.WPS.,device.wi-fi.end-point.{i}.wps,ScalarObject,object
+Device.WiFi.EndPoint.{i}.WPS.Enable,device.wi-fi.end-point.{i}.wps.enable,Scalar-ReadWrite,boolean
+Device.WiFi.EndPoint.{i}.WPS.ConfigMethodsSupported,device.wi-fi.end-point.{i}.wps.config-methods-supported,Scalar-ReadOnly,string
+Device.WiFi.EndPoint.{i}.WPS.ConfigMethodsEnabled,device.wi-fi.end-point.{i}.wps.config-methods-enabled,Scalar-ReadWrite,string
+Device.WiFi.EndPoint.{i}.WPS.Status,device.wi-fi.end-point.{i}.wps.status,Scalar-ReadOnly,string
+Device.WiFi.EndPoint.{i}.WPS.Version,device.wi-fi.end-point.{i}.wps.version,Scalar-ReadOnly,string
+Device.WiFi.EndPoint.{i}.AC.{i}.,device.wi-fi.end-point.{i}.ac.{i}.,TabularObject,object
+Device.WiFi.EndPoint.{i}.AC.{i}.AccessCategory,device.wi-fi.end-point.{i}.ac.{i}.access-category,Tabular-ReadOnly,string
+Device.WiFi.EndPoint.{i}.AC.{i}.Alias,device.wi-fi.end-point.{i}.ac.{i}.alias,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.AC.{i}.AIFSN,device.wi-fi.end-point.{i}.ac.{i}.aifsn,Tabular-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.ECWMin,device.wi-fi.end-point.{i}.ac.{i}.ecw-min,Tabular-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.ECWMax,device.wi-fi.end-point.{i}.ac.{i}.ecw-max,Tabular-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.TxOpMax,device.wi-fi.end-point.{i}.ac.{i}.tx-op-max,Tabular-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.AckPolicy,device.wi-fi.end-point.{i}.ac.{i}.ack-policy,Tabular-ReadWrite,boolean
+Device.WiFi.EndPoint.{i}.AC.{i}.OutQLenHistogramIntervals,device.wi-fi.end-point.{i}.ac.{i}.out-q-len-histogram-intervals,Tabular-ReadWrite,string
+Device.WiFi.EndPoint.{i}.AC.{i}.OutQLenHistogramSampleInterval,device.wi-fi.end-point.{i}.ac.{i}.out-q-len-histogram-sample-interval,Tabular-ReadWrite,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.,device.wi-fi.end-point.{i}.ac.{i}.stats,ScalarObject,object
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.BytesSent,device.wi-fi.end-point.{i}.ac.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.BytesReceived,device.wi-fi.end-point.{i}.ac.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.PacketsSent,device.wi-fi.end-point.{i}.ac.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.PacketsReceived,device.wi-fi.end-point.{i}.ac.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.ErrorsSent,device.wi-fi.end-point.{i}.ac.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.ErrorsReceived,device.wi-fi.end-point.{i}.ac.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.DiscardPacketsSent,device.wi-fi.end-point.{i}.ac.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.DiscardPacketsReceived,device.wi-fi.end-point.{i}.ac.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.RetransCount,device.wi-fi.end-point.{i}.ac.{i}.stats.retrans-count,Scalar-ReadOnly,unsignedInt
+Device.WiFi.EndPoint.{i}.AC.{i}.Stats.OutQLenHistogram,device.wi-fi.end-point.{i}.ac.{i}.stats.out-q-len-histogram,Scalar-ReadOnly,string
+Device.ZigBee.,device.zig-bee,ScalarObject,object
+Device.ZigBee.InterfaceNumberOfEntries,device.zig-bee.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDONumberOfEntries,device.zig-bee.zdo-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.,device.zig-bee.interface.{i}.,TabularObject,object
+Device.ZigBee.Interface.{i}.Enable,device.zig-bee.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.ZigBee.Interface.{i}.Status,device.zig-bee.interface.{i}.status,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.Alias,device.zig-bee.interface.{i}.alias,Tabular-ReadWrite,string
+Device.ZigBee.Interface.{i}.Name,device.zig-bee.interface.{i}.name,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.LastChange,device.zig-bee.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.LowerLayers,device.zig-bee.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.ZigBee.Interface.{i}.IEEEAddress,device.zig-bee.interface.{i}.ieee-address,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.NetworkAddress,device.zig-bee.interface.{i}.network-address,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.ZDOReference,device.zig-bee.interface.{i}.zdo-reference,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.AssociatedDeviceNumberOfEntries,device.zig-bee.interface.{i}.associated-device-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.,device.zig-bee.interface.{i}.stats,ScalarObject,object
+Device.ZigBee.Interface.{i}.Stats.BytesSent,device.zig-bee.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.ZigBee.Interface.{i}.Stats.BytesReceived,device.zig-bee.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.ZigBee.Interface.{i}.Stats.PacketsSent,device.zig-bee.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.ZigBee.Interface.{i}.Stats.PacketsReceived,device.zig-bee.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.ZigBee.Interface.{i}.Stats.ErrorsSent,device.zig-bee.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.ErrorsReceived,device.zig-bee.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.UnicastPacketsSent,device.zig-bee.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.UnicastPacketsReceived,device.zig-bee.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.DiscardPacketsSent,device.zig-bee.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.DiscardPacketsReceived,device.zig-bee.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.MulticastPacketsSent,device.zig-bee.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.MulticastPacketsReceived,device.zig-bee.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.BroadcastPacketsSent,device.zig-bee.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.BroadcastPacketsReceived,device.zig-bee.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.Stats.UnknownPacketsReceived,device.zig-bee.interface.{i}.stats.unknown-packets-received,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Interface.{i}.AssociatedDevice.{i}.,device.zig-bee.interface.{i}.associated-device.{i}.,TabularObject,object
+Device.ZigBee.Interface.{i}.AssociatedDevice.{i}.IEEEAddress,device.zig-bee.interface.{i}.associated-device.{i}.ieee-address,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.AssociatedDevice.{i}.NetworkAddress,device.zig-bee.interface.{i}.associated-device.{i}.network-address,Tabular-ReadOnly,string
+Device.ZigBee.Interface.{i}.AssociatedDevice.{i}.Active,device.zig-bee.interface.{i}.associated-device.{i}.active,Tabular-ReadOnly,boolean
+Device.ZigBee.Interface.{i}.AssociatedDevice.{i}.ZDOReference,device.zig-bee.interface.{i}.associated-device.{i}.zdo-reference,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.,device.zig-bee.zdo.{i}.,TabularObject,object
+Device.ZigBee.ZDO.{i}.Alias,device.zig-bee.zdo.{i}.alias,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.IEEEAddress,device.zig-bee.zdo.{i}.ieee-address,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NetworkAddress,device.zig-bee.zdo.{i}.network-address,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.BindingTableNumberOfEntries,device.zig-bee.zdo.{i}.binding-table-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.GroupNumberOfEntries,device.zig-bee.zdo.{i}.group-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.ApplicationEndpointNumberOfEntries,device.zig-bee.zdo.{i}.application-endpoint-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeDescriptor.,device.zig-bee.zdo.{i}.node-descriptor,ScalarObject,object
+Device.ZigBee.ZDO.{i}.NodeDescriptor.LogicalType,device.zig-bee.zdo.{i}.node-descriptor.logical-type,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeDescriptor.ComplexDescriptorSupported,device.zig-bee.zdo.{i}.node-descriptor.complex-descriptor-supported,Scalar-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.NodeDescriptor.UserDescriptorSupported,device.zig-bee.zdo.{i}.node-descriptor.user-descriptor-supported,Scalar-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.NodeDescriptor.FrequencyBand,device.zig-bee.zdo.{i}.node-descriptor.frequency-band,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeDescriptor.MACCapability,device.zig-bee.zdo.{i}.node-descriptor.mac-capability,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeDescriptor.ManufactureCode,device.zig-bee.zdo.{i}.node-descriptor.manufacture-code,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeDescriptor.MaximumBufferSize,device.zig-bee.zdo.{i}.node-descriptor.maximum-buffer-size,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeDescriptor.MaximumIncomingTransferSize,device.zig-bee.zdo.{i}.node-descriptor.maximum-incoming-transfer-size,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeDescriptor.MaximumOutgoingTransferSize,device.zig-bee.zdo.{i}.node-descriptor.maximum-outgoing-transfer-size,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeDescriptor.ServerMask,device.zig-bee.zdo.{i}.node-descriptor.server-mask,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeDescriptor.DescriptorCapability,device.zig-bee.zdo.{i}.node-descriptor.descriptor-capability,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.PowerDescriptor.,device.zig-bee.zdo.{i}.power-descriptor,ScalarObject,object
+Device.ZigBee.ZDO.{i}.PowerDescriptor.CurrentPowerMode,device.zig-bee.zdo.{i}.power-descriptor.current-power-mode,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.PowerDescriptor.AvailablePowerSource,device.zig-bee.zdo.{i}.power-descriptor.available-power-source,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.PowerDescriptor.CurrentPowerSource,device.zig-bee.zdo.{i}.power-descriptor.current-power-source,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.PowerDescriptor.CurrentPowerSourceLevel,device.zig-bee.zdo.{i}.power-descriptor.current-power-source-level,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.UserDescriptor.,device.zig-bee.zdo.{i}.user-descriptor,ScalarObject,object
+Device.ZigBee.ZDO.{i}.UserDescriptor.DescriptorAvailable,device.zig-bee.zdo.{i}.user-descriptor.descriptor-available,Scalar-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.UserDescriptor.Description,device.zig-bee.zdo.{i}.user-descriptor.description,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.,device.zig-bee.zdo.{i}.complex-descriptor,ScalarObject,object
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.DescriptorAvailable,device.zig-bee.zdo.{i}.complex-descriptor.descriptor-available,Scalar-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.Language,device.zig-bee.zdo.{i}.complex-descriptor.language,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.CharacterSet,device.zig-bee.zdo.{i}.complex-descriptor.character-set,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.ManufacturerName,device.zig-bee.zdo.{i}.complex-descriptor.manufacturer-name,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.ModelName,device.zig-bee.zdo.{i}.complex-descriptor.model-name,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.SerialNumber,device.zig-bee.zdo.{i}.complex-descriptor.serial-number,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.DeviceURL,device.zig-bee.zdo.{i}.complex-descriptor.device-url,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.Icon,device.zig-bee.zdo.{i}.complex-descriptor.icon,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.ComplexDescriptor.IconURL,device.zig-bee.zdo.{i}.complex-descriptor.icon-url,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.Security.,device.zig-bee.zdo.{i}.security,ScalarObject,object
+Device.ZigBee.ZDO.{i}.Security.TrustCenterAddress,device.zig-bee.zdo.{i}.security.trust-center-address,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.Security.SecurityLevel,device.zig-bee.zdo.{i}.security.security-level,Scalar-ReadOnly,string
+Device.ZigBee.ZDO.{i}.Security.TimeOutPeriod,device.zig-bee.zdo.{i}.security.time-out-period,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.Network.,device.zig-bee.zdo.{i}.network,ScalarObject,object
+Device.ZigBee.ZDO.{i}.Network.NeighborNumberOfEntries,device.zig-bee.zdo.{i}.network.neighbor-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.Network.Neighbor.{i}.,device.zig-bee.zdo.{i}.network.neighbor.{i}.,TabularObject,object
+Device.ZigBee.ZDO.{i}.Network.Neighbor.{i}.Neighbor,device.zig-bee.zdo.{i}.network.neighbor.{i}.neighbor,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.Network.Neighbor.{i}.LQI,device.zig-bee.zdo.{i}.network.neighbor.{i}.lqi,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.Network.Neighbor.{i}.Relationship,device.zig-bee.zdo.{i}.network.neighbor.{i}.relationship,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.Network.Neighbor.{i}.PermitJoin,device.zig-bee.zdo.{i}.network.neighbor.{i}.permit-join,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.Network.Neighbor.{i}.Depth,device.zig-bee.zdo.{i}.network.neighbor.{i}.depth,Tabular-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeManager.,device.zig-bee.zdo.{i}.node-manager,ScalarObject,object
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTableNumberOfEntries,device.zig-bee.zdo.{i}.node-manager.routing-table-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.,TabularObject,object
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.DestinationAddress,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.destination-address,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.NextHopAddress,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.next-hop-address,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.Status,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.status,Tabular-ReadOnly,string
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.MemoryConstrained,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.memory-constrained,Tabular-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.ManyToOne,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.many-to-one,Tabular-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.NodeManager.RoutingTable.{i}.RouteRecordRequired,device.zig-bee.zdo.{i}.node-manager.routing-table.{i}.route-record-required,Tabular-ReadOnly,boolean
+Device.ZigBee.ZDO.{i}.Binding.{i}.,device.zig-bee.zdo.{i}.binding.{i}.,TabularObject,object
+Device.ZigBee.ZDO.{i}.Binding.{i}.Enable,device.zig-bee.zdo.{i}.binding.{i}.enable,Tabular-ReadWrite,boolean
+Device.ZigBee.ZDO.{i}.Binding.{i}.Alias,device.zig-bee.zdo.{i}.binding.{i}.alias,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Binding.{i}.SourceEndpoint,device.zig-bee.zdo.{i}.binding.{i}.source-endpoint,Tabular-ReadWrite,unsignedInt
+Device.ZigBee.ZDO.{i}.Binding.{i}.SourceAddress,device.zig-bee.zdo.{i}.binding.{i}.source-address,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Binding.{i}.ClusterId,device.zig-bee.zdo.{i}.binding.{i}.cluster-id,Tabular-ReadWrite,unsignedInt
+Device.ZigBee.ZDO.{i}.Binding.{i}.DestinationAddressMode,device.zig-bee.zdo.{i}.binding.{i}.destination-address-mode,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Binding.{i}.DestinationEndpoint,device.zig-bee.zdo.{i}.binding.{i}.destination-endpoint,Tabular-ReadWrite,unsignedInt
+Device.ZigBee.ZDO.{i}.Binding.{i}.IEEEDestinationAddress,device.zig-bee.zdo.{i}.binding.{i}.ieee-destination-address,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Binding.{i}.GroupDestinationAddress,device.zig-bee.zdo.{i}.binding.{i}.group-destination-address,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Group.{i}.,device.zig-bee.zdo.{i}.group.{i}.,TabularObject,object
+Device.ZigBee.ZDO.{i}.Group.{i}.Enable,device.zig-bee.zdo.{i}.group.{i}.enable,Tabular-ReadWrite,boolean
+Device.ZigBee.ZDO.{i}.Group.{i}.Alias,device.zig-bee.zdo.{i}.group.{i}.alias,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Group.{i}.GroupId,device.zig-bee.zdo.{i}.group.{i}.group-id,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.Group.{i}.EndpointList,device.zig-bee.zdo.{i}.group.{i}.endpoint-list,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.,device.zig-bee.zdo.{i}.application-endpoint.{i}.,TabularObject,object
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.Enable,device.zig-bee.zdo.{i}.application-endpoint.{i}.enable,Tabular-ReadWrite,boolean
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.Alias,device.zig-bee.zdo.{i}.application-endpoint.{i}.alias,Tabular-ReadWrite,string
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.EndpointId,device.zig-bee.zdo.{i}.application-endpoint.{i}.endpoint-id,Tabular-ReadWrite,unsignedInt
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.SimpleDescriptor.,device.zig-bee.zdo.{i}.application-endpoint.{i}.simple-descriptor,ScalarObject,object
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.SimpleDescriptor.ProfileId,device.zig-bee.zdo.{i}.application-endpoint.{i}.simple-descriptor.profile-id,Scalar-ReadWrite,unsignedInt
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.SimpleDescriptor.DeviceId,device.zig-bee.zdo.{i}.application-endpoint.{i}.simple-descriptor.device-id,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.SimpleDescriptor.DeviceVersion,device.zig-bee.zdo.{i}.application-endpoint.{i}.simple-descriptor.device-version,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.SimpleDescriptor.InputClusterList,device.zig-bee.zdo.{i}.application-endpoint.{i}.simple-descriptor.input-cluster-list,Scalar-ReadWrite,unsignedInt
+Device.ZigBee.ZDO.{i}.ApplicationEndpoint.{i}.SimpleDescriptor.OutputClusterList,device.zig-bee.zdo.{i}.application-endpoint.{i}.simple-descriptor.output-cluster-list,Scalar-ReadWrite,unsignedInt
+Device.ZigBee.Discovery.,device.zig-bee.discovery,ScalarObject,object
+Device.ZigBee.Discovery.AreaNetworkNumberOfEntries,device.zig-bee.discovery.area-network-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.ZigBee.Discovery.AreaNetwork.{i}.,device.zig-bee.discovery.area-network.{i}.,TabularObject,object
+Device.ZigBee.Discovery.AreaNetwork.{i}.Enable,device.zig-bee.discovery.area-network.{i}.enable,Tabular-ReadWrite,boolean
+Device.ZigBee.Discovery.AreaNetwork.{i}.LastUpdate,device.zig-bee.discovery.area-network.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.ZigBee.Discovery.AreaNetwork.{i}.Status,device.zig-bee.discovery.area-network.{i}.status,Tabular-ReadOnly,string
+Device.ZigBee.Discovery.AreaNetwork.{i}.Alias,device.zig-bee.discovery.area-network.{i}.alias,Tabular-ReadWrite,string
+Device.ZigBee.Discovery.AreaNetwork.{i}.Coordinator,device.zig-bee.discovery.area-network.{i}.coordinator,Tabular-ReadWrite,string
+Device.ZigBee.Discovery.AreaNetwork.{i}.ZDOReference,device.zig-bee.discovery.area-network.{i}.zdo-reference,Tabular-ReadOnly,string
+Device.ZigBee.Discovery.AreaNetwork.{i}.ZDOList,device.zig-bee.discovery.area-network.{i}.zdo-list,Tabular-ReadOnly,string
+Device.Bridging.,device.bridging,ScalarObject,object
+Device.Bridging.MaxBridgeEntries,device.bridging.max-bridge-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.MaxDBridgeEntries,device.bridging.max-d-bridge-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.MaxQBridgeEntries,device.bridging.max-q-bridge-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.MaxVLANEntries,device.bridging.max-vlan-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.MaxProviderBridgeEntries,device.bridging.max-provider-bridge-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.ProviderBridgeNumberOfEntries,device.bridging.provider-bridge-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.MaxFilterEntries,device.bridging.max-filter-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.BridgeNumberOfEntries,device.bridging.bridge-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.FilterNumberOfEntries,device.bridging.filter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.,device.bridging.bridge.{i}.,TabularObject,object
+Device.Bridging.Bridge.{i}.Enable,device.bridging.bridge.{i}.enable,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Status,device.bridging.bridge.{i}.status,Tabular-ReadOnly,string
+Device.Bridging.Bridge.{i}.Alias,device.bridging.bridge.{i}.alias,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.Standard,device.bridging.bridge.{i}.standard,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.PortNumberOfEntries,device.bridging.bridge.{i}.port-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.VLANNumberOfEntries,device.bridging.bridge.{i}.vlan-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.VLANPortNumberOfEntries,device.bridging.bridge.{i}.vlan-port-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.,device.bridging.bridge.{i}.port.{i}.,TabularObject,object
+Device.Bridging.Bridge.{i}.Port.{i}.Enable,device.bridging.bridge.{i}.port.{i}.enable,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.Status,device.bridging.bridge.{i}.port.{i}.status,Tabular-ReadOnly,string
+Device.Bridging.Bridge.{i}.Port.{i}.Alias,device.bridging.bridge.{i}.port.{i}.alias,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.Port.{i}.Name,device.bridging.bridge.{i}.port.{i}.name,Tabular-ReadOnly,string
+Device.Bridging.Bridge.{i}.Port.{i}.LastChange,device.bridging.bridge.{i}.port.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.LowerLayers,device.bridging.bridge.{i}.port.{i}.lower-layers,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.Port.{i}.ManagementPort,device.bridging.bridge.{i}.port.{i}.management-port,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.Type,device.bridging.bridge.{i}.port.{i}.type,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.Port.{i}.DefaultUserPriority,device.bridging.bridge.{i}.port.{i}.default-user-priority,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityRegeneration,device.bridging.bridge.{i}.port.{i}.priority-regeneration,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.PortState,device.bridging.bridge.{i}.port.{i}.port-state,Tabular-ReadOnly,string
+Device.Bridging.Bridge.{i}.Port.{i}.PVID,device.bridging.bridge.{i}.port.{i}.pvid,Tabular-ReadWrite,int
+Device.Bridging.Bridge.{i}.Port.{i}.TPID,device.bridging.bridge.{i}.port.{i}.tpid,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.AcceptableFrameTypes,device.bridging.bridge.{i}.port.{i}.acceptable-frame-types,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.Port.{i}.IngressFiltering,device.bridging.bridge.{i}.port.{i}.ingress-filtering,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.ServiceAccessPrioritySelection,device.bridging.bridge.{i}.port.{i}.service-access-priority-selection,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.ServiceAccessPriorityTranslation,device.bridging.bridge.{i}.port.{i}.service-access-priority-translation,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityTagging,device.bridging.bridge.{i}.port.{i}.priority-tagging,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.,device.bridging.bridge.{i}.port.{i}.stats,ScalarObject,object
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.BytesSent,device.bridging.bridge.{i}.port.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.BytesReceived,device.bridging.bridge.{i}.port.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.PacketsSent,device.bridging.bridge.{i}.port.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.PacketsReceived,device.bridging.bridge.{i}.port.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.ErrorsSent,device.bridging.bridge.{i}.port.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.ErrorsReceived,device.bridging.bridge.{i}.port.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.UnicastPacketsSent,device.bridging.bridge.{i}.port.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.UnicastPacketsReceived,device.bridging.bridge.{i}.port.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.DiscardPacketsSent,device.bridging.bridge.{i}.port.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.DiscardPacketsReceived,device.bridging.bridge.{i}.port.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.MulticastPacketsSent,device.bridging.bridge.{i}.port.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.MulticastPacketsReceived,device.bridging.bridge.{i}.port.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.BroadcastPacketsSent,device.bridging.bridge.{i}.port.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.BroadcastPacketsReceived,device.bridging.bridge.{i}.port.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.Bridging.Bridge.{i}.Port.{i}.Stats.UnknownProtoPacketsReceived,device.bridging.bridge.{i}.port.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityCodePoint.,device.bridging.bridge.{i}.port.{i}.priority-code-point,ScalarObject,object
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityCodePoint.PCPSelection,device.bridging.bridge.{i}.port.{i}.priority-code-point.pcp-selection,Scalar-ReadWrite,unsignedInt
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityCodePoint.UseDEI,device.bridging.bridge.{i}.port.{i}.priority-code-point.use-dei,Scalar-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityCodePoint.RequireDropEncoding,device.bridging.bridge.{i}.port.{i}.priority-code-point.require-drop-encoding,Scalar-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityCodePoint.PCPEncoding,device.bridging.bridge.{i}.port.{i}.priority-code-point.pcp-encoding,Scalar-ReadWrite,string
+Device.Bridging.Bridge.{i}.Port.{i}.PriorityCodePoint.PCPDecoding,device.bridging.bridge.{i}.port.{i}.priority-code-point.pcp-decoding,Scalar-ReadWrite,string
+Device.Bridging.Bridge.{i}.VLAN.{i}.,device.bridging.bridge.{i}.vlan.{i}.,TabularObject,object
+Device.Bridging.Bridge.{i}.VLAN.{i}.Enable,device.bridging.bridge.{i}.vlan.{i}.enable,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.VLAN.{i}.Alias,device.bridging.bridge.{i}.vlan.{i}.alias,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.VLAN.{i}.Name,device.bridging.bridge.{i}.vlan.{i}.name,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.VLAN.{i}.VLANID,device.bridging.bridge.{i}.vlan.{i}.vlanid,Tabular-ReadWrite,int
+Device.Bridging.Bridge.{i}.VLANPort.{i}.,device.bridging.bridge.{i}.vlan-port.{i}.,TabularObject,object
+Device.Bridging.Bridge.{i}.VLANPort.{i}.Enable,device.bridging.bridge.{i}.vlan-port.{i}.enable,Tabular-ReadWrite,boolean
+Device.Bridging.Bridge.{i}.VLANPort.{i}.Alias,device.bridging.bridge.{i}.vlan-port.{i}.alias,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.VLANPort.{i}.VLAN,device.bridging.bridge.{i}.vlan-port.{i}.vlan,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.VLANPort.{i}.Port,device.bridging.bridge.{i}.vlan-port.{i}.port,Tabular-ReadWrite,string
+Device.Bridging.Bridge.{i}.VLANPort.{i}.Untagged,device.bridging.bridge.{i}.vlan-port.{i}.untagged,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.,device.bridging.filter.{i}.,TabularObject,object
+Device.Bridging.Filter.{i}.Enable,device.bridging.filter.{i}.enable,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.Alias,device.bridging.filter.{i}.alias,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.Status,device.bridging.filter.{i}.status,Tabular-ReadOnly,string
+Device.Bridging.Filter.{i}.Bridge,device.bridging.filter.{i}.bridge,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.Order,device.bridging.filter.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Filter.{i}.Interface,device.bridging.filter.{i}.interface,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DHCPType,device.bridging.filter.{i}.dhcp-type,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.VLANIDFilter,device.bridging.filter.{i}.vlanid-filter,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Filter.{i}.EthertypeFilterList,device.bridging.filter.{i}.ethertype-filter-list,Tabular-ReadWrite,unsignedInt
+Device.Bridging.Filter.{i}.EthertypeFilterExclude,device.bridging.filter.{i}.ethertype-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.SourceMACAddressFilterList,device.bridging.filter.{i}.source-mac-address-filter-list,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMACAddressFilterExclude,device.bridging.filter.{i}.source-mac-address-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.DestMACAddressFilterList,device.bridging.filter.{i}.dest-mac-address-filter-list,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMACAddressFilterExclude,device.bridging.filter.{i}.dest-mac-address-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.SourceMACFromVendorClassIDFilter,device.bridging.filter.{i}.source-mac-from-vendor-class-id-filter,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMACFromVendorClassIDFilterv6,device.bridging.filter.{i}.source-mac-from-vendor-class-id-filterv6,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMACFromVendorClassIDFilterExclude,device.bridging.filter.{i}.source-mac-from-vendor-class-id-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.SourceMACFromVendorClassIDMode,device.bridging.filter.{i}.source-mac-from-vendor-class-id-mode,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMACFromVendorClassIDFilter,device.bridging.filter.{i}.dest-mac-from-vendor-class-id-filter,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMACFromVendorClassIDFilterv6,device.bridging.filter.{i}.dest-mac-from-vendor-class-id-filterv6,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMACFromVendorClassIDFilterExclude,device.bridging.filter.{i}.dest-mac-from-vendor-class-id-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.DestMACFromVendorClassIDMode,device.bridging.filter.{i}.dest-mac-from-vendor-class-id-mode,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMACFromClientIDFilter,device.bridging.filter.{i}.source-mac-from-client-id-filter,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMACFromClientIDFilterExclude,device.bridging.filter.{i}.source-mac-from-client-id-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.DestMACFromClientIDFilter,device.bridging.filter.{i}.dest-mac-from-client-id-filter,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMACFromClientIDFilterExclude,device.bridging.filter.{i}.dest-mac-from-client-id-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.SourceMACFromUserClassIDFilter,device.bridging.filter.{i}.source-mac-from-user-class-id-filter,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMACFromUserClassIDFilterExclude,device.bridging.filter.{i}.source-mac-from-user-class-id-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.DestMACFromUserClassIDFilter,device.bridging.filter.{i}.dest-mac-from-user-class-id-filter,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMACFromUserClassIDFilterExclude,device.bridging.filter.{i}.dest-mac-from-user-class-id-filter-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.DestIP,device.bridging.filter.{i}.dest-ip,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestMask,device.bridging.filter.{i}.dest-mask,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.DestIPExclude,device.bridging.filter.{i}.dest-ip-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.SourceIP,device.bridging.filter.{i}.source-ip,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceMask,device.bridging.filter.{i}.source-mask,Tabular-ReadWrite,string
+Device.Bridging.Filter.{i}.SourceIPExclude,device.bridging.filter.{i}.source-ip-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.Protocol,device.bridging.filter.{i}.protocol,Tabular-ReadWrite,int
+Device.Bridging.Filter.{i}.ProtocolExclude,device.bridging.filter.{i}.protocol-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.DestPort,device.bridging.filter.{i}.dest-port,Tabular-ReadWrite,int
+Device.Bridging.Filter.{i}.DestPortRangeMax,device.bridging.filter.{i}.dest-port-range-max,Tabular-ReadWrite,int
+Device.Bridging.Filter.{i}.DestPortExclude,device.bridging.filter.{i}.dest-port-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.Filter.{i}.SourcePort,device.bridging.filter.{i}.source-port,Tabular-ReadWrite,int
+Device.Bridging.Filter.{i}.SourcePortRangeMax,device.bridging.filter.{i}.source-port-range-max,Tabular-ReadWrite,int
+Device.Bridging.Filter.{i}.SourcePortExclude,device.bridging.filter.{i}.source-port-exclude,Tabular-ReadWrite,boolean
+Device.Bridging.ProviderBridge.{i}.,device.bridging.provider-bridge.{i}.,TabularObject,object
+Device.Bridging.ProviderBridge.{i}.Enable,device.bridging.provider-bridge.{i}.enable,Tabular-ReadWrite,boolean
+Device.Bridging.ProviderBridge.{i}.Status,device.bridging.provider-bridge.{i}.status,Tabular-ReadOnly,string
+Device.Bridging.ProviderBridge.{i}.Alias,device.bridging.provider-bridge.{i}.alias,Tabular-ReadWrite,string
+Device.Bridging.ProviderBridge.{i}.Type,device.bridging.provider-bridge.{i}.type,Tabular-ReadWrite,string
+Device.Bridging.ProviderBridge.{i}.SVLANcomponent,device.bridging.provider-bridge.{i}.svla-ncomponent,Tabular-ReadWrite,string
+Device.Bridging.ProviderBridge.{i}.CVLANcomponents,device.bridging.provider-bridge.{i}.cvla-ncomponents,Tabular-ReadWrite,string
+Device.PPP.,device.ppp,ScalarObject,object
+Device.PPP.InterfaceNumberOfEntries,device.ppp.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.PPP.SupportedNCPs,device.ppp.supported-nc-ps,Scalar-ReadOnly,string
+Device.PPP.Interface.{i}.,device.ppp.interface.{i}.,TabularObject,object
+Device.PPP.Interface.{i}.Enable,device.ppp.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.PPP.Interface.{i}.Status,device.ppp.interface.{i}.status,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.Alias,device.ppp.interface.{i}.alias,Tabular-ReadWrite,string
+Device.PPP.Interface.{i}.Name,device.ppp.interface.{i}.name,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.LastChange,device.ppp.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.LowerLayers,device.ppp.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.PPP.Interface.{i}.ConnectionStatus,device.ppp.interface.{i}.connection-status,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.LastConnectionError,device.ppp.interface.{i}.last-connection-error,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.AutoDisconnectTime,device.ppp.interface.{i}.auto-disconnect-time,Tabular-ReadWrite,unsignedInt
+Device.PPP.Interface.{i}.IdleDisconnectTime,device.ppp.interface.{i}.idle-disconnect-time,Tabular-ReadWrite,unsignedInt
+Device.PPP.Interface.{i}.WarnDisconnectDelay,device.ppp.interface.{i}.warn-disconnect-delay,Tabular-ReadWrite,unsignedInt
+Device.PPP.Interface.{i}.Username,device.ppp.interface.{i}.username,Tabular-ReadWrite,string
+Device.PPP.Interface.{i}.EncryptionProtocol,device.ppp.interface.{i}.encryption-protocol,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.CompressionProtocol,device.ppp.interface.{i}.compression-protocol,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.AuthenticationProtocol,device.ppp.interface.{i}.authentication-protocol,Tabular-ReadOnly,string
+Device.PPP.Interface.{i}.MaxMRUSize,device.ppp.interface.{i}.max-mru-size,Tabular-ReadWrite,unsignedInt
+Device.PPP.Interface.{i}.CurrentMRUSize,device.ppp.interface.{i}.current-mru-size,Tabular-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.ConnectionTrigger,device.ppp.interface.{i}.connection-trigger,Tabular-ReadWrite,string
+Device.PPP.Interface.{i}.LCPEcho,device.ppp.interface.{i}.lcp-echo,Tabular-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.LCPEchoRetry,device.ppp.interface.{i}.lcp-echo-retry,Tabular-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.IPCPEnable,device.ppp.interface.{i}.ipcp-enable,Tabular-ReadWrite,boolean
+Device.PPP.Interface.{i}.IPv6CPEnable,device.ppp.interface.{i}.ipv6-cp-enable,Tabular-ReadWrite,boolean
+Device.PPP.Interface.{i}.PPPoE.,device.ppp.interface.{i}.pp-po-e,ScalarObject,object
+Device.PPP.Interface.{i}.PPPoE.SessionID,device.ppp.interface.{i}.pp-po-e.session-id,Scalar-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.PPPoE.ACName,device.ppp.interface.{i}.pp-po-e.ac-name,Scalar-ReadWrite,string
+Device.PPP.Interface.{i}.PPPoE.ServiceName,device.ppp.interface.{i}.pp-po-e.service-name,Scalar-ReadWrite,string
+Device.PPP.Interface.{i}.IPCP.,device.ppp.interface.{i}.ipcp,ScalarObject,object
+Device.PPP.Interface.{i}.IPCP.LocalIPAddress,device.ppp.interface.{i}.ipcp.local-ip-address,Scalar-ReadOnly,string
+Device.PPP.Interface.{i}.IPCP.RemoteIPAddress,device.ppp.interface.{i}.ipcp.remote-ip-address,Scalar-ReadOnly,string
+Device.PPP.Interface.{i}.IPCP.DNSServers,device.ppp.interface.{i}.ipcp.dns-servers,Scalar-ReadOnly,string
+Device.PPP.Interface.{i}.IPCP.PassthroughEnable,device.ppp.interface.{i}.ipcp.passthrough-enable,Scalar-ReadWrite,boolean
+Device.PPP.Interface.{i}.IPCP.PassthroughDHCPPool,device.ppp.interface.{i}.ipcp.passthrough-dhcp-pool,Scalar-ReadWrite,string
+Device.PPP.Interface.{i}.IPv6CP.,device.ppp.interface.{i}.ipv6-cp,ScalarObject,object
+Device.PPP.Interface.{i}.IPv6CP.LocalInterfaceIdentifier,device.ppp.interface.{i}.ipv6-cp.local-interface-identifier,Scalar-ReadOnly,string
+Device.PPP.Interface.{i}.IPv6CP.RemoteInterfaceIdentifier,device.ppp.interface.{i}.ipv6-cp.remote-interface-identifier,Scalar-ReadOnly,string
+Device.PPP.Interface.{i}.Stats.,device.ppp.interface.{i}.stats,ScalarObject,object
+Device.PPP.Interface.{i}.Stats.BytesSent,device.ppp.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.BytesReceived,device.ppp.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.PacketsSent,device.ppp.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.PacketsReceived,device.ppp.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.ErrorsSent,device.ppp.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.Stats.ErrorsReceived,device.ppp.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.Stats.UnicastPacketsSent,device.ppp.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.UnicastPacketsReceived,device.ppp.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.DiscardPacketsSent,device.ppp.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.Stats.DiscardPacketsReceived,device.ppp.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.Stats.MulticastPacketsSent,device.ppp.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.MulticastPacketsReceived,device.ppp.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.BroadcastPacketsSent,device.ppp.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.BroadcastPacketsReceived,device.ppp.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.PPP.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.ppp.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.PPP.Interface.{i}.PPPoA.,device.ppp.interface.{i}.pp-po-a,ScalarObject,object
+Device.IP.,device.ip,ScalarObject,object
+Device.IP.IPv4Capable,device.ip.ipv4-capable,Scalar-ReadOnly,boolean
+Device.IP.IPv4Enable,device.ip.ipv4-enable,Scalar-ReadWrite,boolean
+Device.IP.IPv4Status,device.ip.ipv4-status,Scalar-ReadOnly,string
+Device.IP.IPv6Capable,device.ip.ipv6-capable,Scalar-ReadOnly,boolean
+Device.IP.IPv6Enable,device.ip.ipv6-enable,Scalar-ReadWrite,boolean
+Device.IP.IPv6Status,device.ip.ipv6-status,Scalar-ReadOnly,string
+Device.IP.ULAPrefix,device.ip.ula-prefix,Scalar-ReadWrite,string
+Device.IP.InterfaceNumberOfEntries,device.ip.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.ActivePortNumberOfEntries,device.ip.active-port-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.,device.ip.interface.{i}.,TabularObject,object
+Device.IP.Interface.{i}.Enable,device.ip.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv4Enable,device.ip.interface.{i}.ipv4-enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv6Enable,device.ip.interface.{i}.ipv6-enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.ULAEnable,device.ip.interface.{i}.ula-enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.Status,device.ip.interface.{i}.status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.Alias,device.ip.interface.{i}.alias,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.Name,device.ip.interface.{i}.name,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.LastChange,device.ip.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.LowerLayers,device.ip.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.Router,device.ip.interface.{i}.router,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.MaxMTUSize,device.ip.interface.{i}.max-mtu-size,Tabular-ReadWrite,unsignedInt
+Device.IP.Interface.{i}.Type,device.ip.interface.{i}.type,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.Loopback,device.ip.interface.{i}.loopback,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv4AddressNumberOfEntries,device.ip.interface.{i}.ipv4-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.IPv6AddressNumberOfEntries,device.ip.interface.{i}.ipv6-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.IPv6PrefixNumberOfEntries,device.ip.interface.{i}.ipv6-prefix-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.AutoIPEnable,device.ip.interface.{i}.auto-ip-enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.TWAMPReflectorNumberOfEntries,device.ip.interface.{i}.twamp-reflector-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.IPv4Address.{i}.,device.ip.interface.{i}.ipv4-address.{i}.,TabularObject,object
+Device.IP.Interface.{i}.IPv4Address.{i}.Enable,device.ip.interface.{i}.ipv4-address.{i}.enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv4Address.{i}.Status,device.ip.interface.{i}.ipv4-address.{i}.status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv4Address.{i}.Alias,device.ip.interface.{i}.ipv4-address.{i}.alias,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv4Address.{i}.IPAddress,device.ip.interface.{i}.ipv4-address.{i}.ip-address,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv4Address.{i}.SubnetMask,device.ip.interface.{i}.ipv4-address.{i}.subnet-mask,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv4Address.{i}.AddressingType,device.ip.interface.{i}.ipv4-address.{i}.addressing-type,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.Stats.,device.ip.interface.{i}.stats,ScalarObject,object
+Device.IP.Interface.{i}.Stats.BytesSent,device.ip.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.BytesReceived,device.ip.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.PacketsSent,device.ip.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.PacketsReceived,device.ip.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.ErrorsSent,device.ip.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.Stats.ErrorsReceived,device.ip.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.Stats.UnicastPacketsSent,device.ip.interface.{i}.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.UnicastPacketsReceived,device.ip.interface.{i}.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.DiscardPacketsSent,device.ip.interface.{i}.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.Stats.DiscardPacketsReceived,device.ip.interface.{i}.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.Stats.MulticastPacketsSent,device.ip.interface.{i}.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.MulticastPacketsReceived,device.ip.interface.{i}.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.BroadcastPacketsSent,device.ip.interface.{i}.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.BroadcastPacketsReceived,device.ip.interface.{i}.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.IP.Interface.{i}.Stats.UnknownProtoPacketsReceived,device.ip.interface.{i}.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Interface.{i}.TWAMPReflector.{i}.,device.ip.interface.{i}.twamp-reflector.{i}.,TabularObject,object
+Device.IP.Interface.{i}.TWAMPReflector.{i}.Enable,device.ip.interface.{i}.twamp-reflector.{i}.enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.TWAMPReflector.{i}.Status,device.ip.interface.{i}.twamp-reflector.{i}.status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.TWAMPReflector.{i}.Alias,device.ip.interface.{i}.twamp-reflector.{i}.alias,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.TWAMPReflector.{i}.Port,device.ip.interface.{i}.twamp-reflector.{i}.port,Tabular-ReadWrite,unsignedInt
+Device.IP.Interface.{i}.TWAMPReflector.{i}.MaximumTTL,device.ip.interface.{i}.twamp-reflector.{i}.maximum-ttl,Tabular-ReadWrite,unsignedInt
+Device.IP.Interface.{i}.TWAMPReflector.{i}.IPAllowedList,device.ip.interface.{i}.twamp-reflector.{i}.ip-allowed-list,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.TWAMPReflector.{i}.PortAllowedList,device.ip.interface.{i}.twamp-reflector.{i}.port-allowed-list,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Address.{i}.,device.ip.interface.{i}.ipv6-address.{i}.,TabularObject,object
+Device.IP.Interface.{i}.IPv6Address.{i}.Enable,device.ip.interface.{i}.ipv6-address.{i}.enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv6Address.{i}.Status,device.ip.interface.{i}.ipv6-address.{i}.status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv6Address.{i}.IPAddressStatus,device.ip.interface.{i}.ipv6-address.{i}.ip-address-status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv6Address.{i}.Alias,device.ip.interface.{i}.ipv6-address.{i}.alias,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Address.{i}.IPAddress,device.ip.interface.{i}.ipv6-address.{i}.ip-address,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Address.{i}.Origin,device.ip.interface.{i}.ipv6-address.{i}.origin,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv6Address.{i}.Prefix,device.ip.interface.{i}.ipv6-address.{i}.prefix,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Address.{i}.PreferredLifetime,device.ip.interface.{i}.ipv6-address.{i}.preferred-lifetime,Tabular-ReadWrite,dateTime
+Device.IP.Interface.{i}.IPv6Address.{i}.ValidLifetime,device.ip.interface.{i}.ipv6-address.{i}.valid-lifetime,Tabular-ReadWrite,dateTime
+Device.IP.Interface.{i}.IPv6Address.{i}.Anycast,device.ip.interface.{i}.ipv6-address.{i}.anycast,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv6Prefix.{i}.,device.ip.interface.{i}.ipv6-prefix.{i}.,TabularObject,object
+Device.IP.Interface.{i}.IPv6Prefix.{i}.Enable,device.ip.interface.{i}.ipv6-prefix.{i}.enable,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv6Prefix.{i}.Status,device.ip.interface.{i}.ipv6-prefix.{i}.status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.PrefixStatus,device.ip.interface.{i}.ipv6-prefix.{i}.prefix-status,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.Alias,device.ip.interface.{i}.ipv6-prefix.{i}.alias,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.Prefix,device.ip.interface.{i}.ipv6-prefix.{i}.prefix,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.Origin,device.ip.interface.{i}.ipv6-prefix.{i}.origin,Tabular-ReadOnly,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.StaticType,device.ip.interface.{i}.ipv6-prefix.{i}.static-type,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.ParentPrefix,device.ip.interface.{i}.ipv6-prefix.{i}.parent-prefix,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.ChildPrefixBits,device.ip.interface.{i}.ipv6-prefix.{i}.child-prefix-bits,Tabular-ReadWrite,string
+Device.IP.Interface.{i}.IPv6Prefix.{i}.OnLink,device.ip.interface.{i}.ipv6-prefix.{i}.on-link,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv6Prefix.{i}.Autonomous,device.ip.interface.{i}.ipv6-prefix.{i}.autonomous,Tabular-ReadWrite,boolean
+Device.IP.Interface.{i}.IPv6Prefix.{i}.PreferredLifetime,device.ip.interface.{i}.ipv6-prefix.{i}.preferred-lifetime,Tabular-ReadWrite,dateTime
+Device.IP.Interface.{i}.IPv6Prefix.{i}.ValidLifetime,device.ip.interface.{i}.ipv6-prefix.{i}.valid-lifetime,Tabular-ReadWrite,dateTime
+Device.IP.ActivePort.{i}.,device.ip.active-port.{i}.,TabularObject,object
+Device.IP.ActivePort.{i}.LocalIPAddress,device.ip.active-port.{i}.local-ip-address,Tabular-ReadOnly,string
+Device.IP.ActivePort.{i}.LocalPort,device.ip.active-port.{i}.local-port,Tabular-ReadOnly,unsignedInt
+Device.IP.ActivePort.{i}.RemoteIPAddress,device.ip.active-port.{i}.remote-ip-address,Tabular-ReadOnly,string
+Device.IP.ActivePort.{i}.RemotePort,device.ip.active-port.{i}.remote-port,Tabular-ReadOnly,unsignedInt
+Device.IP.ActivePort.{i}.Status,device.ip.active-port.{i}.status,Tabular-ReadOnly,string
+Device.IP.Diagnostics.,device.ip.diagnostics,ScalarObject,object
+Device.IP.Diagnostics.IPv4PingSupported,device.ip.diagnostics.ipv4-ping-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv6PingSupported,device.ip.diagnostics.ipv6-ping-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv4TraceRouteSupported,device.ip.diagnostics.ipv4-trace-route-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv6TraceRouteSupported,device.ip.diagnostics.ipv6-trace-route-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv4DownloadDiagnosticsSupported,device.ip.diagnostics.ipv4-download-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv6DownloadDiagnosticsSupported,device.ip.diagnostics.ipv6-download-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv4UploadDiagnosticsSupported,device.ip.diagnostics.ipv4-upload-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv6UploadDiagnosticsSupported,device.ip.diagnostics.ipv6-upload-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv4UDPEchoDiagnosticsSupported,device.ip.diagnostics.ipv4-udp-echo-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv6UDPEchoDiagnosticsSupported,device.ip.diagnostics.ipv6-udp-echo-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv4ServerSelectionDiagnosticsSupported,device.ip.diagnostics.ipv4-server-selection-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPv6ServerSelectionDiagnosticsSupported,device.ip.diagnostics.ipv6-server-selection-diagnostics-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.IPPing.,device.ip.diagnostics.ip-ping,ScalarObject,object
+Device.IP.Diagnostics.IPPing.DiagnosticsState,device.ip.diagnostics.ip-ping.diagnostics-state,Scalar-ReadWrite,string
+Device.IP.Diagnostics.IPPing.Interface,device.ip.diagnostics.ip-ping.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.IPPing.ProtocolVersion,device.ip.diagnostics.ip-ping.protocol-version,Scalar-ReadWrite,string
+Device.IP.Diagnostics.IPPing.Host,device.ip.diagnostics.ip-ping.host,Scalar-ReadWrite,string
+Device.IP.Diagnostics.IPPing.NumberOfRepetitions,device.ip.diagnostics.ip-ping.number-of-repetitions,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.IPPing.Timeout,device.ip.diagnostics.ip-ping.timeout,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.IPPing.DataBlockSize,device.ip.diagnostics.ip-ping.data-block-size,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.IPPing.DSCP,device.ip.diagnostics.ip-ping.dscp,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.IPPing.IPAddressUsed,device.ip.diagnostics.ip-ping.ip-address-used,Scalar-ReadOnly,string
+Device.IP.Diagnostics.IPPing.SuccessCount,device.ip.diagnostics.ip-ping.success-count,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.FailureCount,device.ip.diagnostics.ip-ping.failure-count,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.AverageResponseTime,device.ip.diagnostics.ip-ping.average-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.MinimumResponseTime,device.ip.diagnostics.ip-ping.minimum-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.MaximumResponseTime,device.ip.diagnostics.ip-ping.maximum-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.AverageResponseTimeDetailed,device.ip.diagnostics.ip-ping.average-response-time-detailed,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.MinimumResponseTimeDetailed,device.ip.diagnostics.ip-ping.minimum-response-time-detailed,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.IPPing.MaximumResponseTimeDetailed,device.ip.diagnostics.ip-ping.maximum-response-time-detailed,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.TraceRoute.,device.ip.diagnostics.trace-route,ScalarObject,object
+Device.IP.Diagnostics.TraceRoute.DiagnosticsState,device.ip.diagnostics.trace-route.diagnostics-state,Scalar-ReadWrite,string
+Device.IP.Diagnostics.TraceRoute.Interface,device.ip.diagnostics.trace-route.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.TraceRoute.ProtocolVersion,device.ip.diagnostics.trace-route.protocol-version,Scalar-ReadWrite,string
+Device.IP.Diagnostics.TraceRoute.Host,device.ip.diagnostics.trace-route.host,Scalar-ReadWrite,string
+Device.IP.Diagnostics.TraceRoute.NumberOfTries,device.ip.diagnostics.trace-route.number-of-tries,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.TraceRoute.Timeout,device.ip.diagnostics.trace-route.timeout,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.TraceRoute.DataBlockSize,device.ip.diagnostics.trace-route.data-block-size,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.TraceRoute.DSCP,device.ip.diagnostics.trace-route.dscp,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.TraceRoute.MaxHopCount,device.ip.diagnostics.trace-route.max-hop-count,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.TraceRoute.IPAddressUsed,device.ip.diagnostics.trace-route.ip-address-used,Scalar-ReadOnly,string
+Device.IP.Diagnostics.TraceRoute.ResponseTime,device.ip.diagnostics.trace-route.response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.TraceRoute.RouteHopsNumberOfEntries,device.ip.diagnostics.trace-route.route-hops-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.TraceRoute.RouteHops.{i}.,device.ip.diagnostics.trace-route.route-hops.{i}.,TabularObject,object
+Device.IP.Diagnostics.TraceRoute.RouteHops.{i}.Host,device.ip.diagnostics.trace-route.route-hops.{i}.host,Tabular-ReadOnly,string
+Device.IP.Diagnostics.TraceRoute.RouteHops.{i}.HostAddress,device.ip.diagnostics.trace-route.route-hops.{i}.host-address,Tabular-ReadOnly,string
+Device.IP.Diagnostics.TraceRoute.RouteHops.{i}.ErrorCode,device.ip.diagnostics.trace-route.route-hops.{i}.error-code,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.TraceRoute.RouteHops.{i}.RTTimes,device.ip.diagnostics.trace-route.route-hops.{i}.rt-times,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.,device.ip.diagnostics.download-diagnostics,ScalarObject,object
+Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState,device.ip.diagnostics.download-diagnostics.diagnostics-state,Scalar-ReadWrite,string
+Device.IP.Diagnostics.DownloadDiagnostics.Interface,device.ip.diagnostics.download-diagnostics.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.DownloadDiagnostics.DownloadURL,device.ip.diagnostics.download-diagnostics.download-url,Scalar-ReadWrite,string
+Device.IP.Diagnostics.DownloadDiagnostics.DownloadTransports,device.ip.diagnostics.download-diagnostics.download-transports,Scalar-ReadOnly,string
+Device.IP.Diagnostics.DownloadDiagnostics.DownloadDiagnosticMaxConnections,device.ip.diagnostics.download-diagnostics.download-diagnostic-max-connections,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.DownloadDiagnosticsMaxIncrementalResult,device.ip.diagnostics.download-diagnostics.download-diagnostics-max-incremental-result,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.DSCP,device.ip.diagnostics.download-diagnostics.dscp,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.EthernetPriority,device.ip.diagnostics.download-diagnostics.ethernet-priority,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestDuration,device.ip.diagnostics.download-diagnostics.time-based-test-duration,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestMeasurementInterval,device.ip.diagnostics.download-diagnostics.time-based-test-measurement-interval,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TimeBasedTestMeasurementOffset,device.ip.diagnostics.download-diagnostics.time-based-test-measurement-offset,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.ProtocolVersion,device.ip.diagnostics.download-diagnostics.protocol-version,Scalar-ReadWrite,string
+Device.IP.Diagnostics.DownloadDiagnostics.NumberOfConnections,device.ip.diagnostics.download-diagnostics.number-of-connections,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.IPAddressUsed,device.ip.diagnostics.download-diagnostics.ip-address-used,Scalar-ReadOnly,string
+Device.IP.Diagnostics.DownloadDiagnostics.ROMTime,device.ip.diagnostics.download-diagnostics.rom-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.BOMTime,device.ip.diagnostics.download-diagnostics.bom-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.EOMTime,device.ip.diagnostics.download-diagnostics.eom-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.TestBytesReceived,device.ip.diagnostics.download-diagnostics.test-bytes-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TotalBytesReceived,device.ip.diagnostics.download-diagnostics.total-bytes-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TotalBytesSent,device.ip.diagnostics.download-diagnostics.total-bytes-sent,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TestBytesReceivedUnderFullLoading,device.ip.diagnostics.download-diagnostics.test-bytes-received-under-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TotalBytesReceivedUnderFullLoading,device.ip.diagnostics.download-diagnostics.total-bytes-received-under-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TotalBytesSentUnderFullLoading,device.ip.diagnostics.download-diagnostics.total-bytes-sent-under-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.PeriodOfFullLoading,device.ip.diagnostics.download-diagnostics.period-of-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.TCPOpenRequestTime,device.ip.diagnostics.download-diagnostics.tcp-open-request-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.TCPOpenResponseTime,device.ip.diagnostics.download-diagnostics.tcp-open-response-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResultNumberOfEntries,device.ip.diagnostics.download-diagnostics.per-connection-result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.EnablePerConnectionResults,device.ip.diagnostics.download-diagnostics.enable-per-connection-results,Scalar-ReadWrite,boolean
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResultNumberOfEntries,device.ip.diagnostics.download-diagnostics.incremental-result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.,TabularObject,object
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.ROMTime,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.rom-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.BOMTime,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.bom-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.EOMTime,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.eom-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.TestBytesReceived,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.test-bytes-received,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.TotalBytesReceived,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.total-bytes-received,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.TotalBytesSent,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.total-bytes-sent,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.TCPOpenRequestTime,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.tcp-open-request-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.PerConnectionResult.{i}.TCPOpenResponseTime,device.ip.diagnostics.download-diagnostics.per-connection-result.{i}.tcp-open-response-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResult.{i}.,device.ip.diagnostics.download-diagnostics.incremental-result.{i}.,TabularObject,object
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResult.{i}.TestBytesReceived,device.ip.diagnostics.download-diagnostics.incremental-result.{i}.test-bytes-received,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResult.{i}.TotalBytesReceived,device.ip.diagnostics.download-diagnostics.incremental-result.{i}.total-bytes-received,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResult.{i}.TotalBytesSent,device.ip.diagnostics.download-diagnostics.incremental-result.{i}.total-bytes-sent,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResult.{i}.StartTime,device.ip.diagnostics.download-diagnostics.incremental-result.{i}.start-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.DownloadDiagnostics.IncrementalResult.{i}.EndTime,device.ip.diagnostics.download-diagnostics.incremental-result.{i}.end-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.,device.ip.diagnostics.upload-diagnostics,ScalarObject,object
+Device.IP.Diagnostics.UploadDiagnostics.DiagnosticsState,device.ip.diagnostics.upload-diagnostics.diagnostics-state,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UploadDiagnostics.Interface,device.ip.diagnostics.upload-diagnostics.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UploadDiagnostics.UploadURL,device.ip.diagnostics.upload-diagnostics.upload-url,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UploadDiagnostics.UploadTransports,device.ip.diagnostics.upload-diagnostics.upload-transports,Scalar-ReadOnly,string
+Device.IP.Diagnostics.UploadDiagnostics.UploadDiagnosticsMaxConnections,device.ip.diagnostics.upload-diagnostics.upload-diagnostics-max-connections,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.UploadDiagnosticsMaxIncrementalResult,device.ip.diagnostics.upload-diagnostics.upload-diagnostics-max-incremental-result,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.DSCP,device.ip.diagnostics.upload-diagnostics.dscp,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.EthernetPriority,device.ip.diagnostics.upload-diagnostics.ethernet-priority,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TestFileLength,device.ip.diagnostics.upload-diagnostics.test-file-length,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestDuration,device.ip.diagnostics.upload-diagnostics.time-based-test-duration,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestMeasurementInterval,device.ip.diagnostics.upload-diagnostics.time-based-test-measurement-interval,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TimeBasedTestMeasurementOffset,device.ip.diagnostics.upload-diagnostics.time-based-test-measurement-offset,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.ProtocolVersion,device.ip.diagnostics.upload-diagnostics.protocol-version,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UploadDiagnostics.NumberOfConnections,device.ip.diagnostics.upload-diagnostics.number-of-connections,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.IPAddressUsed,device.ip.diagnostics.upload-diagnostics.ip-address-used,Scalar-ReadOnly,string
+Device.IP.Diagnostics.UploadDiagnostics.ROMTime,device.ip.diagnostics.upload-diagnostics.rom-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.BOMTime,device.ip.diagnostics.upload-diagnostics.bom-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.EOMTime,device.ip.diagnostics.upload-diagnostics.eom-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.TestBytesSent,device.ip.diagnostics.upload-diagnostics.test-bytes-sent,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TotalBytesReceived,device.ip.diagnostics.upload-diagnostics.total-bytes-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TotalBytesSent,device.ip.diagnostics.upload-diagnostics.total-bytes-sent,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TestBytesSentUnderFullLoading,device.ip.diagnostics.upload-diagnostics.test-bytes-sent-under-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TotalBytesReceivedUnderFullLoading,device.ip.diagnostics.upload-diagnostics.total-bytes-received-under-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TotalBytesSentUnderFullLoading,device.ip.diagnostics.upload-diagnostics.total-bytes-sent-under-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.PeriodOfFullLoading,device.ip.diagnostics.upload-diagnostics.period-of-full-loading,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.TCPOpenRequestTime,device.ip.diagnostics.upload-diagnostics.tcp-open-request-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.TCPOpenResponseTime,device.ip.diagnostics.upload-diagnostics.tcp-open-response-time,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResultNumberOfEntries,device.ip.diagnostics.upload-diagnostics.per-connection-result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.EnablePerConnectionResults,device.ip.diagnostics.upload-diagnostics.enable-per-connection-results,Scalar-ReadWrite,boolean
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResultNumberOfEntries,device.ip.diagnostics.upload-diagnostics.incremental-result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.,TabularObject,object
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.ROMTime,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.rom-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.BOMTime,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.bom-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.EOMTime,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.eom-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.TestBytesSent,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.test-bytes-sent,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.TotalBytesReceived,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.total-bytes-received,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.TotalBytesSent,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.total-bytes-sent,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.TCPOpenRequestTime,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.tcp-open-request-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.PerConnectionResult.{i}.TCPOpenResponseTime,device.ip.diagnostics.upload-diagnostics.per-connection-result.{i}.tcp-open-response-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResult.{i}.,device.ip.diagnostics.upload-diagnostics.incremental-result.{i}.,TabularObject,object
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResult.{i}.TestBytesSent,device.ip.diagnostics.upload-diagnostics.incremental-result.{i}.test-bytes-sent,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResult.{i}.TotalBytesReceived,device.ip.diagnostics.upload-diagnostics.incremental-result.{i}.total-bytes-received,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResult.{i}.TotalBytesSent,device.ip.diagnostics.upload-diagnostics.incremental-result.{i}.total-bytes-sent,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResult.{i}.StartTime,device.ip.diagnostics.upload-diagnostics.incremental-result.{i}.start-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UploadDiagnostics.IncrementalResult.{i}.EndTime,device.ip.diagnostics.upload-diagnostics.incremental-result.{i}.end-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UDPEchoConfig.,device.ip.diagnostics.udp-echo-config,ScalarObject,object
+Device.IP.Diagnostics.UDPEchoConfig.Enable,device.ip.diagnostics.udp-echo-config.enable,Scalar-ReadWrite,boolean
+Device.IP.Diagnostics.UDPEchoConfig.Interface,device.ip.diagnostics.udp-echo-config.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UDPEchoConfig.SourceIPAddress,device.ip.diagnostics.udp-echo-config.source-ip-address,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UDPEchoConfig.UDPPort,device.ip.diagnostics.udp-echo-config.udp-port,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoConfig.EchoPlusEnabled,device.ip.diagnostics.udp-echo-config.echo-plus-enabled,Scalar-ReadWrite,boolean
+Device.IP.Diagnostics.UDPEchoConfig.EchoPlusSupported,device.ip.diagnostics.udp-echo-config.echo-plus-supported,Scalar-ReadOnly,boolean
+Device.IP.Diagnostics.UDPEchoConfig.PacketsReceived,device.ip.diagnostics.udp-echo-config.packets-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoConfig.PacketsResponded,device.ip.diagnostics.udp-echo-config.packets-responded,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoConfig.BytesReceived,device.ip.diagnostics.udp-echo-config.bytes-received,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoConfig.BytesResponded,device.ip.diagnostics.udp-echo-config.bytes-responded,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoConfig.TimeFirstPacketReceived,device.ip.diagnostics.udp-echo-config.time-first-packet-received,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UDPEchoConfig.TimeLastPacketReceived,device.ip.diagnostics.udp-echo-config.time-last-packet-received,Scalar-ReadOnly,dateTime
+Device.IP.Diagnostics.UDPEchoDiagnostics.,device.ip.diagnostics.udp-echo-diagnostics,ScalarObject,object
+Device.IP.Diagnostics.UDPEchoDiagnostics.DiagnosticsState,device.ip.diagnostics.udp-echo-diagnostics.diagnostics-state,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UDPEchoDiagnostics.Interface,device.ip.diagnostics.udp-echo-diagnostics.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UDPEchoDiagnostics.Host,device.ip.diagnostics.udp-echo-diagnostics.host,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UDPEchoDiagnostics.Port,device.ip.diagnostics.udp-echo-diagnostics.port,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.NumberOfRepetitions,device.ip.diagnostics.udp-echo-diagnostics.number-of-repetitions,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.Timeout,device.ip.diagnostics.udp-echo-diagnostics.timeout,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.DataBlockSize,device.ip.diagnostics.udp-echo-diagnostics.data-block-size,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.DSCP,device.ip.diagnostics.udp-echo-diagnostics.dscp,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.InterTransmissionTime,device.ip.diagnostics.udp-echo-diagnostics.inter-transmission-time,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.ProtocolVersion,device.ip.diagnostics.udp-echo-diagnostics.protocol-version,Scalar-ReadWrite,string
+Device.IP.Diagnostics.UDPEchoDiagnostics.IPAddressUsed,device.ip.diagnostics.udp-echo-diagnostics.ip-address-used,Scalar-ReadOnly,string
+Device.IP.Diagnostics.UDPEchoDiagnostics.SuccessCount,device.ip.diagnostics.udp-echo-diagnostics.success-count,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.FailureCount,device.ip.diagnostics.udp-echo-diagnostics.failure-count,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.AverageResponseTime,device.ip.diagnostics.udp-echo-diagnostics.average-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.MinimumResponseTime,device.ip.diagnostics.udp-echo-diagnostics.minimum-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.MaximumResponseTime,device.ip.diagnostics.udp-echo-diagnostics.maximum-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.EnableIndividualPacketResults,device.ip.diagnostics.udp-echo-diagnostics.enable-individual-packet-results,Scalar-ReadWrite,boolean
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResultNumberOfEntries,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.UDPEchoDiagnosticsMaxResults,device.ip.diagnostics.udp-echo-diagnostics.udp-echo-diagnostics-max-results,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.,TabularObject,object
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.PacketSuccess,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.packet-success,Tabular-ReadOnly,boolean
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.PacketSendTime,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.packet-send-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.PacketReceiveTime,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.packet-receive-time,Tabular-ReadOnly,dateTime
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.TestGenSN,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.test-gen-sn,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.TestRespSN,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.test-resp-sn,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.TestRespRcvTimeStamp,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.test-resp-rcv-time-stamp,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.TestRespReplyTimeStamp,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.test-resp-reply-time-stamp,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.UDPEchoDiagnostics.IndividualPacketResult.{i}.TestRespReplyFailureCount,device.ip.diagnostics.udp-echo-diagnostics.individual-packet-result.{i}.test-resp-reply-failure-count,Tabular-ReadOnly,unsignedInt
+Device.IP.Diagnostics.ServerSelectionDiagnostics.,device.ip.diagnostics.server-selection-diagnostics,ScalarObject,object
+Device.IP.Diagnostics.ServerSelectionDiagnostics.DiagnosticsState,device.ip.diagnostics.server-selection-diagnostics.diagnostics-state,Scalar-ReadWrite,string
+Device.IP.Diagnostics.ServerSelectionDiagnostics.Interface,device.ip.diagnostics.server-selection-diagnostics.interface,Scalar-ReadWrite,string
+Device.IP.Diagnostics.ServerSelectionDiagnostics.ProtocolVersion,device.ip.diagnostics.server-selection-diagnostics.protocol-version,Scalar-ReadWrite,string
+Device.IP.Diagnostics.ServerSelectionDiagnostics.Protocol,device.ip.diagnostics.server-selection-diagnostics.protocol,Scalar-ReadWrite,string
+Device.IP.Diagnostics.ServerSelectionDiagnostics.HostList,device.ip.diagnostics.server-selection-diagnostics.host-list,Scalar-ReadWrite,string
+Device.IP.Diagnostics.ServerSelectionDiagnostics.NumberOfRepetitions,device.ip.diagnostics.server-selection-diagnostics.number-of-repetitions,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.ServerSelectionDiagnostics.Timeout,device.ip.diagnostics.server-selection-diagnostics.timeout,Scalar-ReadWrite,unsignedInt
+Device.IP.Diagnostics.ServerSelectionDiagnostics.FastestHost,device.ip.diagnostics.server-selection-diagnostics.fastest-host,Scalar-ReadOnly,string
+Device.IP.Diagnostics.ServerSelectionDiagnostics.MinimumResponseTime,device.ip.diagnostics.server-selection-diagnostics.minimum-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.ServerSelectionDiagnostics.AverageResponseTime,device.ip.diagnostics.server-selection-diagnostics.average-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.ServerSelectionDiagnostics.MaximumResponseTime,device.ip.diagnostics.server-selection-diagnostics.maximum-response-time,Scalar-ReadOnly,unsignedInt
+Device.IP.Diagnostics.ServerSelectionDiagnostics.IPAddressUsed,device.ip.diagnostics.server-selection-diagnostics.ip-address-used,Scalar-ReadOnly,string
+Device.LLDP.,device.lldp,ScalarObject,object
+Device.LLDP.Discovery.,device.lldp.discovery,ScalarObject,object
+Device.LLDP.Discovery.DeviceNumberOfEntries,device.lldp.discovery.device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.,device.lldp.discovery.device.{i}.,TabularObject,object
+Device.LLDP.Discovery.Device.{i}.Interface,device.lldp.discovery.device.{i}.interface,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.ChassisIDSubtype,device.lldp.discovery.device.{i}.chassis-id-subtype,Tabular-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.ChassisID,device.lldp.discovery.device.{i}.chassis-id,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.Host,device.lldp.discovery.device.{i}.host,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.PortNumberOfEntries,device.lldp.discovery.device.{i}.port-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.Port.{i}.,device.lldp.discovery.device.{i}.port.{i}.,TabularObject,object
+Device.LLDP.Discovery.Device.{i}.Port.{i}.PortIDSubtype,device.lldp.discovery.device.{i}.port.{i}.port-id-subtype,Tabular-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.Port.{i}.PortID,device.lldp.discovery.device.{i}.port.{i}.port-id,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.Port.{i}.TTL,device.lldp.discovery.device.{i}.port.{i}.ttl,Tabular-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.Port.{i}.PortDescription,device.lldp.discovery.device.{i}.port.{i}.port-description,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.Port.{i}.MACAddressList,device.lldp.discovery.device.{i}.port.{i}.mac-address-list,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.Port.{i}.LastUpdate,device.lldp.discovery.device.{i}.port.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.LLDP.Discovery.Device.{i}.Port.{i}.LinkInformation.,device.lldp.discovery.device.{i}.port.{i}.link-information,ScalarObject,object
+Device.LLDP.Discovery.Device.{i}.Port.{i}.LinkInformation.InterfaceType,device.lldp.discovery.device.{i}.port.{i}.link-information.interface-type,Scalar-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.Port.{i}.LinkInformation.MACForwardingTable,device.lldp.discovery.device.{i}.port.{i}.link-information.mac-forwarding-table,Scalar-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.,device.lldp.discovery.device.{i}.device-information,ScalarObject,object
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.DeviceCategory,device.lldp.discovery.device.{i}.device-information.device-category,Scalar-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.ManufacturerOUI,device.lldp.discovery.device.{i}.device-information.manufacturer-oui,Scalar-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.ModelName,device.lldp.discovery.device.{i}.device-information.model-name,Scalar-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.ModelNumber,device.lldp.discovery.device.{i}.device-information.model-number,Scalar-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.VendorSpecificNumberOfEntries,device.lldp.discovery.device.{i}.device-information.vendor-specific-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.VendorSpecific.{i}.,device.lldp.discovery.device.{i}.device-information.vendor-specific.{i}.,TabularObject,object
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.VendorSpecific.{i}.OrganizationCode,device.lldp.discovery.device.{i}.device-information.vendor-specific.{i}.organization-code,Tabular-ReadOnly,string
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.VendorSpecific.{i}.InformationType,device.lldp.discovery.device.{i}.device-information.vendor-specific.{i}.information-type,Tabular-ReadOnly,unsignedInt
+Device.LLDP.Discovery.Device.{i}.DeviceInformation.VendorSpecific.{i}.Information,device.lldp.discovery.device.{i}.device-information.vendor-specific.{i}.information,Tabular-ReadOnly,string
+Device.IPsec.,device.i-psec,ScalarObject,object
+Device.IPsec.Enable,device.i-psec.enable,Scalar-ReadWrite,boolean
+Device.IPsec.Status,device.i-psec.status,Scalar-ReadOnly,string
+Device.IPsec.AHSupported,device.i-psec.ah-supported,Scalar-ReadOnly,boolean
+Device.IPsec.IKEv2SupportedEncryptionAlgorithms,device.i-psec.ikev2-supported-encryption-algorithms,Scalar-ReadOnly,string
+Device.IPsec.ESPSupportedEncryptionAlgorithms,device.i-psec.esp-supported-encryption-algorithms,Scalar-ReadOnly,string
+Device.IPsec.IKEv2SupportedPseudoRandomFunctions,device.i-psec.ikev2-supported-pseudo-random-functions,Scalar-ReadOnly,string
+Device.IPsec.SupportedIntegrityAlgorithms,device.i-psec.supported-integrity-algorithms,Scalar-ReadOnly,string
+Device.IPsec.SupportedDiffieHellmanGroupTransforms,device.i-psec.supported-diffie-hellman-group-transforms,Scalar-ReadOnly,string
+Device.IPsec.MaxFilterEntries,device.i-psec.max-filter-entries,Scalar-ReadOnly,unsignedInt
+Device.IPsec.MaxProfileEntries,device.i-psec.max-profile-entries,Scalar-ReadOnly,unsignedInt
+Device.IPsec.FilterNumberOfEntries,device.i-psec.filter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IPsec.ProfileNumberOfEntries,device.i-psec.profile-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IPsec.TunnelNumberOfEntries,device.i-psec.tunnel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SANumberOfEntries,device.i-psec.ikev2-sa-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.,device.i-psec.stats,ScalarObject,object
+Device.IPsec.Stats.NegotiationFailures,device.i-psec.stats.negotiation-failures,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.BytesSent,device.i-psec.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.IPsec.Stats.BytesReceived,device.i-psec.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.IPsec.Stats.PacketsSent,device.i-psec.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IPsec.Stats.PacketsReceived,device.i-psec.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.IPsec.Stats.ErrorsSent,device.i-psec.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.UnknownSPIErrors,device.i-psec.stats.unknown-spi-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.DecryptionErrors,device.i-psec.stats.decryption-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.IntegrityErrors,device.i-psec.stats.integrity-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.ReplayErrors,device.i-psec.stats.replay-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.PolicyErrors,device.i-psec.stats.policy-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Stats.OtherReceiveErrors,device.i-psec.stats.other-receive-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Filter.{i}.,device.i-psec.filter.{i}.,TabularObject,object
+Device.IPsec.Filter.{i}.Enable,device.i-psec.filter.{i}.enable,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.Status,device.i-psec.filter.{i}.status,Tabular-ReadOnly,string
+Device.IPsec.Filter.{i}.Order,device.i-psec.filter.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Filter.{i}.Alias,device.i-psec.filter.{i}.alias,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.Interface,device.i-psec.filter.{i}.interface,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.AllInterfaces,device.i-psec.filter.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.DestIP,device.i-psec.filter.{i}.dest-ip,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.DestMask,device.i-psec.filter.{i}.dest-mask,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.DestIPExclude,device.i-psec.filter.{i}.dest-ip-exclude,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.SourceIP,device.i-psec.filter.{i}.source-ip,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.SourceMask,device.i-psec.filter.{i}.source-mask,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.SourceIPExclude,device.i-psec.filter.{i}.source-ip-exclude,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.Protocol,device.i-psec.filter.{i}.protocol,Tabular-ReadWrite,int
+Device.IPsec.Filter.{i}.ProtocolExclude,device.i-psec.filter.{i}.protocol-exclude,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.DestPort,device.i-psec.filter.{i}.dest-port,Tabular-ReadWrite,int
+Device.IPsec.Filter.{i}.DestPortRangeMax,device.i-psec.filter.{i}.dest-port-range-max,Tabular-ReadWrite,int
+Device.IPsec.Filter.{i}.DestPortExclude,device.i-psec.filter.{i}.dest-port-exclude,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.SourcePort,device.i-psec.filter.{i}.source-port,Tabular-ReadWrite,int
+Device.IPsec.Filter.{i}.SourcePortRangeMax,device.i-psec.filter.{i}.source-port-range-max,Tabular-ReadWrite,int
+Device.IPsec.Filter.{i}.SourcePortExclude,device.i-psec.filter.{i}.source-port-exclude,Tabular-ReadWrite,boolean
+Device.IPsec.Filter.{i}.ProcessingChoice,device.i-psec.filter.{i}.processing-choice,Tabular-ReadWrite,string
+Device.IPsec.Filter.{i}.Profile,device.i-psec.filter.{i}.profile,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.,device.i-psec.profile.{i}.,TabularObject,object
+Device.IPsec.Profile.{i}.Alias,device.i-psec.profile.{i}.alias,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.MaxChildSAs,device.i-psec.profile.{i}.max-child-s-as,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.RemoteEndpoints,device.i-psec.profile.{i}.remote-endpoints,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.ForwardingPolicy,device.i-psec.profile.{i}.forwarding-policy,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.Protocol,device.i-psec.profile.{i}.protocol,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.IKEv2AuthenticationMethod,device.i-psec.profile.{i}.ikev2-authentication-method,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.IKEv2AllowedEncryptionAlgorithms,device.i-psec.profile.{i}.ikev2-allowed-encryption-algorithms,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.ESPAllowedEncryptionAlgorithms,device.i-psec.profile.{i}.esp-allowed-encryption-algorithms,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.IKEv2AllowedPseudoRandomFunctions,device.i-psec.profile.{i}.ikev2-allowed-pseudo-random-functions,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.IKEv2AllowedIntegrityAlgorithms,device.i-psec.profile.{i}.ikev2-allowed-integrity-algorithms,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.AHAllowedIntegrityAlgorithms,device.i-psec.profile.{i}.ah-allowed-integrity-algorithms,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.ESPAllowedIntegrityAlgorithms,device.i-psec.profile.{i}.esp-allowed-integrity-algorithms,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.IKEv2AllowedDiffieHellmanGroupTransforms,device.i-psec.profile.{i}.ikev2-allowed-diffie-hellman-group-transforms,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.IKEv2DeadPeerDetectionTimeout,device.i-psec.profile.{i}.ikev2-dead-peer-detection-timeout,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.IKEv2NATTKeepaliveTimeout,device.i-psec.profile.{i}.ikev2-natt-keepalive-timeout,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.AntiReplayWindowSize,device.i-psec.profile.{i}.anti-replay-window-size,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.DoNotFragment,device.i-psec.profile.{i}.do-not-fragment,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.DSCPMarkPolicy,device.i-psec.profile.{i}.dscp-mark-policy,Tabular-ReadWrite,int
+Device.IPsec.Profile.{i}.IKEv2SATrafficLimit,device.i-psec.profile.{i}.ikev2-sa-traffic-limit,Tabular-ReadWrite,unsignedLong
+Device.IPsec.Profile.{i}.IKEv2SATimeLimit,device.i-psec.profile.{i}.ikev2-sa-time-limit,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.IKEv2SAExpiryAction,device.i-psec.profile.{i}.ikev2-sa-expiry-action,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.ChildSATrafficLimit,device.i-psec.profile.{i}.child-sa-traffic-limit,Tabular-ReadWrite,unsignedLong
+Device.IPsec.Profile.{i}.ChildSATimeLimit,device.i-psec.profile.{i}.child-sa-time-limit,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.ChildSAExpiryAction,device.i-psec.profile.{i}.child-sa-expiry-action,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.SentCPAttrNumberOfEntries,device.i-psec.profile.{i}.sent-cp-attr-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IPsec.Profile.{i}.SentCPAttr.{i}.,device.i-psec.profile.{i}.sent-cp-attr.{i}.,TabularObject,object
+Device.IPsec.Profile.{i}.SentCPAttr.{i}.Enable,device.i-psec.profile.{i}.sent-cp-attr.{i}.enable,Tabular-ReadWrite,boolean
+Device.IPsec.Profile.{i}.SentCPAttr.{i}.Alias,device.i-psec.profile.{i}.sent-cp-attr.{i}.alias,Tabular-ReadWrite,string
+Device.IPsec.Profile.{i}.SentCPAttr.{i}.Type,device.i-psec.profile.{i}.sent-cp-attr.{i}.type,Tabular-ReadWrite,unsignedInt
+Device.IPsec.Profile.{i}.SentCPAttr.{i}.Value,device.i-psec.profile.{i}.sent-cp-attr.{i}.value,Tabular-ReadWrite,string
+Device.IPsec.Tunnel.{i}.,device.i-psec.tunnel.{i}.,TabularObject,object
+Device.IPsec.Tunnel.{i}.Alias,device.i-psec.tunnel.{i}.alias,Tabular-ReadWrite,string
+Device.IPsec.Tunnel.{i}.TunnelInterface,device.i-psec.tunnel.{i}.tunnel-interface,Tabular-ReadOnly,string
+Device.IPsec.Tunnel.{i}.TunneledInterface,device.i-psec.tunnel.{i}.tunneled-interface,Tabular-ReadOnly,string
+Device.IPsec.Tunnel.{i}.Filters,device.i-psec.tunnel.{i}.filters,Tabular-ReadOnly,string
+Device.IPsec.Tunnel.{i}.Stats.,device.i-psec.tunnel.{i}.stats,ScalarObject,object
+Device.IPsec.Tunnel.{i}.Stats.DecryptionErrors,device.i-psec.tunnel.{i}.stats.decryption-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Tunnel.{i}.Stats.IntegrityErrors,device.i-psec.tunnel.{i}.stats.integrity-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Tunnel.{i}.Stats.ReplayErrors,device.i-psec.tunnel.{i}.stats.replay-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Tunnel.{i}.Stats.PolicyErrors,device.i-psec.tunnel.{i}.stats.policy-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.Tunnel.{i}.Stats.OtherReceiveErrors,device.i-psec.tunnel.{i}.stats.other-receive-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.,device.i-psec.ikev2-sa.{i}.,TabularObject,object
+Device.IPsec.IKEv2SA.{i}.Status,device.i-psec.ikev2-sa.{i}.status,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.Alias,device.i-psec.ikev2-sa.{i}.alias,Tabular-ReadWrite,string
+Device.IPsec.IKEv2SA.{i}.Tunnel,device.i-psec.ikev2-sa.{i}.tunnel,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.LocalAddress,device.i-psec.ikev2-sa.{i}.local-address,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.RemoteAddress,device.i-psec.ikev2-sa.{i}.remote-address,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.EncryptionAlgorithm,device.i-psec.ikev2-sa.{i}.encryption-algorithm,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.EncryptionKeyLength,device.i-psec.ikev2-sa.{i}.encryption-key-length,Tabular-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.PseudoRandomFunction,device.i-psec.ikev2-sa.{i}.pseudo-random-function,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.IntegrityAlgorithm,device.i-psec.ikev2-sa.{i}.integrity-algorithm,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.DiffieHellmanGroupTransform,device.i-psec.ikev2-sa.{i}.diffie-hellman-group-transform,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.CreationTime,device.i-psec.ikev2-sa.{i}.creation-time,Tabular-ReadOnly,dateTime
+Device.IPsec.IKEv2SA.{i}.NATDetected,device.i-psec.ikev2-sa.{i}.nat-detected,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.ReceivedCPAttrNumberOfEntries,device.i-psec.ikev2-sa.{i}.received-cp-attr-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSANumberOfEntries,device.i-psec.ikev2-sa.{i}.child-sa-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.Stats.,device.i-psec.ikev2-sa.{i}.stats,ScalarObject,object
+Device.IPsec.IKEv2SA.{i}.Stats.BytesSent,device.i-psec.ikev2-sa.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.Stats.BytesReceived,device.i-psec.ikev2-sa.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.Stats.PacketsSent,device.i-psec.ikev2-sa.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.Stats.PacketsReceived,device.i-psec.ikev2-sa.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.Stats.ErrorsSent,device.i-psec.ikev2-sa.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.Stats.DecryptionErrors,device.i-psec.ikev2-sa.{i}.stats.decryption-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.Stats.IntegrityErrors,device.i-psec.ikev2-sa.{i}.stats.integrity-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.Stats.OtherReceiveErrors,device.i-psec.ikev2-sa.{i}.stats.other-receive-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ReceivedCPAttr.{i}.,device.i-psec.ikev2-sa.{i}.received-cp-attr.{i}.,TabularObject,object
+Device.IPsec.IKEv2SA.{i}.ReceivedCPAttr.{i}.Type,device.i-psec.ikev2-sa.{i}.received-cp-attr.{i}.type,Tabular-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ReceivedCPAttr.{i}.Value,device.i-psec.ikev2-sa.{i}.received-cp-attr.{i}.value,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.,device.i-psec.ikev2-sa.{i}.child-sa.{i}.,TabularObject,object
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Status,device.i-psec.ikev2-sa.{i}.child-sa.{i}.status,Tabular-ReadOnly,string
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Alias,device.i-psec.ikev2-sa.{i}.child-sa.{i}.alias,Tabular-ReadWrite,string
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.InboundSPI,device.i-psec.ikev2-sa.{i}.child-sa.{i}.inbound-spi,Tabular-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.OutboundSPI,device.i-psec.ikev2-sa.{i}.child-sa.{i}.outbound-spi,Tabular-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.CreationTime,device.i-psec.ikev2-sa.{i}.child-sa.{i}.creation-time,Tabular-ReadOnly,dateTime
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats,ScalarObject,object
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.BytesSent,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.BytesReceived,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.PacketsSent,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.PacketsReceived,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.ErrorsSent,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.DecryptionErrors,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.decryption-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.IntegrityErrors,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.integrity-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.ReplayErrors,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.replay-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.PolicyErrors,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.policy-errors,Scalar-ReadOnly,unsignedInt
+Device.IPsec.IKEv2SA.{i}.ChildSA.{i}.Stats.OtherReceiveErrors,device.i-psec.ikev2-sa.{i}.child-sa.{i}.stats.other-receive-errors,Scalar-ReadOnly,unsignedInt
+Device.GRE.,device.gre,ScalarObject,object
+Device.GRE.TunnelNumberOfEntries,device.gre.tunnel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.GRE.FilterNumberOfEntries,device.gre.filter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.,device.gre.tunnel.{i}.,TabularObject,object
+Device.GRE.Tunnel.{i}.Enable,device.gre.tunnel.{i}.enable,Tabular-ReadWrite,boolean
+Device.GRE.Tunnel.{i}.Status,device.gre.tunnel.{i}.status,Tabular-ReadOnly,string
+Device.GRE.Tunnel.{i}.Alias,device.gre.tunnel.{i}.alias,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.RemoteEndpoints,device.gre.tunnel.{i}.remote-endpoints,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.KeepAlivePolicy,device.gre.tunnel.{i}.keep-alive-policy,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.KeepAliveTimeout,device.gre.tunnel.{i}.keep-alive-timeout,Tabular-ReadWrite,unsignedInt
+Device.GRE.Tunnel.{i}.KeepAliveThreshold,device.gre.tunnel.{i}.keep-alive-threshold,Tabular-ReadWrite,unsignedInt
+Device.GRE.Tunnel.{i}.DeliveryHeaderProtocol,device.gre.tunnel.{i}.delivery-header-protocol,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.DefaultDSCPMark,device.gre.tunnel.{i}.default-dscp-mark,Tabular-ReadWrite,unsignedInt
+Device.GRE.Tunnel.{i}.ConnectedRemoteEndpoint,device.gre.tunnel.{i}.connected-remote-endpoint,Tabular-ReadOnly,string
+Device.GRE.Tunnel.{i}.InterfaceNumberOfEntries,device.gre.tunnel.{i}.interface-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Stats.,device.gre.tunnel.{i}.stats,ScalarObject,object
+Device.GRE.Tunnel.{i}.Stats.KeepAliveSent,device.gre.tunnel.{i}.stats.keep-alive-sent,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Stats.KeepAliveReceived,device.gre.tunnel.{i}.stats.keep-alive-received,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Stats.BytesSent,device.gre.tunnel.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Stats.BytesReceived,device.gre.tunnel.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Stats.PacketsSent,device.gre.tunnel.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Stats.PacketsReceived,device.gre.tunnel.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Stats.ErrorsSent,device.gre.tunnel.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Stats.ErrorsReceived,device.gre.tunnel.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.,device.gre.tunnel.{i}.interface.{i}.,TabularObject,object
+Device.GRE.Tunnel.{i}.Interface.{i}.Enable,device.gre.tunnel.{i}.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.GRE.Tunnel.{i}.Interface.{i}.Status,device.gre.tunnel.{i}.interface.{i}.status,Tabular-ReadOnly,string
+Device.GRE.Tunnel.{i}.Interface.{i}.Alias,device.gre.tunnel.{i}.interface.{i}.alias,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.Interface.{i}.Name,device.gre.tunnel.{i}.interface.{i}.name,Tabular-ReadOnly,string
+Device.GRE.Tunnel.{i}.Interface.{i}.LastChange,device.gre.tunnel.{i}.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.LowerLayers,device.gre.tunnel.{i}.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.Interface.{i}.ProtocolIdOverride,device.gre.tunnel.{i}.interface.{i}.protocol-id-override,Tabular-ReadWrite,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.UseChecksum,device.gre.tunnel.{i}.interface.{i}.use-checksum,Tabular-ReadWrite,boolean
+Device.GRE.Tunnel.{i}.Interface.{i}.KeyIdentifierGenerationPolicy,device.gre.tunnel.{i}.interface.{i}.key-identifier-generation-policy,Tabular-ReadWrite,string
+Device.GRE.Tunnel.{i}.Interface.{i}.KeyIdentifier,device.gre.tunnel.{i}.interface.{i}.key-identifier,Tabular-ReadWrite,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.UseSequenceNumber,device.gre.tunnel.{i}.interface.{i}.use-sequence-number,Tabular-ReadWrite,boolean
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.,device.gre.tunnel.{i}.interface.{i}.stats,ScalarObject,object
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.BytesSent,device.gre.tunnel.{i}.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.BytesReceived,device.gre.tunnel.{i}.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.PacketsSent,device.gre.tunnel.{i}.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.PacketsReceived,device.gre.tunnel.{i}.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.ErrorsSent,device.gre.tunnel.{i}.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.ErrorsReceived,device.gre.tunnel.{i}.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.DiscardChecksumReceived,device.gre.tunnel.{i}.interface.{i}.stats.discard-checksum-received,Scalar-ReadOnly,unsignedInt
+Device.GRE.Tunnel.{i}.Interface.{i}.Stats.DiscardSequenceNumberReceived,device.gre.tunnel.{i}.interface.{i}.stats.discard-sequence-number-received,Scalar-ReadOnly,unsignedInt
+Device.GRE.Filter.{i}.,device.gre.filter.{i}.,TabularObject,object
+Device.GRE.Filter.{i}.Enable,device.gre.filter.{i}.enable,Tabular-ReadWrite,boolean
+Device.GRE.Filter.{i}.Status,device.gre.filter.{i}.status,Tabular-ReadOnly,string
+Device.GRE.Filter.{i}.Order,device.gre.filter.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.GRE.Filter.{i}.Alias,device.gre.filter.{i}.alias,Tabular-ReadWrite,string
+Device.GRE.Filter.{i}.Interface,device.gre.filter.{i}.interface,Tabular-ReadWrite,string
+Device.GRE.Filter.{i}.AllInterfaces,device.gre.filter.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.GRE.Filter.{i}.VLANIDCheck,device.gre.filter.{i}.vlanid-check,Tabular-ReadWrite,int
+Device.GRE.Filter.{i}.VLANIDExclude,device.gre.filter.{i}.vlanid-exclude,Tabular-ReadWrite,boolean
+Device.GRE.Filter.{i}.DSCPMarkPolicy,device.gre.filter.{i}.dscp-mark-policy,Tabular-ReadWrite,int
+Device.L2TPv3.,device.l2-tpv3,ScalarObject,object
+Device.L2TPv3.TunnelNumberOfEntries,device.l2-tpv3.tunnel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.FilterNumberOfEntries,device.l2-tpv3.filter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.,device.l2-tpv3.tunnel.{i}.,TabularObject,object
+Device.L2TPv3.Tunnel.{i}.Enable,device.l2-tpv3.tunnel.{i}.enable,Tabular-ReadWrite,boolean
+Device.L2TPv3.Tunnel.{i}.Status,device.l2-tpv3.tunnel.{i}.status,Tabular-ReadOnly,string
+Device.L2TPv3.Tunnel.{i}.Alias,device.l2-tpv3.tunnel.{i}.alias,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.RemoteEndpoints,device.l2-tpv3.tunnel.{i}.remote-endpoints,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.KeepAlivePolicy,device.l2-tpv3.tunnel.{i}.keep-alive-policy,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.KeepAliveTimeout,device.l2-tpv3.tunnel.{i}.keep-alive-timeout,Tabular-ReadWrite,unsignedInt
+Device.L2TPv3.Tunnel.{i}.KeepAliveThreshold,device.l2-tpv3.tunnel.{i}.keep-alive-threshold,Tabular-ReadWrite,unsignedInt
+Device.L2TPv3.Tunnel.{i}.DeliveryHeaderProtocol,device.l2-tpv3.tunnel.{i}.delivery-header-protocol,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.DefaultDSCPMark,device.l2-tpv3.tunnel.{i}.default-dscp-mark,Tabular-ReadWrite,unsignedInt
+Device.L2TPv3.Tunnel.{i}.TunnelEncapsulation,device.l2-tpv3.tunnel.{i}.tunnel-encapsulation,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.ConnectedRemoteEndpoint,device.l2-tpv3.tunnel.{i}.connected-remote-endpoint,Tabular-ReadOnly,string
+Device.L2TPv3.Tunnel.{i}.InterfaceNumberOfEntries,device.l2-tpv3.tunnel.{i}.interface-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.UDP.,device.l2-tpv3.tunnel.{i}.udp,ScalarObject,object
+Device.L2TPv3.Tunnel.{i}.UDP.SourcePort,device.l2-tpv3.tunnel.{i}.udp.source-port,Scalar-ReadWrite,unsignedInt
+Device.L2TPv3.Tunnel.{i}.UDP.RemotePort,device.l2-tpv3.tunnel.{i}.udp.remote-port,Scalar-ReadWrite,unsignedInt
+Device.L2TPv3.Tunnel.{i}.UDP.EnableChecksum,device.l2-tpv3.tunnel.{i}.udp.enable-checksum,Scalar-ReadWrite,boolean
+Device.L2TPv3.Tunnel.{i}.Stats.,device.l2-tpv3.tunnel.{i}.stats,ScalarObject,object
+Device.L2TPv3.Tunnel.{i}.Stats.KeepAliveSent,device.l2-tpv3.tunnel.{i}.stats.keep-alive-sent,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Stats.KeepAliveReceived,device.l2-tpv3.tunnel.{i}.stats.keep-alive-received,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Stats.BytesSent,device.l2-tpv3.tunnel.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Stats.BytesReceived,device.l2-tpv3.tunnel.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Stats.PacketsSent,device.l2-tpv3.tunnel.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Stats.PacketsReceived,device.l2-tpv3.tunnel.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Stats.ErrorsSent,device.l2-tpv3.tunnel.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Stats.ErrorsReceived,device.l2-tpv3.tunnel.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.,device.l2-tpv3.tunnel.{i}.interface.{i}.,TabularObject,object
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Enable,device.l2-tpv3.tunnel.{i}.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Status,device.l2-tpv3.tunnel.{i}.interface.{i}.status,Tabular-ReadOnly,string
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Alias,device.l2-tpv3.tunnel.{i}.interface.{i}.alias,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Name,device.l2-tpv3.tunnel.{i}.interface.{i}.name,Tabular-ReadOnly,string
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.LastChange,device.l2-tpv3.tunnel.{i}.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.LowerLayers,device.l2-tpv3.tunnel.{i}.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.SessionID,device.l2-tpv3.tunnel.{i}.interface.{i}.session-id,Tabular-ReadWrite,int
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.CookiePolicy,device.l2-tpv3.tunnel.{i}.interface.{i}.cookie-policy,Tabular-ReadWrite,string
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Cookie,device.l2-tpv3.tunnel.{i}.interface.{i}.cookie,Tabular-ReadWrite,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.,device.l2-tpv3.tunnel.{i}.interface.{i}.stats,ScalarObject,object
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.BytesSent,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.BytesReceived,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.PacketsSent,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.PacketsReceived,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.ErrorsSent,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.ErrorsReceived,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.DiscardChecksumReceived,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.discard-checksum-received,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Tunnel.{i}.Interface.{i}.Stats.DiscardSequenceNumberReceived,device.l2-tpv3.tunnel.{i}.interface.{i}.stats.discard-sequence-number-received,Scalar-ReadOnly,unsignedInt
+Device.L2TPv3.Filter.{i}.,device.l2-tpv3.filter.{i}.,TabularObject,object
+Device.L2TPv3.Filter.{i}.Enable,device.l2-tpv3.filter.{i}.enable,Tabular-ReadWrite,boolean
+Device.L2TPv3.Filter.{i}.Status,device.l2-tpv3.filter.{i}.status,Tabular-ReadOnly,string
+Device.L2TPv3.Filter.{i}.Order,device.l2-tpv3.filter.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.L2TPv3.Filter.{i}.Alias,device.l2-tpv3.filter.{i}.alias,Tabular-ReadWrite,string
+Device.L2TPv3.Filter.{i}.Interface,device.l2-tpv3.filter.{i}.interface,Tabular-ReadWrite,string
+Device.L2TPv3.Filter.{i}.AllInterfaces,device.l2-tpv3.filter.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.L2TPv3.Filter.{i}.VLANIDCheck,device.l2-tpv3.filter.{i}.vlanid-check,Tabular-ReadWrite,int
+Device.L2TPv3.Filter.{i}.VLANIDExclude,device.l2-tpv3.filter.{i}.vlanid-exclude,Tabular-ReadWrite,boolean
+Device.L2TPv3.Filter.{i}.DSCPMarkPolicy,device.l2-tpv3.filter.{i}.dscp-mark-policy,Tabular-ReadWrite,int
+Device.VXLAN.,device.vxlan,ScalarObject,object
+Device.VXLAN.TunnelNumberOfEntries,device.vxlan.tunnel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.FilterNumberOfEntries,device.vxlan.filter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.,device.vxlan.tunnel.{i}.,TabularObject,object
+Device.VXLAN.Tunnel.{i}.Enable,device.vxlan.tunnel.{i}.enable,Tabular-ReadWrite,boolean
+Device.VXLAN.Tunnel.{i}.Status,device.vxlan.tunnel.{i}.status,Tabular-ReadOnly,string
+Device.VXLAN.Tunnel.{i}.Alias,device.vxlan.tunnel.{i}.alias,Tabular-ReadWrite,string
+Device.VXLAN.Tunnel.{i}.RemoteEndpoints,device.vxlan.tunnel.{i}.remote-endpoints,Tabular-ReadWrite,string
+Device.VXLAN.Tunnel.{i}.KeepAlivePolicy,device.vxlan.tunnel.{i}.keep-alive-policy,Tabular-ReadWrite,string
+Device.VXLAN.Tunnel.{i}.KeepAliveTimeout,device.vxlan.tunnel.{i}.keep-alive-timeout,Tabular-ReadWrite,unsignedInt
+Device.VXLAN.Tunnel.{i}.KeepAliveThreshold,device.vxlan.tunnel.{i}.keep-alive-threshold,Tabular-ReadWrite,unsignedInt
+Device.VXLAN.Tunnel.{i}.DeliveryHeaderProtocol,device.vxlan.tunnel.{i}.delivery-header-protocol,Tabular-ReadWrite,string
+Device.VXLAN.Tunnel.{i}.DefaultDSCPMark,device.vxlan.tunnel.{i}.default-dscp-mark,Tabular-ReadWrite,unsignedInt
+Device.VXLAN.Tunnel.{i}.ConnectedRemoteEndpoint,device.vxlan.tunnel.{i}.connected-remote-endpoint,Tabular-ReadOnly,string
+Device.VXLAN.Tunnel.{i}.InterfaceNumberOfEntries,device.vxlan.tunnel.{i}.interface-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.SourcePort,device.vxlan.tunnel.{i}.source-port,Tabular-ReadWrite,unsignedInt
+Device.VXLAN.Tunnel.{i}.RemotePort,device.vxlan.tunnel.{i}.remote-port,Tabular-ReadWrite,unsignedInt
+Device.VXLAN.Tunnel.{i}.Stats.,device.vxlan.tunnel.{i}.stats,ScalarObject,object
+Device.VXLAN.Tunnel.{i}.Stats.KeepAliveSent,device.vxlan.tunnel.{i}.stats.keep-alive-sent,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Stats.KeepAliveReceived,device.vxlan.tunnel.{i}.stats.keep-alive-received,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Stats.BytesSent,device.vxlan.tunnel.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Stats.BytesReceived,device.vxlan.tunnel.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Stats.PacketsSent,device.vxlan.tunnel.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Stats.PacketsReceived,device.vxlan.tunnel.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Stats.ErrorsSent,device.vxlan.tunnel.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Stats.ErrorsReceived,device.vxlan.tunnel.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Interface.{i}.,device.vxlan.tunnel.{i}.interface.{i}.,TabularObject,object
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Enable,device.vxlan.tunnel.{i}.interface.{i}.enable,Tabular-ReadWrite,boolean
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Status,device.vxlan.tunnel.{i}.interface.{i}.status,Tabular-ReadOnly,string
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Alias,device.vxlan.tunnel.{i}.interface.{i}.alias,Tabular-ReadWrite,string
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Name,device.vxlan.tunnel.{i}.interface.{i}.name,Tabular-ReadOnly,string
+Device.VXLAN.Tunnel.{i}.Interface.{i}.LastChange,device.vxlan.tunnel.{i}.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Interface.{i}.LowerLayers,device.vxlan.tunnel.{i}.interface.{i}.lower-layers,Tabular-ReadWrite,string
+Device.VXLAN.Tunnel.{i}.Interface.{i}.VNI,device.vxlan.tunnel.{i}.interface.{i}.vni,Tabular-ReadWrite,int
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.,device.vxlan.tunnel.{i}.interface.{i}.stats,ScalarObject,object
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.BytesSent,device.vxlan.tunnel.{i}.interface.{i}.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.BytesReceived,device.vxlan.tunnel.{i}.interface.{i}.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.PacketsSent,device.vxlan.tunnel.{i}.interface.{i}.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.PacketsReceived,device.vxlan.tunnel.{i}.interface.{i}.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.ErrorsSent,device.vxlan.tunnel.{i}.interface.{i}.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.ErrorsReceived,device.vxlan.tunnel.{i}.interface.{i}.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.DiscardChecksumReceived,device.vxlan.tunnel.{i}.interface.{i}.stats.discard-checksum-received,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Tunnel.{i}.Interface.{i}.Stats.DiscardSequenceNumberReceived,device.vxlan.tunnel.{i}.interface.{i}.stats.discard-sequence-number-received,Scalar-ReadOnly,unsignedInt
+Device.VXLAN.Filter.{i}.,device.vxlan.filter.{i}.,TabularObject,object
+Device.VXLAN.Filter.{i}.Enable,device.vxlan.filter.{i}.enable,Tabular-ReadWrite,boolean
+Device.VXLAN.Filter.{i}.Status,device.vxlan.filter.{i}.status,Tabular-ReadOnly,string
+Device.VXLAN.Filter.{i}.Order,device.vxlan.filter.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.VXLAN.Filter.{i}.Alias,device.vxlan.filter.{i}.alias,Tabular-ReadWrite,string
+Device.VXLAN.Filter.{i}.Interface,device.vxlan.filter.{i}.interface,Tabular-ReadWrite,string
+Device.VXLAN.Filter.{i}.AllInterfaces,device.vxlan.filter.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.VXLAN.Filter.{i}.VLANIDCheck,device.vxlan.filter.{i}.vlanid-check,Tabular-ReadWrite,int
+Device.VXLAN.Filter.{i}.VLANIDExclude,device.vxlan.filter.{i}.vlanid-exclude,Tabular-ReadWrite,boolean
+Device.VXLAN.Filter.{i}.DSCPMarkPolicy,device.vxlan.filter.{i}.dscp-mark-policy,Tabular-ReadWrite,int
+Device.MAP.,device.map,ScalarObject,object
+Device.MAP.Enable,device.map.enable,Scalar-ReadWrite,boolean
+Device.MAP.DomainNumberOfEntries,device.map.domain-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.,device.map.domain.{i}.,TabularObject,object
+Device.MAP.Domain.{i}.Enable,device.map.domain.{i}.enable,Tabular-ReadWrite,boolean
+Device.MAP.Domain.{i}.Status,device.map.domain.{i}.status,Tabular-ReadOnly,string
+Device.MAP.Domain.{i}.Alias,device.map.domain.{i}.alias,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.TransportMode,device.map.domain.{i}.transport-mode,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.WANInterface,device.map.domain.{i}.wan-interface,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.IPv6Prefix,device.map.domain.{i}.ipv6-prefix,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.BRIPv6Prefix,device.map.domain.{i}.bripv6-prefix,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.DSCPMarkPolicy,device.map.domain.{i}.dscp-mark-policy,Tabular-ReadWrite,int
+Device.MAP.Domain.{i}.PSIDOffset,device.map.domain.{i}.psid-offset,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.PSIDLength,device.map.domain.{i}.psid-length,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.PSID,device.map.domain.{i}.psid,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.IncludeSystemPorts,device.map.domain.{i}.include-system-ports,Tabular-ReadWrite,boolean
+Device.MAP.Domain.{i}.RuleNumberOfEntries,device.map.domain.{i}.rule-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.Rule.{i}.,device.map.domain.{i}.rule.{i}.,TabularObject,object
+Device.MAP.Domain.{i}.Rule.{i}.Enable,device.map.domain.{i}.rule.{i}.enable,Tabular-ReadWrite,boolean
+Device.MAP.Domain.{i}.Rule.{i}.Status,device.map.domain.{i}.rule.{i}.status,Tabular-ReadOnly,string
+Device.MAP.Domain.{i}.Rule.{i}.Alias,device.map.domain.{i}.rule.{i}.alias,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.Rule.{i}.Origin,device.map.domain.{i}.rule.{i}.origin,Tabular-ReadOnly,string
+Device.MAP.Domain.{i}.Rule.{i}.IPv6Prefix,device.map.domain.{i}.rule.{i}.ipv6-prefix,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.Rule.{i}.IPv4Prefix,device.map.domain.{i}.rule.{i}.ipv4-prefix,Tabular-ReadWrite,string
+Device.MAP.Domain.{i}.Rule.{i}.EABitsLength,device.map.domain.{i}.rule.{i}.ea-bits-length,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.Rule.{i}.IsFMR,device.map.domain.{i}.rule.{i}.is-fmr,Tabular-ReadWrite,boolean
+Device.MAP.Domain.{i}.Rule.{i}.PSIDOffset,device.map.domain.{i}.rule.{i}.psid-offset,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.Rule.{i}.PSIDLength,device.map.domain.{i}.rule.{i}.psid-length,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.Rule.{i}.PSID,device.map.domain.{i}.rule.{i}.psid,Tabular-ReadWrite,unsignedInt
+Device.MAP.Domain.{i}.Interface.,device.map.domain.{i}.interface,ScalarObject,object
+Device.MAP.Domain.{i}.Interface.Enable,device.map.domain.{i}.interface.enable,Scalar-ReadWrite,boolean
+Device.MAP.Domain.{i}.Interface.Status,device.map.domain.{i}.interface.status,Scalar-ReadOnly,string
+Device.MAP.Domain.{i}.Interface.Alias,device.map.domain.{i}.interface.alias,Scalar-ReadWrite,string
+Device.MAP.Domain.{i}.Interface.Name,device.map.domain.{i}.interface.name,Scalar-ReadOnly,string
+Device.MAP.Domain.{i}.Interface.LastChange,device.map.domain.{i}.interface.last-change,Scalar-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.Interface.LowerLayers,device.map.domain.{i}.interface.lower-layers,Scalar-ReadWrite,string
+Device.MAP.Domain.{i}.Interface.Stats.,device.map.domain.{i}.interface.stats,ScalarObject,object
+Device.MAP.Domain.{i}.Interface.Stats.BytesSent,device.map.domain.{i}.interface.stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.BytesReceived,device.map.domain.{i}.interface.stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.PacketsSent,device.map.domain.{i}.interface.stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.PacketsReceived,device.map.domain.{i}.interface.stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.ErrorsSent,device.map.domain.{i}.interface.stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.Interface.Stats.ErrorsReceived,device.map.domain.{i}.interface.stats.errors-received,Scalar-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.Interface.Stats.UnicastPacketsSent,device.map.domain.{i}.interface.stats.unicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.UnicastPacketsReceived,device.map.domain.{i}.interface.stats.unicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.DiscardPacketsSent,device.map.domain.{i}.interface.stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.Interface.Stats.DiscardPacketsReceived,device.map.domain.{i}.interface.stats.discard-packets-received,Scalar-ReadOnly,unsignedInt
+Device.MAP.Domain.{i}.Interface.Stats.MulticastPacketsSent,device.map.domain.{i}.interface.stats.multicast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.MulticastPacketsReceived,device.map.domain.{i}.interface.stats.multicast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.BroadcastPacketsSent,device.map.domain.{i}.interface.stats.broadcast-packets-sent,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.BroadcastPacketsReceived,device.map.domain.{i}.interface.stats.broadcast-packets-received,Scalar-ReadOnly,unsignedLong
+Device.MAP.Domain.{i}.Interface.Stats.UnknownProtoPacketsReceived,device.map.domain.{i}.interface.stats.unknown-proto-packets-received,Scalar-ReadOnly,unsignedInt
+Device.CaptivePortal.,device.captive-portal,ScalarObject,object
+Device.CaptivePortal.Enable,device.captive-portal.enable,Scalar-ReadWrite,boolean
+Device.CaptivePortal.Status,device.captive-portal.status,Scalar-ReadOnly,string
+Device.CaptivePortal.AllowedList,device.captive-portal.allowed-list,Scalar-ReadWrite,string
+Device.CaptivePortal.URL,device.captive-portal.url,Scalar-ReadWrite,string
+Device.Routing.,device.routing,ScalarObject,object
+Device.Routing.RouterNumberOfEntries,device.routing.router-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Routing.Router.{i}.,device.routing.router.{i}.,TabularObject,object
+Device.Routing.Router.{i}.Enable,device.routing.router.{i}.enable,Tabular-ReadWrite,boolean
+Device.Routing.Router.{i}.Status,device.routing.router.{i}.status,Tabular-ReadOnly,string
+Device.Routing.Router.{i}.Alias,device.routing.router.{i}.alias,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv4ForwardingNumberOfEntries,device.routing.router.{i}.ipv4-forwarding-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Routing.Router.{i}.IPv6ForwardingNumberOfEntries,device.routing.router.{i}.ipv6-forwarding-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.,device.routing.router.{i}.ipv4-forwarding.{i}.,TabularObject,object
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.Enable,device.routing.router.{i}.ipv4-forwarding.{i}.enable,Tabular-ReadWrite,boolean
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.Status,device.routing.router.{i}.ipv4-forwarding.{i}.status,Tabular-ReadOnly,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.Alias,device.routing.router.{i}.ipv4-forwarding.{i}.alias,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.StaticRoute,device.routing.router.{i}.ipv4-forwarding.{i}.static-route,Tabular-ReadOnly,boolean
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.DestIPAddress,device.routing.router.{i}.ipv4-forwarding.{i}.dest-ip-address,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.DestSubnetMask,device.routing.router.{i}.ipv4-forwarding.{i}.dest-subnet-mask,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.ForwardingPolicy,device.routing.router.{i}.ipv4-forwarding.{i}.forwarding-policy,Tabular-ReadWrite,int
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.GatewayIPAddress,device.routing.router.{i}.ipv4-forwarding.{i}.gateway-ip-address,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.Interface,device.routing.router.{i}.ipv4-forwarding.{i}.interface,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.Origin,device.routing.router.{i}.ipv4-forwarding.{i}.origin,Tabular-ReadOnly,string
+Device.Routing.Router.{i}.IPv4Forwarding.{i}.ForwardingMetric,device.routing.router.{i}.ipv4-forwarding.{i}.forwarding-metric,Tabular-ReadWrite,int
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.,device.routing.router.{i}.ipv6-forwarding.{i}.,TabularObject,object
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.Enable,device.routing.router.{i}.ipv6-forwarding.{i}.enable,Tabular-ReadWrite,boolean
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.Status,device.routing.router.{i}.ipv6-forwarding.{i}.status,Tabular-ReadOnly,string
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.Alias,device.routing.router.{i}.ipv6-forwarding.{i}.alias,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.DestIPPrefix,device.routing.router.{i}.ipv6-forwarding.{i}.dest-ip-prefix,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.ForwardingPolicy,device.routing.router.{i}.ipv6-forwarding.{i}.forwarding-policy,Tabular-ReadWrite,int
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.NextHop,device.routing.router.{i}.ipv6-forwarding.{i}.next-hop,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.Interface,device.routing.router.{i}.ipv6-forwarding.{i}.interface,Tabular-ReadWrite,string
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.Origin,device.routing.router.{i}.ipv6-forwarding.{i}.origin,Tabular-ReadOnly,string
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.ForwardingMetric,device.routing.router.{i}.ipv6-forwarding.{i}.forwarding-metric,Tabular-ReadWrite,int
+Device.Routing.Router.{i}.IPv6Forwarding.{i}.ExpirationTime,device.routing.router.{i}.ipv6-forwarding.{i}.expiration-time,Tabular-ReadOnly,dateTime
+Device.Routing.RIP.,device.routing.rip,ScalarObject,object
+Device.Routing.RIP.Enable,device.routing.rip.enable,Scalar-ReadWrite,boolean
+Device.Routing.RIP.SupportedModes,device.routing.rip.supported-modes,Scalar-ReadOnly,string
+Device.Routing.RIP.InterfaceSettingNumberOfEntries,device.routing.rip.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Routing.RIP.InterfaceSetting.{i}.,device.routing.rip.interface-setting.{i}.,TabularObject,object
+Device.Routing.RIP.InterfaceSetting.{i}.Enable,device.routing.rip.interface-setting.{i}.enable,Tabular-ReadWrite,boolean
+Device.Routing.RIP.InterfaceSetting.{i}.Status,device.routing.rip.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.Routing.RIP.InterfaceSetting.{i}.Alias,device.routing.rip.interface-setting.{i}.alias,Tabular-ReadWrite,string
+Device.Routing.RIP.InterfaceSetting.{i}.Interface,device.routing.rip.interface-setting.{i}.interface,Tabular-ReadWrite,string
+Device.Routing.RIP.InterfaceSetting.{i}.AcceptRA,device.routing.rip.interface-setting.{i}.accept-ra,Tabular-ReadWrite,boolean
+Device.Routing.RIP.InterfaceSetting.{i}.SendRA,device.routing.rip.interface-setting.{i}.send-ra,Tabular-ReadWrite,boolean
+Device.Routing.RouteInformation.,device.routing.route-information,ScalarObject,object
+Device.Routing.RouteInformation.Enable,device.routing.route-information.enable,Scalar-ReadWrite,boolean
+Device.Routing.RouteInformation.InterfaceSettingNumberOfEntries,device.routing.route-information.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Routing.RouteInformation.InterfaceSetting.{i}.,device.routing.route-information.interface-setting.{i}.,TabularObject,object
+Device.Routing.RouteInformation.InterfaceSetting.{i}.Status,device.routing.route-information.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.Routing.RouteInformation.InterfaceSetting.{i}.Interface,device.routing.route-information.interface-setting.{i}.interface,Tabular-ReadOnly,string
+Device.Routing.RouteInformation.InterfaceSetting.{i}.SourceRouter,device.routing.route-information.interface-setting.{i}.source-router,Tabular-ReadOnly,string
+Device.Routing.RouteInformation.InterfaceSetting.{i}.PreferredRouteFlag,device.routing.route-information.interface-setting.{i}.preferred-route-flag,Tabular-ReadOnly,string
+Device.Routing.RouteInformation.InterfaceSetting.{i}.Prefix,device.routing.route-information.interface-setting.{i}.prefix,Tabular-ReadOnly,string
+Device.Routing.RouteInformation.InterfaceSetting.{i}.RouteLifetime,device.routing.route-information.interface-setting.{i}.route-lifetime,Tabular-ReadOnly,dateTime
+Device.NeighborDiscovery.,device.neighbor-discovery,ScalarObject,object
+Device.NeighborDiscovery.Enable,device.neighbor-discovery.enable,Scalar-ReadWrite,boolean
+Device.NeighborDiscovery.InterfaceSettingNumberOfEntries,device.neighbor-discovery.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.NeighborDiscovery.InterfaceSetting.{i}.,device.neighbor-discovery.interface-setting.{i}.,TabularObject,object
+Device.NeighborDiscovery.InterfaceSetting.{i}.Enable,device.neighbor-discovery.interface-setting.{i}.enable,Tabular-ReadWrite,boolean
+Device.NeighborDiscovery.InterfaceSetting.{i}.Status,device.neighbor-discovery.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.NeighborDiscovery.InterfaceSetting.{i}.Alias,device.neighbor-discovery.interface-setting.{i}.alias,Tabular-ReadWrite,string
+Device.NeighborDiscovery.InterfaceSetting.{i}.Interface,device.neighbor-discovery.interface-setting.{i}.interface,Tabular-ReadWrite,string
+Device.NeighborDiscovery.InterfaceSetting.{i}.RetransTimer,device.neighbor-discovery.interface-setting.{i}.retrans-timer,Tabular-ReadWrite,unsignedInt
+Device.NeighborDiscovery.InterfaceSetting.{i}.RtrSolicitationInterval,device.neighbor-discovery.interface-setting.{i}.rtr-solicitation-interval,Tabular-ReadWrite,unsignedInt
+Device.NeighborDiscovery.InterfaceSetting.{i}.MaxRtrSolicitations,device.neighbor-discovery.interface-setting.{i}.max-rtr-solicitations,Tabular-ReadWrite,unsignedInt
+Device.NeighborDiscovery.InterfaceSetting.{i}.NUDEnable,device.neighbor-discovery.interface-setting.{i}.nud-enable,Tabular-ReadWrite,boolean
+Device.NeighborDiscovery.InterfaceSetting.{i}.RSEnable,device.neighbor-discovery.interface-setting.{i}.rs-enable,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.,device.router-advertisement,ScalarObject,object
+Device.RouterAdvertisement.Enable,device.router-advertisement.enable,Scalar-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSettingNumberOfEntries,device.router-advertisement.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.,device.router-advertisement.interface-setting.{i}.,TabularObject,object
+Device.RouterAdvertisement.InterfaceSetting.{i}.Enable,device.router-advertisement.interface-setting.{i}.enable,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSetting.{i}.Status,device.router-advertisement.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.Alias,device.router-advertisement.interface-setting.{i}.alias,Tabular-ReadWrite,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.Interface,device.router-advertisement.interface-setting.{i}.interface,Tabular-ReadWrite,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.ManualPrefixes,device.router-advertisement.interface-setting.{i}.manual-prefixes,Tabular-ReadWrite,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.Prefixes,device.router-advertisement.interface-setting.{i}.prefixes,Tabular-ReadOnly,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.MaxRtrAdvInterval,device.router-advertisement.interface-setting.{i}.max-rtr-adv-interval,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.MinRtrAdvInterval,device.router-advertisement.interface-setting.{i}.min-rtr-adv-interval,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvDefaultLifetime,device.router-advertisement.interface-setting.{i}.adv-default-lifetime,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvManagedFlag,device.router-advertisement.interface-setting.{i}.adv-managed-flag,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvOtherConfigFlag,device.router-advertisement.interface-setting.{i}.adv-other-config-flag,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvMobileAgentFlag,device.router-advertisement.interface-setting.{i}.adv-mobile-agent-flag,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvPreferredRouterFlag,device.router-advertisement.interface-setting.{i}.adv-preferred-router-flag,Tabular-ReadWrite,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvNDProxyFlag,device.router-advertisement.interface-setting.{i}.adv-nd-proxy-flag,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvLinkMTU,device.router-advertisement.interface-setting.{i}.adv-link-mtu,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvReachableTime,device.router-advertisement.interface-setting.{i}.adv-reachable-time,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvRetransTimer,device.router-advertisement.interface-setting.{i}.adv-retrans-timer,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.AdvCurHopLimit,device.router-advertisement.interface-setting.{i}.adv-cur-hop-limit,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.OptionNumberOfEntries,device.router-advertisement.interface-setting.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.Option.{i}.,device.router-advertisement.interface-setting.{i}.option.{i}.,TabularObject,object
+Device.RouterAdvertisement.InterfaceSetting.{i}.Option.{i}.Enable,device.router-advertisement.interface-setting.{i}.option.{i}.enable,Tabular-ReadWrite,boolean
+Device.RouterAdvertisement.InterfaceSetting.{i}.Option.{i}.Alias,device.router-advertisement.interface-setting.{i}.option.{i}.alias,Tabular-ReadWrite,string
+Device.RouterAdvertisement.InterfaceSetting.{i}.Option.{i}.Tag,device.router-advertisement.interface-setting.{i}.option.{i}.tag,Tabular-ReadWrite,unsignedInt
+Device.RouterAdvertisement.InterfaceSetting.{i}.Option.{i}.Value,device.router-advertisement.interface-setting.{i}.option.{i}.value,Tabular-ReadWrite,string
+Device.IPv6rd.,device.ipv6rd,ScalarObject,object
+Device.IPv6rd.Enable,device.ipv6rd.enable,Scalar-ReadWrite,boolean
+Device.IPv6rd.InterfaceSettingNumberOfEntries,device.ipv6rd.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IPv6rd.InterfaceSetting.{i}.,device.ipv6rd.interface-setting.{i}.,TabularObject,object
+Device.IPv6rd.InterfaceSetting.{i}.Enable,device.ipv6rd.interface-setting.{i}.enable,Tabular-ReadWrite,boolean
+Device.IPv6rd.InterfaceSetting.{i}.Status,device.ipv6rd.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.IPv6rd.InterfaceSetting.{i}.Alias,device.ipv6rd.interface-setting.{i}.alias,Tabular-ReadWrite,string
+Device.IPv6rd.InterfaceSetting.{i}.BorderRelayIPv4Addresses,device.ipv6rd.interface-setting.{i}.border-relay-ipv4-addresses,Tabular-ReadWrite,string
+Device.IPv6rd.InterfaceSetting.{i}.AllTrafficToBorderRelay,device.ipv6rd.interface-setting.{i}.all-traffic-to-border-relay,Tabular-ReadWrite,boolean
+Device.IPv6rd.InterfaceSetting.{i}.SPIPv6Prefix,device.ipv6rd.interface-setting.{i}.spipv6-prefix,Tabular-ReadWrite,string
+Device.IPv6rd.InterfaceSetting.{i}.IPv4MaskLength,device.ipv6rd.interface-setting.{i}.ipv4-mask-length,Tabular-ReadWrite,unsignedInt
+Device.IPv6rd.InterfaceSetting.{i}.AddressSource,device.ipv6rd.interface-setting.{i}.address-source,Tabular-ReadWrite,string
+Device.IPv6rd.InterfaceSetting.{i}.TunnelInterface,device.ipv6rd.interface-setting.{i}.tunnel-interface,Tabular-ReadOnly,string
+Device.IPv6rd.InterfaceSetting.{i}.TunneledInterface,device.ipv6rd.interface-setting.{i}.tunneled-interface,Tabular-ReadOnly,string
+Device.DSLite.,device.ds-lite,ScalarObject,object
+Device.DSLite.Enable,device.ds-lite.enable,Scalar-ReadWrite,boolean
+Device.DSLite.InterfaceSettingNumberOfEntries,device.ds-lite.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DSLite.InterfaceSetting.{i}.,device.ds-lite.interface-setting.{i}.,TabularObject,object
+Device.DSLite.InterfaceSetting.{i}.Enable,device.ds-lite.interface-setting.{i}.enable,Tabular-ReadWrite,boolean
+Device.DSLite.InterfaceSetting.{i}.Status,device.ds-lite.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.DSLite.InterfaceSetting.{i}.Alias,device.ds-lite.interface-setting.{i}.alias,Tabular-ReadWrite,string
+Device.DSLite.InterfaceSetting.{i}.EndpointAssignmentPrecedence,device.ds-lite.interface-setting.{i}.endpoint-assignment-precedence,Tabular-ReadWrite,string
+Device.DSLite.InterfaceSetting.{i}.EndpointAddressTypePrecedence,device.ds-lite.interface-setting.{i}.endpoint-address-type-precedence,Tabular-ReadWrite,string
+Device.DSLite.InterfaceSetting.{i}.EndpointAddressInUse,device.ds-lite.interface-setting.{i}.endpoint-address-in-use,Tabular-ReadOnly,string
+Device.DSLite.InterfaceSetting.{i}.EndpointName,device.ds-lite.interface-setting.{i}.endpoint-name,Tabular-ReadWrite,string
+Device.DSLite.InterfaceSetting.{i}.EndpointAddress,device.ds-lite.interface-setting.{i}.endpoint-address,Tabular-ReadWrite,string
+Device.DSLite.InterfaceSetting.{i}.Origin,device.ds-lite.interface-setting.{i}.origin,Tabular-ReadOnly,string
+Device.DSLite.InterfaceSetting.{i}.TunnelInterface,device.ds-lite.interface-setting.{i}.tunnel-interface,Tabular-ReadOnly,string
+Device.DSLite.InterfaceSetting.{i}.TunneledInterface,device.ds-lite.interface-setting.{i}.tunneled-interface,Tabular-ReadOnly,string
+Device.QoS.,device.qo-s,ScalarObject,object
+Device.QoS.MaxClassificationEntries,device.qo-s.max-classification-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.ClassificationNumberOfEntries,device.qo-s.classification-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.MaxAppEntries,device.qo-s.max-app-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.AppNumberOfEntries,device.qo-s.app-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.MaxFlowEntries,device.qo-s.max-flow-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.FlowNumberOfEntries,device.qo-s.flow-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.MaxPolicerEntries,device.qo-s.max-policer-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.PolicerNumberOfEntries,device.qo-s.policer-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.MaxQueueEntries,device.qo-s.max-queue-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.QueueNumberOfEntries,device.qo-s.queue-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.QueueStatsNumberOfEntries,device.qo-s.queue-stats-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.MaxShaperEntries,device.qo-s.max-shaper-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.ShaperNumberOfEntries,device.qo-s.shaper-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.QoS.DefaultForwardingPolicy,device.qo-s.default-forwarding-policy,Scalar-ReadWrite,unsignedInt
+Device.QoS.DefaultTrafficClass,device.qo-s.default-traffic-class,Scalar-ReadWrite,unsignedInt
+Device.QoS.DefaultPolicer,device.qo-s.default-policer,Scalar-ReadWrite,string
+Device.QoS.DefaultQueue,device.qo-s.default-queue,Scalar-ReadWrite,string
+Device.QoS.DefaultDSCPMark,device.qo-s.default-dscp-mark,Scalar-ReadWrite,int
+Device.QoS.DefaultEthernetPriorityMark,device.qo-s.default-ethernet-priority-mark,Scalar-ReadWrite,int
+Device.QoS.DefaultInnerEthernetPriorityMark,device.qo-s.default-inner-ethernet-priority-mark,Scalar-ReadWrite,int
+Device.QoS.AvailableAppList,device.qo-s.available-app-list,Scalar-ReadOnly,string
+Device.QoS.Classification.{i}.,device.qo-s.classification.{i}.,TabularObject,object
+Device.QoS.Classification.{i}.Enable,device.qo-s.classification.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.Status,device.qo-s.classification.{i}.status,Tabular-ReadOnly,string
+Device.QoS.Classification.{i}.Order,device.qo-s.classification.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.QoS.Classification.{i}.Alias,device.qo-s.classification.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DHCPType,device.qo-s.classification.{i}.dhcp-type,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.Interface,device.qo-s.classification.{i}.interface,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.AllInterfaces,device.qo-s.classification.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestIP,device.qo-s.classification.{i}.dest-ip,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestMask,device.qo-s.classification.{i}.dest-mask,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestIPExclude,device.qo-s.classification.{i}.dest-ip-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceIP,device.qo-s.classification.{i}.source-ip,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceMask,device.qo-s.classification.{i}.source-mask,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceIPExclude,device.qo-s.classification.{i}.source-ip-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.Protocol,device.qo-s.classification.{i}.protocol,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.ProtocolExclude,device.qo-s.classification.{i}.protocol-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestPort,device.qo-s.classification.{i}.dest-port,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.DestPortRangeMax,device.qo-s.classification.{i}.dest-port-range-max,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.DestPortExclude,device.qo-s.classification.{i}.dest-port-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourcePort,device.qo-s.classification.{i}.source-port,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.SourcePortRangeMax,device.qo-s.classification.{i}.source-port-range-max,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.SourcePortExclude,device.qo-s.classification.{i}.source-port-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceMACAddress,device.qo-s.classification.{i}.source-mac-address,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceMACMask,device.qo-s.classification.{i}.source-mac-mask,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceMACExclude,device.qo-s.classification.{i}.source-mac-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestMACAddress,device.qo-s.classification.{i}.dest-mac-address,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestMACMask,device.qo-s.classification.{i}.dest-mac-mask,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestMACExclude,device.qo-s.classification.{i}.dest-mac-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.Ethertype,device.qo-s.classification.{i}.ethertype,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.EthertypeExclude,device.qo-s.classification.{i}.ethertype-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SSAP,device.qo-s.classification.{i}.ssap,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.SSAPExclude,device.qo-s.classification.{i}.ssap-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DSAP,device.qo-s.classification.{i}.dsap,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.DSAPExclude,device.qo-s.classification.{i}.dsap-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.LLCControl,device.qo-s.classification.{i}.llc-control,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.LLCControlExclude,device.qo-s.classification.{i}.llc-control-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SNAPOUI,device.qo-s.classification.{i}.snapoui,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.SNAPOUIExclude,device.qo-s.classification.{i}.snapoui-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceVendorClassID,device.qo-s.classification.{i}.source-vendor-class-id,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceVendorClassIDv6,device.qo-s.classification.{i}.source-vendor-class-idv6,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceVendorClassIDExclude,device.qo-s.classification.{i}.source-vendor-class-id-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceVendorClassIDMode,device.qo-s.classification.{i}.source-vendor-class-id-mode,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestVendorClassID,device.qo-s.classification.{i}.dest-vendor-class-id,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestVendorClassIDv6,device.qo-s.classification.{i}.dest-vendor-class-idv6,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestVendorClassIDExclude,device.qo-s.classification.{i}.dest-vendor-class-id-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestVendorClassIDMode,device.qo-s.classification.{i}.dest-vendor-class-id-mode,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceClientID,device.qo-s.classification.{i}.source-client-id,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceClientIDExclude,device.qo-s.classification.{i}.source-client-id-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestClientID,device.qo-s.classification.{i}.dest-client-id,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestClientIDExclude,device.qo-s.classification.{i}.dest-client-id-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceUserClassID,device.qo-s.classification.{i}.source-user-class-id,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceUserClassIDExclude,device.qo-s.classification.{i}.source-user-class-id-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestUserClassID,device.qo-s.classification.{i}.dest-user-class-id,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestUserClassIDExclude,device.qo-s.classification.{i}.dest-user-class-id-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceVendorSpecificInfo,device.qo-s.classification.{i}.source-vendor-specific-info,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.SourceVendorSpecificInfoExclude,device.qo-s.classification.{i}.source-vendor-specific-info-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.SourceVendorSpecificInfoEnterprise,device.qo-s.classification.{i}.source-vendor-specific-info-enterprise,Tabular-ReadWrite,unsignedInt
+Device.QoS.Classification.{i}.SourceVendorSpecificInfoSubOption,device.qo-s.classification.{i}.source-vendor-specific-info-sub-option,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.DestVendorSpecificInfo,device.qo-s.classification.{i}.dest-vendor-specific-info,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.DestVendorSpecificInfoExclude,device.qo-s.classification.{i}.dest-vendor-specific-info-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DestVendorSpecificInfoEnterprise,device.qo-s.classification.{i}.dest-vendor-specific-info-enterprise,Tabular-ReadWrite,unsignedInt
+Device.QoS.Classification.{i}.DestVendorSpecificInfoSubOption,device.qo-s.classification.{i}.dest-vendor-specific-info-sub-option,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.TCPACK,device.qo-s.classification.{i}.tcpack,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.TCPACKExclude,device.qo-s.classification.{i}.tcpack-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.IPLengthMin,device.qo-s.classification.{i}.ip-length-min,Tabular-ReadWrite,unsignedInt
+Device.QoS.Classification.{i}.IPLengthMax,device.qo-s.classification.{i}.ip-length-max,Tabular-ReadWrite,unsignedInt
+Device.QoS.Classification.{i}.IPLengthExclude,device.qo-s.classification.{i}.ip-length-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DSCPCheck,device.qo-s.classification.{i}.dscp-check,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.DSCPExclude,device.qo-s.classification.{i}.dscp-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.DSCPMark,device.qo-s.classification.{i}.dscp-mark,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.EthernetPriorityCheck,device.qo-s.classification.{i}.ethernet-priority-check,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.EthernetPriorityExclude,device.qo-s.classification.{i}.ethernet-priority-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.EthernetPriorityMark,device.qo-s.classification.{i}.ethernet-priority-mark,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.InnerEthernetPriorityCheck,device.qo-s.classification.{i}.inner-ethernet-priority-check,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.InnerEthernetPriorityExclude,device.qo-s.classification.{i}.inner-ethernet-priority-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.InnerEthernetPriorityMark,device.qo-s.classification.{i}.inner-ethernet-priority-mark,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.EthernetDEICheck,device.qo-s.classification.{i}.ethernet-dei-check,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.EthernetDEIExclude,device.qo-s.classification.{i}.ethernet-dei-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.VLANIDCheck,device.qo-s.classification.{i}.vlanid-check,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.VLANIDExclude,device.qo-s.classification.{i}.vlanid-exclude,Tabular-ReadWrite,boolean
+Device.QoS.Classification.{i}.OutOfBandInfo,device.qo-s.classification.{i}.out-of-band-info,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.ForwardingPolicy,device.qo-s.classification.{i}.forwarding-policy,Tabular-ReadWrite,unsignedInt
+Device.QoS.Classification.{i}.TrafficClass,device.qo-s.classification.{i}.traffic-class,Tabular-ReadWrite,int
+Device.QoS.Classification.{i}.Policer,device.qo-s.classification.{i}.policer,Tabular-ReadWrite,string
+Device.QoS.Classification.{i}.App,device.qo-s.classification.{i}.app,Tabular-ReadWrite,string
+Device.QoS.App.{i}.,device.qo-s.app.{i}.,TabularObject,object
+Device.QoS.App.{i}.Enable,device.qo-s.app.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.App.{i}.Status,device.qo-s.app.{i}.status,Tabular-ReadOnly,string
+Device.QoS.App.{i}.Alias,device.qo-s.app.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.App.{i}.ProtocolIdentifier,device.qo-s.app.{i}.protocol-identifier,Tabular-ReadWrite,string
+Device.QoS.App.{i}.Name,device.qo-s.app.{i}.name,Tabular-ReadWrite,string
+Device.QoS.App.{i}.DefaultForwardingPolicy,device.qo-s.app.{i}.default-forwarding-policy,Tabular-ReadWrite,unsignedInt
+Device.QoS.App.{i}.DefaultTrafficClass,device.qo-s.app.{i}.default-traffic-class,Tabular-ReadWrite,unsignedInt
+Device.QoS.App.{i}.DefaultPolicer,device.qo-s.app.{i}.default-policer,Tabular-ReadWrite,string
+Device.QoS.App.{i}.DefaultDSCPMark,device.qo-s.app.{i}.default-dscp-mark,Tabular-ReadWrite,int
+Device.QoS.App.{i}.DefaultEthernetPriorityMark,device.qo-s.app.{i}.default-ethernet-priority-mark,Tabular-ReadWrite,int
+Device.QoS.App.{i}.DefaultInnerEthernetPriorityMark,device.qo-s.app.{i}.default-inner-ethernet-priority-mark,Tabular-ReadWrite,int
+Device.QoS.Flow.{i}.,device.qo-s.flow.{i}.,TabularObject,object
+Device.QoS.Flow.{i}.Enable,device.qo-s.flow.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.Flow.{i}.Status,device.qo-s.flow.{i}.status,Tabular-ReadOnly,string
+Device.QoS.Flow.{i}.Alias,device.qo-s.flow.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.Flow.{i}.Type,device.qo-s.flow.{i}.type,Tabular-ReadWrite,string
+Device.QoS.Flow.{i}.TypeParameters,device.qo-s.flow.{i}.type-parameters,Tabular-ReadWrite,string
+Device.QoS.Flow.{i}.Name,device.qo-s.flow.{i}.name,Tabular-ReadWrite,string
+Device.QoS.Flow.{i}.App,device.qo-s.flow.{i}.app,Tabular-ReadWrite,string
+Device.QoS.Flow.{i}.ForwardingPolicy,device.qo-s.flow.{i}.forwarding-policy,Tabular-ReadWrite,unsignedInt
+Device.QoS.Flow.{i}.TrafficClass,device.qo-s.flow.{i}.traffic-class,Tabular-ReadWrite,unsignedInt
+Device.QoS.Flow.{i}.Policer,device.qo-s.flow.{i}.policer,Tabular-ReadWrite,string
+Device.QoS.Flow.{i}.DSCPMark,device.qo-s.flow.{i}.dscp-mark,Tabular-ReadWrite,int
+Device.QoS.Flow.{i}.EthernetPriorityMark,device.qo-s.flow.{i}.ethernet-priority-mark,Tabular-ReadWrite,int
+Device.QoS.Flow.{i}.InnerEthernetPriorityMark,device.qo-s.flow.{i}.inner-ethernet-priority-mark,Tabular-ReadWrite,int
+Device.QoS.Policer.{i}.,device.qo-s.policer.{i}.,TabularObject,object
+Device.QoS.Policer.{i}.Enable,device.qo-s.policer.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.Policer.{i}.Status,device.qo-s.policer.{i}.status,Tabular-ReadOnly,string
+Device.QoS.Policer.{i}.Alias,device.qo-s.policer.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.Policer.{i}.CommittedRate,device.qo-s.policer.{i}.committed-rate,Tabular-ReadWrite,unsignedInt
+Device.QoS.Policer.{i}.CommittedBurstSize,device.qo-s.policer.{i}.committed-burst-size,Tabular-ReadWrite,unsignedInt
+Device.QoS.Policer.{i}.ExcessBurstSize,device.qo-s.policer.{i}.excess-burst-size,Tabular-ReadWrite,unsignedInt
+Device.QoS.Policer.{i}.PeakRate,device.qo-s.policer.{i}.peak-rate,Tabular-ReadWrite,unsignedInt
+Device.QoS.Policer.{i}.PeakBurstSize,device.qo-s.policer.{i}.peak-burst-size,Tabular-ReadWrite,unsignedInt
+Device.QoS.Policer.{i}.MeterType,device.qo-s.policer.{i}.meter-type,Tabular-ReadWrite,string
+Device.QoS.Policer.{i}.PossibleMeterTypes,device.qo-s.policer.{i}.possible-meter-types,Tabular-ReadOnly,string
+Device.QoS.Policer.{i}.ConformingAction,device.qo-s.policer.{i}.conforming-action,Tabular-ReadWrite,string
+Device.QoS.Policer.{i}.PartialConformingAction,device.qo-s.policer.{i}.partial-conforming-action,Tabular-ReadWrite,string
+Device.QoS.Policer.{i}.NonConformingAction,device.qo-s.policer.{i}.non-conforming-action,Tabular-ReadWrite,string
+Device.QoS.Policer.{i}.TotalCountedPackets,device.qo-s.policer.{i}.total-counted-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.TotalCountedBytes,device.qo-s.policer.{i}.total-counted-bytes,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.ConformingCountedPackets,device.qo-s.policer.{i}.conforming-counted-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.ConformingCountedBytes,device.qo-s.policer.{i}.conforming-counted-bytes,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.PartiallyConformingCountedPackets,device.qo-s.policer.{i}.partially-conforming-counted-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.PartiallyConformingCountedBytes,device.qo-s.policer.{i}.partially-conforming-counted-bytes,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.NonConformingCountedPackets,device.qo-s.policer.{i}.non-conforming-counted-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.Policer.{i}.NonConformingCountedBytes,device.qo-s.policer.{i}.non-conforming-counted-bytes,Tabular-ReadOnly,unsignedInt
+Device.QoS.Queue.{i}.,device.qo-s.queue.{i}.,TabularObject,object
+Device.QoS.Queue.{i}.Enable,device.qo-s.queue.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.Queue.{i}.Status,device.qo-s.queue.{i}.status,Tabular-ReadOnly,string
+Device.QoS.Queue.{i}.Alias,device.qo-s.queue.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.Queue.{i}.TrafficClasses,device.qo-s.queue.{i}.traffic-classes,Tabular-ReadWrite,unsignedInt
+Device.QoS.Queue.{i}.Interface,device.qo-s.queue.{i}.interface,Tabular-ReadWrite,string
+Device.QoS.Queue.{i}.AllInterfaces,device.qo-s.queue.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.QoS.Queue.{i}.HardwareAssisted,device.qo-s.queue.{i}.hardware-assisted,Tabular-ReadOnly,boolean
+Device.QoS.Queue.{i}.BufferLength,device.qo-s.queue.{i}.buffer-length,Tabular-ReadOnly,unsignedInt
+Device.QoS.Queue.{i}.Weight,device.qo-s.queue.{i}.weight,Tabular-ReadWrite,unsignedInt
+Device.QoS.Queue.{i}.Precedence,device.qo-s.queue.{i}.precedence,Tabular-ReadWrite,unsignedInt
+Device.QoS.Queue.{i}.REDThreshold,device.qo-s.queue.{i}.red-threshold,Tabular-ReadWrite,unsignedInt
+Device.QoS.Queue.{i}.REDPercentage,device.qo-s.queue.{i}.red-percentage,Tabular-ReadWrite,unsignedInt
+Device.QoS.Queue.{i}.DropAlgorithm,device.qo-s.queue.{i}.drop-algorithm,Tabular-ReadWrite,string
+Device.QoS.Queue.{i}.SchedulerAlgorithm,device.qo-s.queue.{i}.scheduler-algorithm,Tabular-ReadWrite,string
+Device.QoS.Queue.{i}.ShapingRate,device.qo-s.queue.{i}.shaping-rate,Tabular-ReadWrite,int
+Device.QoS.Queue.{i}.ShapingBurstSize,device.qo-s.queue.{i}.shaping-burst-size,Tabular-ReadWrite,unsignedInt
+Device.QoS.QueueStats.{i}.,device.qo-s.queue-stats.{i}.,TabularObject,object
+Device.QoS.QueueStats.{i}.Enable,device.qo-s.queue-stats.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.QueueStats.{i}.Status,device.qo-s.queue-stats.{i}.status,Tabular-ReadOnly,string
+Device.QoS.QueueStats.{i}.Alias,device.qo-s.queue-stats.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.QueueStats.{i}.Queue,device.qo-s.queue-stats.{i}.queue,Tabular-ReadWrite,string
+Device.QoS.QueueStats.{i}.Interface,device.qo-s.queue-stats.{i}.interface,Tabular-ReadWrite,string
+Device.QoS.QueueStats.{i}.OutputPackets,device.qo-s.queue-stats.{i}.output-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.QueueStats.{i}.OutputBytes,device.qo-s.queue-stats.{i}.output-bytes,Tabular-ReadOnly,unsignedInt
+Device.QoS.QueueStats.{i}.DroppedPackets,device.qo-s.queue-stats.{i}.dropped-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.QueueStats.{i}.DroppedBytes,device.qo-s.queue-stats.{i}.dropped-bytes,Tabular-ReadOnly,unsignedInt
+Device.QoS.QueueStats.{i}.QueueOccupancyPackets,device.qo-s.queue-stats.{i}.queue-occupancy-packets,Tabular-ReadOnly,unsignedInt
+Device.QoS.QueueStats.{i}.QueueOccupancyPercentage,device.qo-s.queue-stats.{i}.queue-occupancy-percentage,Tabular-ReadOnly,unsignedInt
+Device.QoS.Shaper.{i}.,device.qo-s.shaper.{i}.,TabularObject,object
+Device.QoS.Shaper.{i}.Enable,device.qo-s.shaper.{i}.enable,Tabular-ReadWrite,boolean
+Device.QoS.Shaper.{i}.Status,device.qo-s.shaper.{i}.status,Tabular-ReadOnly,string
+Device.QoS.Shaper.{i}.Alias,device.qo-s.shaper.{i}.alias,Tabular-ReadWrite,string
+Device.QoS.Shaper.{i}.Interface,device.qo-s.shaper.{i}.interface,Tabular-ReadWrite,string
+Device.QoS.Shaper.{i}.ShapingRate,device.qo-s.shaper.{i}.shaping-rate,Tabular-ReadWrite,int
+Device.QoS.Shaper.{i}.ShapingBurstSize,device.qo-s.shaper.{i}.shaping-burst-size,Tabular-ReadWrite,unsignedInt
+Device.LANConfigSecurity.,device.lan-config-security,ScalarObject,object
+Device.Hosts.,device.hosts,ScalarObject,object
+Device.Hosts.HostNumberOfEntries,device.hosts.host-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Hosts.Host.{i}.,device.hosts.host.{i}.,TabularObject,object
+Device.Hosts.Host.{i}.Alias,device.hosts.host.{i}.alias,Tabular-ReadWrite,string
+Device.Hosts.Host.{i}.PhysAddress,device.hosts.host.{i}.phys-address,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.IPAddress,device.hosts.host.{i}.ip-address,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.AddressSource,device.hosts.host.{i}.address-source,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.DHCPClient,device.hosts.host.{i}.dhcp-client,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.LeaseTimeRemaining,device.hosts.host.{i}.lease-time-remaining,Tabular-ReadOnly,int
+Device.Hosts.Host.{i}.AssociatedDevice,device.hosts.host.{i}.associated-device,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.Layer1Interface,device.hosts.host.{i}.layer1-interface,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.Layer3Interface,device.hosts.host.{i}.layer3-interface,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.VendorClassID,device.hosts.host.{i}.vendor-class-id,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.ClientID,device.hosts.host.{i}.client-id,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.UserClassID,device.hosts.host.{i}.user-class-id,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.HostName,device.hosts.host.{i}.host-name,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.Active,device.hosts.host.{i}.active,Tabular-ReadOnly,boolean
+Device.Hosts.Host.{i}.ActiveLastChange,device.hosts.host.{i}.active-last-change,Tabular-ReadOnly,dateTime
+Device.Hosts.Host.{i}.IPv4AddressNumberOfEntries,device.hosts.host.{i}.ipv4-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Hosts.Host.{i}.IPv6AddressNumberOfEntries,device.hosts.host.{i}.ipv6-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Hosts.Host.{i}.IPv4Address.{i}.,device.hosts.host.{i}.ipv4-address.{i}.,TabularObject,object
+Device.Hosts.Host.{i}.IPv4Address.{i}.IPAddress,device.hosts.host.{i}.ipv4-address.{i}.ip-address,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.IPv6Address.{i}.,device.hosts.host.{i}.ipv6-address.{i}.,TabularObject,object
+Device.Hosts.Host.{i}.IPv6Address.{i}.IPAddress,device.hosts.host.{i}.ipv6-address.{i}.ip-address,Tabular-ReadOnly,string
+Device.Hosts.Host.{i}.WANStats.,device.hosts.host.{i}.wan-stats,ScalarObject,object
+Device.Hosts.Host.{i}.WANStats.BytesSent,device.hosts.host.{i}.wan-stats.bytes-sent,Scalar-ReadOnly,unsignedLong
+Device.Hosts.Host.{i}.WANStats.BytesReceived,device.hosts.host.{i}.wan-stats.bytes-received,Scalar-ReadOnly,unsignedLong
+Device.Hosts.Host.{i}.WANStats.PacketsSent,device.hosts.host.{i}.wan-stats.packets-sent,Scalar-ReadOnly,unsignedLong
+Device.Hosts.Host.{i}.WANStats.PacketsReceived,device.hosts.host.{i}.wan-stats.packets-received,Scalar-ReadOnly,unsignedLong
+Device.Hosts.Host.{i}.WANStats.ErrorsSent,device.hosts.host.{i}.wan-stats.errors-sent,Scalar-ReadOnly,unsignedInt
+Device.Hosts.Host.{i}.WANStats.RetransCount,device.hosts.host.{i}.wan-stats.retrans-count,Scalar-ReadOnly,unsignedInt
+Device.Hosts.Host.{i}.WANStats.DiscardPacketsSent,device.hosts.host.{i}.wan-stats.discard-packets-sent,Scalar-ReadOnly,unsignedInt
+Device.DNS.,device.dns,ScalarObject,object
+Device.DNS.SupportedRecordTypes,device.dns.supported-record-types,Scalar-ReadOnly,string
+Device.DNS.Client.,device.dns.client,ScalarObject,object
+Device.DNS.Client.Enable,device.dns.client.enable,Scalar-ReadWrite,boolean
+Device.DNS.Client.Status,device.dns.client.status,Scalar-ReadOnly,string
+Device.DNS.Client.ServerNumberOfEntries,device.dns.client.server-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DNS.Client.Server.{i}.,device.dns.client.server.{i}.,TabularObject,object
+Device.DNS.Client.Server.{i}.Enable,device.dns.client.server.{i}.enable,Tabular-ReadWrite,boolean
+Device.DNS.Client.Server.{i}.Status,device.dns.client.server.{i}.status,Tabular-ReadOnly,string
+Device.DNS.Client.Server.{i}.Alias,device.dns.client.server.{i}.alias,Tabular-ReadWrite,string
+Device.DNS.Client.Server.{i}.DNSServer,device.dns.client.server.{i}.dns-server,Tabular-ReadWrite,string
+Device.DNS.Client.Server.{i}.Interface,device.dns.client.server.{i}.interface,Tabular-ReadWrite,string
+Device.DNS.Client.Server.{i}.Type,device.dns.client.server.{i}.type,Tabular-ReadOnly,string
+Device.DNS.Relay.,device.dns.relay,ScalarObject,object
+Device.DNS.Relay.Enable,device.dns.relay.enable,Scalar-ReadWrite,boolean
+Device.DNS.Relay.Status,device.dns.relay.status,Scalar-ReadOnly,string
+Device.DNS.Relay.ForwardNumberOfEntries,device.dns.relay.forward-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DNS.Relay.Forwarding.{i}.,device.dns.relay.forwarding.{i}.,TabularObject,object
+Device.DNS.Relay.Forwarding.{i}.Enable,device.dns.relay.forwarding.{i}.enable,Tabular-ReadWrite,boolean
+Device.DNS.Relay.Forwarding.{i}.Status,device.dns.relay.forwarding.{i}.status,Tabular-ReadOnly,string
+Device.DNS.Relay.Forwarding.{i}.Alias,device.dns.relay.forwarding.{i}.alias,Tabular-ReadWrite,string
+Device.DNS.Relay.Forwarding.{i}.DNSServer,device.dns.relay.forwarding.{i}.dns-server,Tabular-ReadWrite,string
+Device.DNS.Relay.Forwarding.{i}.Interface,device.dns.relay.forwarding.{i}.interface,Tabular-ReadWrite,string
+Device.DNS.Relay.Forwarding.{i}.Type,device.dns.relay.forwarding.{i}.type,Tabular-ReadOnly,string
+Device.DNS.Diagnostics.,device.dns.diagnostics,ScalarObject,object
+Device.DNS.Diagnostics.NSLookupDiagnostics.,device.dns.diagnostics.ns-lookup-diagnostics,ScalarObject,object
+Device.DNS.Diagnostics.NSLookupDiagnostics.DiagnosticsState,device.dns.diagnostics.ns-lookup-diagnostics.diagnostics-state,Scalar-ReadWrite,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Interface,device.dns.diagnostics.ns-lookup-diagnostics.interface,Scalar-ReadWrite,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.HostName,device.dns.diagnostics.ns-lookup-diagnostics.host-name,Scalar-ReadWrite,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.DNSServer,device.dns.diagnostics.ns-lookup-diagnostics.dns-server,Scalar-ReadWrite,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout,device.dns.diagnostics.ns-lookup-diagnostics.timeout,Scalar-ReadWrite,unsignedInt
+Device.DNS.Diagnostics.NSLookupDiagnostics.NumberOfRepetitions,device.dns.diagnostics.ns-lookup-diagnostics.number-of-repetitions,Scalar-ReadWrite,unsignedInt
+Device.DNS.Diagnostics.NSLookupDiagnostics.SuccessCount,device.dns.diagnostics.ns-lookup-diagnostics.success-count,Scalar-ReadOnly,unsignedInt
+Device.DNS.Diagnostics.NSLookupDiagnostics.ResultNumberOfEntries,device.dns.diagnostics.ns-lookup-diagnostics.result-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.,TabularObject,object
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.Status,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.status,Tabular-ReadOnly,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.AnswerType,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.answer-type,Tabular-ReadOnly,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.HostNameReturned,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.host-name-returned,Tabular-ReadOnly,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.IPAddresses,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.ip-addresses,Tabular-ReadOnly,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.DNSServerIP,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.dns-server-ip,Tabular-ReadOnly,string
+Device.DNS.Diagnostics.NSLookupDiagnostics.Result.{i}.ResponseTime,device.dns.diagnostics.ns-lookup-diagnostics.result.{i}.response-time,Tabular-ReadOnly,unsignedInt
+Device.DNS.SD.,device.dns.sd,ScalarObject,object
+Device.DNS.SD.Enable,device.dns.sd.enable,Scalar-ReadWrite,boolean
+Device.DNS.SD.ServiceNumberOfEntries,device.dns.sd.service-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DNS.SD.AdvertisedInterfaces,device.dns.sd.advertised-interfaces,Scalar-ReadWrite,string
+Device.DNS.SD.Service.{i}.,device.dns.sd.service.{i}.,TabularObject,object
+Device.DNS.SD.Service.{i}.InstanceName,device.dns.sd.service.{i}.instance-name,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.ApplicationProtocol,device.dns.sd.service.{i}.application-protocol,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.TransportProtocol,device.dns.sd.service.{i}.transport-protocol,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.Domain,device.dns.sd.service.{i}.domain,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.Port,device.dns.sd.service.{i}.port,Tabular-ReadOnly,unsignedInt
+Device.DNS.SD.Service.{i}.Target,device.dns.sd.service.{i}.target,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.Status,device.dns.sd.service.{i}.status,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.LastUpdate,device.dns.sd.service.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.DNS.SD.Service.{i}.Host,device.dns.sd.service.{i}.host,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.TimeToLive,device.dns.sd.service.{i}.time-to-live,Tabular-ReadOnly,unsignedInt
+Device.DNS.SD.Service.{i}.Priority,device.dns.sd.service.{i}.priority,Tabular-ReadOnly,unsignedInt
+Device.DNS.SD.Service.{i}.Weight,device.dns.sd.service.{i}.weight,Tabular-ReadOnly,unsignedInt
+Device.DNS.SD.Service.{i}.TextRecordNumberOfEntries,device.dns.sd.service.{i}.text-record-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DNS.SD.Service.{i}.TextRecord.{i}.,device.dns.sd.service.{i}.text-record.{i}.,TabularObject,object
+Device.DNS.SD.Service.{i}.TextRecord.{i}.Key,device.dns.sd.service.{i}.text-record.{i}.key,Tabular-ReadOnly,string
+Device.DNS.SD.Service.{i}.TextRecord.{i}.Value,device.dns.sd.service.{i}.text-record.{i}.value,Tabular-ReadOnly,string
+Device.NAT.,device.nat,ScalarObject,object
+Device.NAT.InterfaceSettingNumberOfEntries,device.nat.interface-setting-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.NAT.PortMappingNumberOfEntries,device.nat.port-mapping-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.NAT.InterfaceSetting.{i}.,device.nat.interface-setting.{i}.,TabularObject,object
+Device.NAT.InterfaceSetting.{i}.Enable,device.nat.interface-setting.{i}.enable,Tabular-ReadWrite,boolean
+Device.NAT.InterfaceSetting.{i}.Status,device.nat.interface-setting.{i}.status,Tabular-ReadOnly,string
+Device.NAT.InterfaceSetting.{i}.Alias,device.nat.interface-setting.{i}.alias,Tabular-ReadWrite,string
+Device.NAT.InterfaceSetting.{i}.Interface,device.nat.interface-setting.{i}.interface,Tabular-ReadWrite,string
+Device.NAT.PortMapping.{i}.,device.nat.port-mapping.{i}.,TabularObject,object
+Device.NAT.PortMapping.{i}.Enable,device.nat.port-mapping.{i}.enable,Tabular-ReadWrite,boolean
+Device.NAT.PortMapping.{i}.Status,device.nat.port-mapping.{i}.status,Tabular-ReadOnly,string
+Device.NAT.PortMapping.{i}.Alias,device.nat.port-mapping.{i}.alias,Tabular-ReadWrite,string
+Device.NAT.PortMapping.{i}.Interface,device.nat.port-mapping.{i}.interface,Tabular-ReadWrite,string
+Device.NAT.PortMapping.{i}.AllInterfaces,device.nat.port-mapping.{i}.all-interfaces,Tabular-ReadWrite,boolean
+Device.NAT.PortMapping.{i}.LeaseDuration,device.nat.port-mapping.{i}.lease-duration,Tabular-ReadWrite,unsignedInt
+Device.NAT.PortMapping.{i}.RemoteHost,device.nat.port-mapping.{i}.remote-host,Tabular-ReadWrite,string
+Device.NAT.PortMapping.{i}.ExternalPort,device.nat.port-mapping.{i}.external-port,Tabular-ReadWrite,unsignedInt
+Device.NAT.PortMapping.{i}.ExternalPortEndRange,device.nat.port-mapping.{i}.external-port-end-range,Tabular-ReadWrite,unsignedInt
+Device.NAT.PortMapping.{i}.InternalPort,device.nat.port-mapping.{i}.internal-port,Tabular-ReadWrite,unsignedInt
+Device.NAT.PortMapping.{i}.Protocol,device.nat.port-mapping.{i}.protocol,Tabular-ReadWrite,string
+Device.NAT.PortMapping.{i}.InternalClient,device.nat.port-mapping.{i}.internal-client,Tabular-ReadWrite,string
+Device.NAT.PortMapping.{i}.Description,device.nat.port-mapping.{i}.description,Tabular-ReadWrite,string
+Device.PCP.,device.pcp,ScalarObject,object
+Device.PCP.SupportedVersions,device.pcp.supported-versions,Scalar-ReadOnly,unsignedInt
+Device.PCP.PreferredVersion,device.pcp.preferred-version,Scalar-ReadWrite,unsignedInt
+Device.PCP.OptionList,device.pcp.option-list,Scalar-ReadOnly,unsignedInt
+Device.PCP.ClientNumberOfEntries,device.pcp.client-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.,device.pcp.client.{i}.,TabularObject,object
+Device.PCP.Client.{i}.Enable,device.pcp.client.{i}.enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.Alias,device.pcp.client.{i}.alias,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.WANInterface,device.pcp.client.{i}.wan-interface,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Status,device.pcp.client.{i}.status,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.MAPEnable,device.pcp.client.{i}.map-enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.PEEREnable,device.pcp.client.{i}.peer-enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.ANNOUNCEEnable,device.pcp.client.{i}.announce-enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.THIRDPARTYEnable,device.pcp.client.{i}.thirdparty-enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.THIRDPARTYStatus,device.pcp.client.{i}.thirdparty-status,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.FILTEREnable,device.pcp.client.{i}.filter-enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.ServerNumberOfEntries,device.pcp.client.{i}.server-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.PCPProxy.,device.pcp.client.{i}.pcp-proxy,ScalarObject,object
+Device.PCP.Client.{i}.PCPProxy.Enable,device.pcp.client.{i}.pcp-proxy.enable,Scalar-ReadWrite,boolean
+Device.PCP.Client.{i}.PCPProxy.HighestVersion,device.pcp.client.{i}.pcp-proxy.highest-version,Scalar-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.PCPProxy.Status,device.pcp.client.{i}.pcp-proxy.status,Scalar-ReadOnly,string
+Device.PCP.Client.{i}.UPnPIWF.,device.pcp.client.{i}.u-pn-piwf,ScalarObject,object
+Device.PCP.Client.{i}.UPnPIWF.Enable,device.pcp.client.{i}.u-pn-piwf.enable,Scalar-ReadWrite,boolean
+Device.PCP.Client.{i}.UPnPIWF.Status,device.pcp.client.{i}.u-pn-piwf.status,Scalar-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.,device.pcp.client.{i}.server.{i}.,TabularObject,object
+Device.PCP.Client.{i}.Server.{i}.Enable,device.pcp.client.{i}.server.{i}.enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.Server.{i}.Status,device.pcp.client.{i}.server.{i}.status,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.Alias,device.pcp.client.{i}.server.{i}.alias,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.Origin,device.pcp.client.{i}.server.{i}.origin,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.ServerNameOrAddress,device.pcp.client.{i}.server.{i}.server-name-or-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.ServerAddressInUse,device.pcp.client.{i}.server.{i}.server-address-in-use,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.AdditionalServerAddresses,device.pcp.client.{i}.server.{i}.additional-server-addresses,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.ExternalIPAddress,device.pcp.client.{i}.server.{i}.external-ip-address,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.CurrentVersion,device.pcp.client.{i}.server.{i}.current-version,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.MaximumFilters,device.pcp.client.{i}.server.{i}.maximum-filters,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.PortQuota,device.pcp.client.{i}.server.{i}.port-quota,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.PreferredLifetime,device.pcp.client.{i}.server.{i}.preferred-lifetime,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.Capabilities,device.pcp.client.{i}.server.{i}.capabilities,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.InboundMappingNumberOfEntries,device.pcp.client.{i}.server.{i}.inbound-mapping-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMappingNumberOfEntries,device.pcp.client.{i}.server.{i}.outbound-mapping-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.,TabularObject,object
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Enable,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Status,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.status,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.ErrorCode,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.error-code,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Alias,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.alias,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Origin,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.origin,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Lifetime,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.lifetime,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.SuggestedExternalIPAddress,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.suggested-external-ip-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.SuggestedExternalPort,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.suggested-external-port,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.SuggestedExternalPortEndRange,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.suggested-external-port-end-range,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.InternalPort,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.internal-port,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.ProtocolNumber,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.protocol-number,Tabular-ReadWrite,int
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.ThirdPartyAddress,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.third-party-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Description,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.description,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.AssignedExternalIPAddress,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.assigned-external-ip-address,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.AssignedExternalPort,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.assigned-external-port,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.AssignedExternalPortEndRange,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.assigned-external-port-end-range,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.FilterNumberOfEntries,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Filter.{i}.,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter.{i}.,TabularObject,object
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Filter.{i}.Alias,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter.{i}.alias,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Filter.{i}.RemoteHostIPAddress,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter.{i}.remote-host-ip-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Filter.{i}.PrefixLength,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter.{i}.prefix-length,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Filter.{i}.RemotePort,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter.{i}.remote-port,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.InboundMapping.{i}.Filter.{i}.RemotePortEndRange,device.pcp.client.{i}.server.{i}.inbound-mapping.{i}.filter.{i}.remote-port-end-range,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.,TabularObject,object
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.Enable,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.enable,Tabular-ReadWrite,boolean
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.Status,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.status,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.ErrorCode,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.error-code,Tabular-ReadOnly,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.Alias,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.alias,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.Origin,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.origin,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.Lifetime,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.lifetime,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.SuggestedExternalIPAddress,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.suggested-external-ip-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.SuggestedExternalPort,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.suggested-external-port,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.RemoteHostIPAddress,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.remote-host-ip-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.InternalPort,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.internal-port,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.RemotePort,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.remote-port,Tabular-ReadWrite,unsignedInt
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.ProtocolNumber,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.protocol-number,Tabular-ReadWrite,int
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.ThirdPartyAddress,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.third-party-address,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.Description,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.description,Tabular-ReadWrite,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.AssignedExternalIPAddress,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.assigned-external-ip-address,Tabular-ReadOnly,string
+Device.PCP.Client.{i}.Server.{i}.OutboundMapping.{i}.AssignedExternalPort,device.pcp.client.{i}.server.{i}.outbound-mapping.{i}.assigned-external-port,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.,device.dhcpv4,ScalarObject,object
+Device.DHCPv4.ClientNumberOfEntries,device.dhcpv4.client-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DHCPv4.Client.{i}.,device.dhcpv4.client.{i}.,TabularObject,object
+Device.DHCPv4.Client.{i}.Enable,device.dhcpv4.client.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Client.{i}.Alias,device.dhcpv4.client.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Client.{i}.Interface,device.dhcpv4.client.{i}.interface,Tabular-ReadWrite,string
+Device.DHCPv4.Client.{i}.Status,device.dhcpv4.client.{i}.status,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.DHCPStatus,device.dhcpv4.client.{i}.dhcp-status,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.IPAddress,device.dhcpv4.client.{i}.ip-address,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.SubnetMask,device.dhcpv4.client.{i}.subnet-mask,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.IPRouters,device.dhcpv4.client.{i}.ip-routers,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.DNSServers,device.dhcpv4.client.{i}.dns-servers,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.LeaseTimeRemaining,device.dhcpv4.client.{i}.lease-time-remaining,Tabular-ReadOnly,int
+Device.DHCPv4.Client.{i}.DHCPServer,device.dhcpv4.client.{i}.dhcp-server,Tabular-ReadOnly,string
+Device.DHCPv4.Client.{i}.PassthroughEnable,device.dhcpv4.client.{i}.passthrough-enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Client.{i}.PassthroughDHCPPool,device.dhcpv4.client.{i}.passthrough-dhcp-pool,Tabular-ReadWrite,string
+Device.DHCPv4.Client.{i}.SentOptionNumberOfEntries,device.dhcpv4.client.{i}.sent-option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Client.{i}.ReqOptionNumberOfEntries,device.dhcpv4.client.{i}.req-option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Client.{i}.SentOption.{i}.,device.dhcpv4.client.{i}.sent-option.{i}.,TabularObject,object
+Device.DHCPv4.Client.{i}.SentOption.{i}.Enable,device.dhcpv4.client.{i}.sent-option.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Client.{i}.SentOption.{i}.Alias,device.dhcpv4.client.{i}.sent-option.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Client.{i}.SentOption.{i}.Tag,device.dhcpv4.client.{i}.sent-option.{i}.tag,Tabular-ReadWrite,unsignedInt
+Device.DHCPv4.Client.{i}.SentOption.{i}.Value,device.dhcpv4.client.{i}.sent-option.{i}.value,Tabular-ReadWrite,string
+Device.DHCPv4.Client.{i}.ReqOption.{i}.,device.dhcpv4.client.{i}.req-option.{i}.,TabularObject,object
+Device.DHCPv4.Client.{i}.ReqOption.{i}.Enable,device.dhcpv4.client.{i}.req-option.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Client.{i}.ReqOption.{i}.Order,device.dhcpv4.client.{i}.req-option.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.DHCPv4.Client.{i}.ReqOption.{i}.Alias,device.dhcpv4.client.{i}.req-option.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Client.{i}.ReqOption.{i}.Tag,device.dhcpv4.client.{i}.req-option.{i}.tag,Tabular-ReadWrite,unsignedInt
+Device.DHCPv4.Client.{i}.ReqOption.{i}.Value,device.dhcpv4.client.{i}.req-option.{i}.value,Tabular-ReadOnly,string
+Device.DHCPv4.Server.,device.dhcpv4.server,ScalarObject,object
+Device.DHCPv4.Server.Enable,device.dhcpv4.server.enable,Scalar-ReadWrite,boolean
+Device.DHCPv4.Server.PoolNumberOfEntries,device.dhcpv4.server.pool-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.,device.dhcpv4.server.pool.{i}.,TabularObject,object
+Device.DHCPv4.Server.Pool.{i}.Enable,device.dhcpv4.server.pool.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.Status,device.dhcpv4.server.pool.{i}.status,Tabular-ReadOnly,string
+Device.DHCPv4.Server.Pool.{i}.Alias,device.dhcpv4.server.pool.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.Order,device.dhcpv4.server.pool.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.Interface,device.dhcpv4.server.pool.{i}.interface,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.VendorClassID,device.dhcpv4.server.pool.{i}.vendor-class-id,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.VendorClassIDExclude,device.dhcpv4.server.pool.{i}.vendor-class-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.VendorClassIDMode,device.dhcpv4.server.pool.{i}.vendor-class-id-mode,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.ClientID,device.dhcpv4.server.pool.{i}.client-id,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.ClientIDExclude,device.dhcpv4.server.pool.{i}.client-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.UserClassID,device.dhcpv4.server.pool.{i}.user-class-id,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.UserClassIDExclude,device.dhcpv4.server.pool.{i}.user-class-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.Chaddr,device.dhcpv4.server.pool.{i}.chaddr,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.ChaddrMask,device.dhcpv4.server.pool.{i}.chaddr-mask,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.ChaddrExclude,device.dhcpv4.server.pool.{i}.chaddr-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.MinAddress,device.dhcpv4.server.pool.{i}.min-address,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.MaxAddress,device.dhcpv4.server.pool.{i}.max-address,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.ReservedAddresses,device.dhcpv4.server.pool.{i}.reserved-addresses,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.SubnetMask,device.dhcpv4.server.pool.{i}.subnet-mask,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.DNSServers,device.dhcpv4.server.pool.{i}.dns-servers,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.DomainName,device.dhcpv4.server.pool.{i}.domain-name,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.IPRouters,device.dhcpv4.server.pool.{i}.ip-routers,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.LeaseTime,device.dhcpv4.server.pool.{i}.lease-time,Tabular-ReadWrite,int
+Device.DHCPv4.Server.Pool.{i}.StaticAddressNumberOfEntries,device.dhcpv4.server.pool.{i}.static-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.OptionNumberOfEntries,device.dhcpv4.server.pool.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.ClientNumberOfEntries,device.dhcpv4.server.pool.{i}.client-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.StaticAddress.{i}.,device.dhcpv4.server.pool.{i}.static-address.{i}.,TabularObject,object
+Device.DHCPv4.Server.Pool.{i}.StaticAddress.{i}.Enable,device.dhcpv4.server.pool.{i}.static-address.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.StaticAddress.{i}.Alias,device.dhcpv4.server.pool.{i}.static-address.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.StaticAddress.{i}.Chaddr,device.dhcpv4.server.pool.{i}.static-address.{i}.chaddr,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.StaticAddress.{i}.Yiaddr,device.dhcpv4.server.pool.{i}.static-address.{i}.yiaddr,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.Option.{i}.,device.dhcpv4.server.pool.{i}.option.{i}.,TabularObject,object
+Device.DHCPv4.Server.Pool.{i}.Option.{i}.Enable,device.dhcpv4.server.pool.{i}.option.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Server.Pool.{i}.Option.{i}.Alias,device.dhcpv4.server.pool.{i}.option.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.Option.{i}.Tag,device.dhcpv4.server.pool.{i}.option.{i}.tag,Tabular-ReadWrite,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.Option.{i}.Value,device.dhcpv4.server.pool.{i}.option.{i}.value,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.,device.dhcpv4.server.pool.{i}.client.{i}.,TabularObject,object
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.Alias,device.dhcpv4.server.pool.{i}.client.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.Chaddr,device.dhcpv4.server.pool.{i}.client.{i}.chaddr,Tabular-ReadOnly,string
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.Active,device.dhcpv4.server.pool.{i}.client.{i}.active,Tabular-ReadOnly,boolean
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.IPv4AddressNumberOfEntries,device.dhcpv4.server.pool.{i}.client.{i}.ipv4-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.OptionNumberOfEntries,device.dhcpv4.server.pool.{i}.client.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.IPv4Address.{i}.,device.dhcpv4.server.pool.{i}.client.{i}.ipv4-address.{i}.,TabularObject,object
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.IPv4Address.{i}.IPAddress,device.dhcpv4.server.pool.{i}.client.{i}.ipv4-address.{i}.ip-address,Tabular-ReadOnly,string
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.IPv4Address.{i}.LeaseTimeRemaining,device.dhcpv4.server.pool.{i}.client.{i}.ipv4-address.{i}.lease-time-remaining,Tabular-ReadOnly,dateTime
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.Option.{i}.,device.dhcpv4.server.pool.{i}.client.{i}.option.{i}.,TabularObject,object
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.Option.{i}.Tag,device.dhcpv4.server.pool.{i}.client.{i}.option.{i}.tag,Tabular-ReadOnly,unsignedInt
+Device.DHCPv4.Server.Pool.{i}.Client.{i}.Option.{i}.Value,device.dhcpv4.server.pool.{i}.client.{i}.option.{i}.value,Tabular-ReadOnly,string
+Device.DHCPv4.Relay.,device.dhcpv4.relay,ScalarObject,object
+Device.DHCPv4.Relay.Enable,device.dhcpv4.relay.enable,Scalar-ReadWrite,boolean
+Device.DHCPv4.Relay.Status,device.dhcpv4.relay.status,Scalar-ReadOnly,string
+Device.DHCPv4.Relay.ForwardingNumberOfEntries,device.dhcpv4.relay.forwarding-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DHCPv4.Relay.Forwarding.{i}.,device.dhcpv4.relay.forwarding.{i}.,TabularObject,object
+Device.DHCPv4.Relay.Forwarding.{i}.Enable,device.dhcpv4.relay.forwarding.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv4.Relay.Forwarding.{i}.Status,device.dhcpv4.relay.forwarding.{i}.status,Tabular-ReadOnly,string
+Device.DHCPv4.Relay.Forwarding.{i}.Alias,device.dhcpv4.relay.forwarding.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.Order,device.dhcpv4.relay.forwarding.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.DHCPv4.Relay.Forwarding.{i}.Interface,device.dhcpv4.relay.forwarding.{i}.interface,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.VendorClassID,device.dhcpv4.relay.forwarding.{i}.vendor-class-id,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.VendorClassIDExclude,device.dhcpv4.relay.forwarding.{i}.vendor-class-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Relay.Forwarding.{i}.VendorClassIDMode,device.dhcpv4.relay.forwarding.{i}.vendor-class-id-mode,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.ClientID,device.dhcpv4.relay.forwarding.{i}.client-id,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.ClientIDExclude,device.dhcpv4.relay.forwarding.{i}.client-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Relay.Forwarding.{i}.UserClassID,device.dhcpv4.relay.forwarding.{i}.user-class-id,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.UserClassIDExclude,device.dhcpv4.relay.forwarding.{i}.user-class-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Relay.Forwarding.{i}.Chaddr,device.dhcpv4.relay.forwarding.{i}.chaddr,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.ChaddrMask,device.dhcpv4.relay.forwarding.{i}.chaddr-mask,Tabular-ReadWrite,string
+Device.DHCPv4.Relay.Forwarding.{i}.ChaddrExclude,device.dhcpv4.relay.forwarding.{i}.chaddr-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv4.Relay.Forwarding.{i}.LocallyServed,device.dhcpv4.relay.forwarding.{i}.locally-served,Tabular-ReadWrite,boolean
+Device.DHCPv4.Relay.Forwarding.{i}.DHCPServerIPAddress,device.dhcpv4.relay.forwarding.{i}.dhcp-server-ip-address,Tabular-ReadWrite,string
+Device.DHCPv6.,device.dhcpv6,ScalarObject,object
+Device.DHCPv6.ClientNumberOfEntries,device.dhcpv6.client-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DHCPv6.Client.{i}.,device.dhcpv6.client.{i}.,TabularObject,object
+Device.DHCPv6.Client.{i}.Enable,device.dhcpv6.client.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv6.Client.{i}.Alias,device.dhcpv6.client.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv6.Client.{i}.Interface,device.dhcpv6.client.{i}.interface,Tabular-ReadWrite,string
+Device.DHCPv6.Client.{i}.Status,device.dhcpv6.client.{i}.status,Tabular-ReadOnly,string
+Device.DHCPv6.Client.{i}.DUID,device.dhcpv6.client.{i}.duid,Tabular-ReadOnly,string
+Device.DHCPv6.Client.{i}.RequestAddresses,device.dhcpv6.client.{i}.request-addresses,Tabular-ReadWrite,boolean
+Device.DHCPv6.Client.{i}.RequestPrefixes,device.dhcpv6.client.{i}.request-prefixes,Tabular-ReadWrite,boolean
+Device.DHCPv6.Client.{i}.RapidCommit,device.dhcpv6.client.{i}.rapid-commit,Tabular-ReadWrite,boolean
+Device.DHCPv6.Client.{i}.SuggestedT1,device.dhcpv6.client.{i}.suggested-t1,Tabular-ReadWrite,int
+Device.DHCPv6.Client.{i}.SuggestedT2,device.dhcpv6.client.{i}.suggested-t2,Tabular-ReadWrite,int
+Device.DHCPv6.Client.{i}.SupportedOptions,device.dhcpv6.client.{i}.supported-options,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Client.{i}.RequestedOptions,device.dhcpv6.client.{i}.requested-options,Tabular-ReadWrite,unsignedInt
+Device.DHCPv6.Client.{i}.ServerNumberOfEntries,device.dhcpv6.client.{i}.server-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Client.{i}.SentOptionNumberOfEntries,device.dhcpv6.client.{i}.sent-option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Client.{i}.ReceivedOptionNumberOfEntries,device.dhcpv6.client.{i}.received-option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Client.{i}.Server.{i}.,device.dhcpv6.client.{i}.server.{i}.,TabularObject,object
+Device.DHCPv6.Client.{i}.Server.{i}.SourceAddress,device.dhcpv6.client.{i}.server.{i}.source-address,Tabular-ReadOnly,string
+Device.DHCPv6.Client.{i}.Server.{i}.DUID,device.dhcpv6.client.{i}.server.{i}.duid,Tabular-ReadOnly,string
+Device.DHCPv6.Client.{i}.Server.{i}.InformationRefreshTime,device.dhcpv6.client.{i}.server.{i}.information-refresh-time,Tabular-ReadOnly,dateTime
+Device.DHCPv6.Client.{i}.SentOption.{i}.,device.dhcpv6.client.{i}.sent-option.{i}.,TabularObject,object
+Device.DHCPv6.Client.{i}.SentOption.{i}.Enable,device.dhcpv6.client.{i}.sent-option.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv6.Client.{i}.SentOption.{i}.Alias,device.dhcpv6.client.{i}.sent-option.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv6.Client.{i}.SentOption.{i}.Tag,device.dhcpv6.client.{i}.sent-option.{i}.tag,Tabular-ReadWrite,unsignedInt
+Device.DHCPv6.Client.{i}.SentOption.{i}.Value,device.dhcpv6.client.{i}.sent-option.{i}.value,Tabular-ReadWrite,string
+Device.DHCPv6.Client.{i}.ReceivedOption.{i}.,device.dhcpv6.client.{i}.received-option.{i}.,TabularObject,object
+Device.DHCPv6.Client.{i}.ReceivedOption.{i}.Tag,device.dhcpv6.client.{i}.received-option.{i}.tag,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Client.{i}.ReceivedOption.{i}.Value,device.dhcpv6.client.{i}.received-option.{i}.value,Tabular-ReadOnly,string
+Device.DHCPv6.Client.{i}.ReceivedOption.{i}.Server,device.dhcpv6.client.{i}.received-option.{i}.server,Tabular-ReadOnly,string
+Device.DHCPv6.Server.,device.dhcpv6.server,ScalarObject,object
+Device.DHCPv6.Server.Enable,device.dhcpv6.server.enable,Scalar-ReadWrite,boolean
+Device.DHCPv6.Server.PoolNumberOfEntries,device.dhcpv6.server.pool-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.,device.dhcpv6.server.pool.{i}.,TabularObject,object
+Device.DHCPv6.Server.Pool.{i}.Enable,device.dhcpv6.server.pool.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.Status,device.dhcpv6.server.pool.{i}.status,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.Alias,device.dhcpv6.server.pool.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.Order,device.dhcpv6.server.pool.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Interface,device.dhcpv6.server.pool.{i}.interface,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.DUID,device.dhcpv6.server.pool.{i}.duid,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.DUIDExclude,device.dhcpv6.server.pool.{i}.duid-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.VendorClassID,device.dhcpv6.server.pool.{i}.vendor-class-id,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.VendorClassIDExclude,device.dhcpv6.server.pool.{i}.vendor-class-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.UserClassID,device.dhcpv6.server.pool.{i}.user-class-id,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.UserClassIDExclude,device.dhcpv6.server.pool.{i}.user-class-id-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.SourceAddress,device.dhcpv6.server.pool.{i}.source-address,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.SourceAddressMask,device.dhcpv6.server.pool.{i}.source-address-mask,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.SourceAddressExclude,device.dhcpv6.server.pool.{i}.source-address-exclude,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.IANAEnable,device.dhcpv6.server.pool.{i}.iana-enable,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.IANAManualPrefixes,device.dhcpv6.server.pool.{i}.iana-manual-prefixes,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.IANAPrefixes,device.dhcpv6.server.pool.{i}.iana-prefixes,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.IAPDEnable,device.dhcpv6.server.pool.{i}.iapd-enable,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.IAPDManualPrefixes,device.dhcpv6.server.pool.{i}.iapd-manual-prefixes,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.IAPDPrefixes,device.dhcpv6.server.pool.{i}.iapd-prefixes,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.IAPDAddLength,device.dhcpv6.server.pool.{i}.iapd-add-length,Tabular-ReadWrite,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.ClientNumberOfEntries,device.dhcpv6.server.pool.{i}.client-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.OptionNumberOfEntries,device.dhcpv6.server.pool.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.,device.dhcpv6.server.pool.{i}.client.{i}.,TabularObject,object
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.Alias,device.dhcpv6.server.pool.{i}.client.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.SourceAddress,device.dhcpv6.server.pool.{i}.client.{i}.source-address,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.Active,device.dhcpv6.server.pool.{i}.client.{i}.active,Tabular-ReadOnly,boolean
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6AddressNumberOfEntries,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6PrefixNumberOfEntries,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-prefix-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.OptionNumberOfEntries,device.dhcpv6.server.pool.{i}.client.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Address.{i}.,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-address.{i}.,TabularObject,object
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Address.{i}.IPAddress,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-address.{i}.ip-address,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Address.{i}.PreferredLifetime,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-address.{i}.preferred-lifetime,Tabular-ReadOnly,dateTime
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Address.{i}.ValidLifetime,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-address.{i}.valid-lifetime,Tabular-ReadOnly,dateTime
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Prefix.{i}.,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-prefix.{i}.,TabularObject,object
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Prefix.{i}.Prefix,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-prefix.{i}.prefix,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Prefix.{i}.PreferredLifetime,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-prefix.{i}.preferred-lifetime,Tabular-ReadOnly,dateTime
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.IPv6Prefix.{i}.ValidLifetime,device.dhcpv6.server.pool.{i}.client.{i}.ipv6-prefix.{i}.valid-lifetime,Tabular-ReadOnly,dateTime
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.Option.{i}.,device.dhcpv6.server.pool.{i}.client.{i}.option.{i}.,TabularObject,object
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.Option.{i}.Tag,device.dhcpv6.server.pool.{i}.client.{i}.option.{i}.tag,Tabular-ReadOnly,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Client.{i}.Option.{i}.Value,device.dhcpv6.server.pool.{i}.client.{i}.option.{i}.value,Tabular-ReadOnly,string
+Device.DHCPv6.Server.Pool.{i}.Option.{i}.,device.dhcpv6.server.pool.{i}.option.{i}.,TabularObject,object
+Device.DHCPv6.Server.Pool.{i}.Option.{i}.Enable,device.dhcpv6.server.pool.{i}.option.{i}.enable,Tabular-ReadWrite,boolean
+Device.DHCPv6.Server.Pool.{i}.Option.{i}.Alias,device.dhcpv6.server.pool.{i}.option.{i}.alias,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.Option.{i}.Tag,device.dhcpv6.server.pool.{i}.option.{i}.tag,Tabular-ReadWrite,unsignedInt
+Device.DHCPv6.Server.Pool.{i}.Option.{i}.Value,device.dhcpv6.server.pool.{i}.option.{i}.value,Tabular-ReadWrite,string
+Device.DHCPv6.Server.Pool.{i}.Option.{i}.PassthroughClient,device.dhcpv6.server.pool.{i}.option.{i}.passthrough-client,Tabular-ReadWrite,string
+Device.IEEE8021x.,device.ieee8021x,ScalarObject,object
+Device.IEEE8021x.SupplicantNumberOfEntries,device.ieee8021x.supplicant-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.,device.ieee8021x.supplicant.{i}.,TabularObject,object
+Device.IEEE8021x.Supplicant.{i}.Enable,device.ieee8021x.supplicant.{i}.enable,Tabular-ReadWrite,boolean
+Device.IEEE8021x.Supplicant.{i}.Status,device.ieee8021x.supplicant.{i}.status,Tabular-ReadOnly,string
+Device.IEEE8021x.Supplicant.{i}.Alias,device.ieee8021x.supplicant.{i}.alias,Tabular-ReadWrite,string
+Device.IEEE8021x.Supplicant.{i}.Interface,device.ieee8021x.supplicant.{i}.interface,Tabular-ReadWrite,string
+Device.IEEE8021x.Supplicant.{i}.PAEState,device.ieee8021x.supplicant.{i}.pae-state,Tabular-ReadOnly,string
+Device.IEEE8021x.Supplicant.{i}.EAPIdentity,device.ieee8021x.supplicant.{i}.eap-identity,Tabular-ReadWrite,string
+Device.IEEE8021x.Supplicant.{i}.MaxStart,device.ieee8021x.supplicant.{i}.max-start,Tabular-ReadWrite,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.StartPeriod,device.ieee8021x.supplicant.{i}.start-period,Tabular-ReadWrite,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.HeldPeriod,device.ieee8021x.supplicant.{i}.held-period,Tabular-ReadWrite,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.AuthPeriod,device.ieee8021x.supplicant.{i}.auth-period,Tabular-ReadWrite,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.AuthenticationCapabilities,device.ieee8021x.supplicant.{i}.authentication-capabilities,Tabular-ReadOnly,string
+Device.IEEE8021x.Supplicant.{i}.StartFailurePolicy,device.ieee8021x.supplicant.{i}.start-failure-policy,Tabular-ReadWrite,string
+Device.IEEE8021x.Supplicant.{i}.AuthenticationSuccessPolicy,device.ieee8021x.supplicant.{i}.authentication-success-policy,Tabular-ReadWrite,string
+Device.IEEE8021x.Supplicant.{i}.Stats.,device.ieee8021x.supplicant.{i}.stats,ScalarObject,object
+Device.IEEE8021x.Supplicant.{i}.Stats.ReceivedFrames,device.ieee8021x.supplicant.{i}.stats.received-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.TransmittedFrames,device.ieee8021x.supplicant.{i}.stats.transmitted-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.TransmittedStartFrames,device.ieee8021x.supplicant.{i}.stats.transmitted-start-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.TransmittedLogoffFrames,device.ieee8021x.supplicant.{i}.stats.transmitted-logoff-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.TransmittedResponseIdFrames,device.ieee8021x.supplicant.{i}.stats.transmitted-response-id-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.TransmittedResponseFrames,device.ieee8021x.supplicant.{i}.stats.transmitted-response-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.ReceivedRequestIdFrames,device.ieee8021x.supplicant.{i}.stats.received-request-id-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.ReceivedRequestFrames,device.ieee8021x.supplicant.{i}.stats.received-request-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.ReceivedInvalidFrames,device.ieee8021x.supplicant.{i}.stats.received-invalid-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.ReceivedLengthErrorFrames,device.ieee8021x.supplicant.{i}.stats.received-length-error-frames,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.LastFrameVersion,device.ieee8021x.supplicant.{i}.stats.last-frame-version,Scalar-ReadOnly,unsignedInt
+Device.IEEE8021x.Supplicant.{i}.Stats.LastFrameSourceMACAddress,device.ieee8021x.supplicant.{i}.stats.last-frame-source-mac-address,Scalar-ReadOnly,string
+Device.IEEE8021x.Supplicant.{i}.EAPMD5.,device.ieee8021x.supplicant.{i}.eapm-d5,ScalarObject,object
+Device.IEEE8021x.Supplicant.{i}.EAPMD5.Enable,device.ieee8021x.supplicant.{i}.eapm-d5.enable,Scalar-ReadWrite,boolean
+Device.IEEE8021x.Supplicant.{i}.EAPTLS.,device.ieee8021x.supplicant.{i}.eaptls,ScalarObject,object
+Device.IEEE8021x.Supplicant.{i}.EAPTLS.Enable,device.ieee8021x.supplicant.{i}.eaptls.enable,Scalar-ReadWrite,boolean
+Device.IEEE8021x.Supplicant.{i}.EAPTLS.MutualAuthenticationEnable,device.ieee8021x.supplicant.{i}.eaptls.mutual-authentication-enable,Scalar-ReadWrite,boolean
+Device.Users.,device.users,ScalarObject,object
+Device.Users.UserNumberOfEntries,device.users.user-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Users.User.{i}.,device.users.user.{i}.,TabularObject,object
+Device.Users.User.{i}.Alias,device.users.user.{i}.alias,Tabular-ReadWrite,string
+Device.Users.User.{i}.Enable,device.users.user.{i}.enable,Tabular-ReadWrite,boolean
+Device.Users.User.{i}.RemoteAccessCapable,device.users.user.{i}.remote-access-capable,Tabular-ReadWrite,boolean
+Device.Users.User.{i}.Username,device.users.user.{i}.username,Tabular-ReadWrite,string
+Device.Users.User.{i}.Language,device.users.user.{i}.language,Tabular-ReadWrite,string
+Device.SmartCardReaders.,device.smart-card-readers,ScalarObject,object
+Device.SmartCardReaders.SmartCardReaderNumberOfEntries,device.smart-card-readers.smart-card-reader-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.SmartCardReaders.SmartCardReader.{i}.,device.smart-card-readers.smart-card-reader.{i}.,TabularObject,object
+Device.SmartCardReaders.SmartCardReader.{i}.Alias,device.smart-card-readers.smart-card-reader.{i}.alias,Tabular-ReadWrite,string
+Device.SmartCardReaders.SmartCardReader.{i}.Enable,device.smart-card-readers.smart-card-reader.{i}.enable,Tabular-ReadWrite,boolean
+Device.SmartCardReaders.SmartCardReader.{i}.Status,device.smart-card-readers.smart-card-reader.{i}.status,Tabular-ReadOnly,string
+Device.SmartCardReaders.SmartCardReader.{i}.Name,device.smart-card-readers.smart-card-reader.{i}.name,Tabular-ReadOnly,string
+Device.SmartCardReaders.SmartCardReader.{i}.ResetTime,device.smart-card-readers.smart-card-reader.{i}.reset-time,Tabular-ReadOnly,dateTime
+Device.SmartCardReaders.SmartCardReader.{i}.DecryptionFailedCounter,device.smart-card-readers.smart-card-reader.{i}.decryption-failed-counter,Tabular-ReadOnly,unsignedInt
+Device.SmartCardReaders.SmartCardReader.{i}.DecryptionFailedNoKeyCounter,device.smart-card-readers.smart-card-reader.{i}.decryption-failed-no-key-counter,Tabular-ReadOnly,unsignedInt
+Device.SmartCardReaders.SmartCardReader.{i}.SmartCard.,device.smart-card-readers.smart-card-reader.{i}.smart-card,ScalarObject,object
+Device.SmartCardReaders.SmartCardReader.{i}.SmartCard.Status,device.smart-card-readers.smart-card-reader.{i}.smart-card.status,Scalar-ReadOnly,string
+Device.SmartCardReaders.SmartCardReader.{i}.SmartCard.Type,device.smart-card-readers.smart-card-reader.{i}.smart-card.type,Scalar-ReadOnly,string
+Device.SmartCardReaders.SmartCardReader.{i}.SmartCard.Application,device.smart-card-readers.smart-card-reader.{i}.smart-card.application,Scalar-ReadOnly,string
+Device.SmartCardReaders.SmartCardReader.{i}.SmartCard.SerialNumber,device.smart-card-readers.smart-card-reader.{i}.smart-card.serial-number,Scalar-ReadOnly,string
+Device.SmartCardReaders.SmartCardReader.{i}.SmartCard.ATR,device.smart-card-readers.smart-card-reader.{i}.smart-card.atr,Scalar-ReadOnly,string
+Device.UPnP.,device.u-pn-p,ScalarObject,object
+Device.UPnP.Device.,device.u-pn-p.device,ScalarObject,object
+Device.UPnP.Device.Enable,device.u-pn-p.device.enable,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPMediaServer,device.u-pn-p.device.u-pn-p-media-server,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPMediaRenderer,device.u-pn-p.device.u-pn-p-media-renderer,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPWLANAccessPoint,device.u-pn-p.device.u-pn-pwlan-access-point,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPQoSDevice,device.u-pn-p.device.u-pn-p-qo-s-device,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPQoSPolicyHolder,device.u-pn-p.device.u-pn-p-qo-s-policy-holder,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPIGD,device.u-pn-p.device.u-pn-pigd,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPDMBasicMgmt,device.u-pn-p.device.u-pn-pdm-basic-mgmt,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPDMConfigurationMgmt,device.u-pn-p.device.u-pn-pdm-configuration-mgmt,Scalar-ReadWrite,boolean
+Device.UPnP.Device.UPnPDMSoftwareMgmt,device.u-pn-p.device.u-pn-pdm-software-mgmt,Scalar-ReadWrite,boolean
+Device.UPnP.Device.Capabilities.,device.u-pn-p.device.capabilities,ScalarObject,object
+Device.UPnP.Device.Capabilities.UPnPArchitecture,device.u-pn-p.device.capabilities.u-pn-p-architecture,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPArchitectureMinorVer,device.u-pn-p.device.capabilities.u-pn-p-architecture-minor-ver,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPMediaServer,device.u-pn-p.device.capabilities.u-pn-p-media-server,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPMediaRenderer,device.u-pn-p.device.capabilities.u-pn-p-media-renderer,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPWLANAccessPoint,device.u-pn-p.device.capabilities.u-pn-pwlan-access-point,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPBasicDevice,device.u-pn-p.device.capabilities.u-pn-p-basic-device,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPQoSDevice,device.u-pn-p.device.capabilities.u-pn-p-qo-s-device,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPQoSPolicyHolder,device.u-pn-p.device.capabilities.u-pn-p-qo-s-policy-holder,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPIGD,device.u-pn-p.device.capabilities.u-pn-pigd,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPDMBasicMgmt,device.u-pn-p.device.capabilities.u-pn-pdm-basic-mgmt,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPDMConfigurationMgmt,device.u-pn-p.device.capabilities.u-pn-pdm-configuration-mgmt,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Device.Capabilities.UPnPDMSoftwareMgmt,device.u-pn-p.device.capabilities.u-pn-pdm-software-mgmt,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Discovery.,device.u-pn-p.discovery,ScalarObject,object
+Device.UPnP.Discovery.RootDeviceNumberOfEntries,device.u-pn-p.discovery.root-device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Discovery.DeviceNumberOfEntries,device.u-pn-p.discovery.device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Discovery.ServiceNumberOfEntries,device.u-pn-p.discovery.service-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Discovery.RootDevice.{i}.,device.u-pn-p.discovery.root-device.{i}.,TabularObject,object
+Device.UPnP.Discovery.RootDevice.{i}.Status,device.u-pn-p.discovery.root-device.{i}.status,Tabular-ReadOnly,string
+Device.UPnP.Discovery.RootDevice.{i}.UUID,device.u-pn-p.discovery.root-device.{i}.uuid,Tabular-ReadOnly,string
+Device.UPnP.Discovery.RootDevice.{i}.USN,device.u-pn-p.discovery.root-device.{i}.usn,Tabular-ReadOnly,string
+Device.UPnP.Discovery.RootDevice.{i}.LeaseTime,device.u-pn-p.discovery.root-device.{i}.lease-time,Tabular-ReadOnly,unsignedInt
+Device.UPnP.Discovery.RootDevice.{i}.Location,device.u-pn-p.discovery.root-device.{i}.location,Tabular-ReadOnly,string
+Device.UPnP.Discovery.RootDevice.{i}.Server,device.u-pn-p.discovery.root-device.{i}.server,Tabular-ReadOnly,string
+Device.UPnP.Discovery.RootDevice.{i}.Host,device.u-pn-p.discovery.root-device.{i}.host,Tabular-ReadOnly,string
+Device.UPnP.Discovery.RootDevice.{i}.LastUpdate,device.u-pn-p.discovery.root-device.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.UPnP.Discovery.Device.{i}.,device.u-pn-p.discovery.device.{i}.,TabularObject,object
+Device.UPnP.Discovery.Device.{i}.Status,device.u-pn-p.discovery.device.{i}.status,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Device.{i}.UUID,device.u-pn-p.discovery.device.{i}.uuid,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Device.{i}.USN,device.u-pn-p.discovery.device.{i}.usn,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Device.{i}.LeaseTime,device.u-pn-p.discovery.device.{i}.lease-time,Tabular-ReadOnly,unsignedInt
+Device.UPnP.Discovery.Device.{i}.Location,device.u-pn-p.discovery.device.{i}.location,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Device.{i}.Server,device.u-pn-p.discovery.device.{i}.server,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Device.{i}.Host,device.u-pn-p.discovery.device.{i}.host,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Device.{i}.LastUpdate,device.u-pn-p.discovery.device.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.UPnP.Discovery.Service.{i}.,device.u-pn-p.discovery.service.{i}.,TabularObject,object
+Device.UPnP.Discovery.Service.{i}.Status,device.u-pn-p.discovery.service.{i}.status,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Service.{i}.USN,device.u-pn-p.discovery.service.{i}.usn,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Service.{i}.LeaseTime,device.u-pn-p.discovery.service.{i}.lease-time,Tabular-ReadOnly,unsignedInt
+Device.UPnP.Discovery.Service.{i}.Location,device.u-pn-p.discovery.service.{i}.location,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Service.{i}.Server,device.u-pn-p.discovery.service.{i}.server,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Service.{i}.Host,device.u-pn-p.discovery.service.{i}.host,Tabular-ReadOnly,string
+Device.UPnP.Discovery.Service.{i}.LastUpdate,device.u-pn-p.discovery.service.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.UPnP.Discovery.Service.{i}.ParentDevice,device.u-pn-p.discovery.service.{i}.parent-device,Tabular-ReadOnly,string
+Device.UPnP.Description.,device.u-pn-p.description,ScalarObject,object
+Device.UPnP.Description.DeviceDescriptionNumberOfEntries,device.u-pn-p.description.device-description-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Description.DeviceInstanceNumberOfEntries,device.u-pn-p.description.device-instance-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Description.ServiceInstanceNumberOfEntries,device.u-pn-p.description.service-instance-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.UPnP.Description.DeviceDescription.{i}.,device.u-pn-p.description.device-description.{i}.,TabularObject,object
+Device.UPnP.Description.DeviceDescription.{i}.URLBase,device.u-pn-p.description.device-description.{i}.url-base,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceDescription.{i}.SpecVersion,device.u-pn-p.description.device-description.{i}.spec-version,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceDescription.{i}.Host,device.u-pn-p.description.device-description.{i}.host,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.,device.u-pn-p.description.device-instance.{i}.,TabularObject,object
+Device.UPnP.Description.DeviceInstance.{i}.UDN,device.u-pn-p.description.device-instance.{i}.udn,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ParentDevice,device.u-pn-p.description.device-instance.{i}.parent-device,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.DiscoveryDevice,device.u-pn-p.description.device-instance.{i}.discovery-device,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.DeviceType,device.u-pn-p.description.device-instance.{i}.device-type,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.FriendlyName,device.u-pn-p.description.device-instance.{i}.friendly-name,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.DeviceCategory,device.u-pn-p.description.device-instance.{i}.device-category,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.Manufacturer,device.u-pn-p.description.device-instance.{i}.manufacturer,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ManufacturerOUI,device.u-pn-p.description.device-instance.{i}.manufacturer-oui,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ManufacturerURL,device.u-pn-p.description.device-instance.{i}.manufacturer-url,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ModelDescription,device.u-pn-p.description.device-instance.{i}.model-description,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ModelName,device.u-pn-p.description.device-instance.{i}.model-name,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ModelNumber,device.u-pn-p.description.device-instance.{i}.model-number,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.ModelURL,device.u-pn-p.description.device-instance.{i}.model-url,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.SerialNumber,device.u-pn-p.description.device-instance.{i}.serial-number,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.UPC,device.u-pn-p.description.device-instance.{i}.upc,Tabular-ReadOnly,string
+Device.UPnP.Description.DeviceInstance.{i}.PresentationURL,device.u-pn-p.description.device-instance.{i}.presentation-url,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.,device.u-pn-p.description.service-instance.{i}.,TabularObject,object
+Device.UPnP.Description.ServiceInstance.{i}.ParentDevice,device.u-pn-p.description.service-instance.{i}.parent-device,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.ServiceId,device.u-pn-p.description.service-instance.{i}.service-id,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.ServiceDiscovery,device.u-pn-p.description.service-instance.{i}.service-discovery,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.ServiceType,device.u-pn-p.description.service-instance.{i}.service-type,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.SCPDURL,device.u-pn-p.description.service-instance.{i}.scpdurl,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.ControlURL,device.u-pn-p.description.service-instance.{i}.control-url,Tabular-ReadOnly,string
+Device.UPnP.Description.ServiceInstance.{i}.EventSubURL,device.u-pn-p.description.service-instance.{i}.event-sub-url,Tabular-ReadOnly,string
+Device.DLNA.,device.dlna,ScalarObject,object
+Device.DLNA.Capabilities.,device.dlna.capabilities,ScalarObject,object
+Device.DLNA.Capabilities.HNDDeviceClass,device.dlna.capabilities.hnd-device-class,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.DeviceCapability,device.dlna.capabilities.device-capability,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.HIDDeviceClass,device.dlna.capabilities.hid-device-class,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.ImageClassProfileID,device.dlna.capabilities.image-class-profile-id,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.AudioClassProfileID,device.dlna.capabilities.audio-class-profile-id,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.AVClassProfileID,device.dlna.capabilities.av-class-profile-id,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.MediaCollectionProfileID,device.dlna.capabilities.media-collection-profile-id,Scalar-ReadOnly,string
+Device.DLNA.Capabilities.PrinterClassProfileID,device.dlna.capabilities.printer-class-profile-id,Scalar-ReadOnly,string
+Device.SelfTestDiagnostics.,device.self-test-diagnostics,ScalarObject,object
+Device.SelfTestDiagnostics.DiagnosticsState,device.self-test-diagnostics.diagnostics-state,Scalar-ReadWrite,string
+Device.SelfTestDiagnostics.Results,device.self-test-diagnostics.results,Scalar-ReadOnly,string
+Device.Firewall.,device.firewall,ScalarObject,object
+Device.Firewall.Enable,device.firewall.enable,Scalar-ReadWrite,boolean
+Device.Firewall.Config,device.firewall.config,Scalar-ReadWrite,string
+Device.Firewall.AdvancedLevel,device.firewall.advanced-level,Scalar-ReadWrite,string
+Device.Firewall.Type,device.firewall.type,Scalar-ReadOnly,string
+Device.Firewall.Version,device.firewall.version,Scalar-ReadOnly,string
+Device.Firewall.LastChange,device.firewall.last-change,Scalar-ReadOnly,dateTime
+Device.Firewall.LevelNumberOfEntries,device.firewall.level-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Firewall.ChainNumberOfEntries,device.firewall.chain-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Firewall.Level.{i}.,device.firewall.level.{i}.,TabularObject,object
+Device.Firewall.Level.{i}.Alias,device.firewall.level.{i}.alias,Tabular-ReadWrite,string
+Device.Firewall.Level.{i}.Name,device.firewall.level.{i}.name,Tabular-ReadWrite,string
+Device.Firewall.Level.{i}.Description,device.firewall.level.{i}.description,Tabular-ReadWrite,string
+Device.Firewall.Level.{i}.Order,device.firewall.level.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.Firewall.Level.{i}.Chain,device.firewall.level.{i}.chain,Tabular-ReadOnly,string
+Device.Firewall.Level.{i}.PortMappingEnabled,device.firewall.level.{i}.port-mapping-enabled,Tabular-ReadWrite,boolean
+Device.Firewall.Level.{i}.DefaultPolicy,device.firewall.level.{i}.default-policy,Tabular-ReadWrite,string
+Device.Firewall.Level.{i}.DefaultLogPolicy,device.firewall.level.{i}.default-log-policy,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.,device.firewall.chain.{i}.,TabularObject,object
+Device.Firewall.Chain.{i}.Enable,device.firewall.chain.{i}.enable,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Alias,device.firewall.chain.{i}.alias,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Name,device.firewall.chain.{i}.name,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Creator,device.firewall.chain.{i}.creator,Tabular-ReadOnly,string
+Device.Firewall.Chain.{i}.RuleNumberOfEntries,device.firewall.chain.{i}.rule-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.Firewall.Chain.{i}.Rule.{i}.,device.firewall.chain.{i}.rule.{i}.,TabularObject,object
+Device.Firewall.Chain.{i}.Rule.{i}.Enable,device.firewall.chain.{i}.rule.{i}.enable,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.Status,device.firewall.chain.{i}.rule.{i}.status,Tabular-ReadOnly,string
+Device.Firewall.Chain.{i}.Rule.{i}.Order,device.firewall.chain.{i}.rule.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.Firewall.Chain.{i}.Rule.{i}.Alias,device.firewall.chain.{i}.rule.{i}.alias,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.Description,device.firewall.chain.{i}.rule.{i}.description,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.Target,device.firewall.chain.{i}.rule.{i}.target,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.TargetChain,device.firewall.chain.{i}.rule.{i}.target-chain,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.Log,device.firewall.chain.{i}.rule.{i}.log,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.CreationDate,device.firewall.chain.{i}.rule.{i}.creation-date,Tabular-ReadOnly,dateTime
+Device.Firewall.Chain.{i}.Rule.{i}.ExpiryDate,device.firewall.chain.{i}.rule.{i}.expiry-date,Tabular-ReadWrite,dateTime
+Device.Firewall.Chain.{i}.Rule.{i}.SourceInterface,device.firewall.chain.{i}.rule.{i}.source-interface,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.SourceInterfaceExclude,device.firewall.chain.{i}.rule.{i}.source-interface-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.SourceAllInterfaces,device.firewall.chain.{i}.rule.{i}.source-all-interfaces,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.DestInterface,device.firewall.chain.{i}.rule.{i}.dest-interface,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.DestInterfaceExclude,device.firewall.chain.{i}.rule.{i}.dest-interface-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.DestAllInterfaces,device.firewall.chain.{i}.rule.{i}.dest-all-interfaces,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.IPVersion,device.firewall.chain.{i}.rule.{i}.ip-version,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.DestIP,device.firewall.chain.{i}.rule.{i}.dest-ip,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.DestMask,device.firewall.chain.{i}.rule.{i}.dest-mask,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.DestIPExclude,device.firewall.chain.{i}.rule.{i}.dest-ip-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.SourceIP,device.firewall.chain.{i}.rule.{i}.source-ip,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.SourceMask,device.firewall.chain.{i}.rule.{i}.source-mask,Tabular-ReadWrite,string
+Device.Firewall.Chain.{i}.Rule.{i}.SourceIPExclude,device.firewall.chain.{i}.rule.{i}.source-ip-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.Protocol,device.firewall.chain.{i}.rule.{i}.protocol,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.ProtocolExclude,device.firewall.chain.{i}.rule.{i}.protocol-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.DestPort,device.firewall.chain.{i}.rule.{i}.dest-port,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.DestPortRangeMax,device.firewall.chain.{i}.rule.{i}.dest-port-range-max,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.DestPortExclude,device.firewall.chain.{i}.rule.{i}.dest-port-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.SourcePort,device.firewall.chain.{i}.rule.{i}.source-port,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.SourcePortRangeMax,device.firewall.chain.{i}.rule.{i}.source-port-range-max,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.SourcePortExclude,device.firewall.chain.{i}.rule.{i}.source-port-exclude,Tabular-ReadWrite,boolean
+Device.Firewall.Chain.{i}.Rule.{i}.DSCP,device.firewall.chain.{i}.rule.{i}.dscp,Tabular-ReadWrite,int
+Device.Firewall.Chain.{i}.Rule.{i}.DSCPExclude,device.firewall.chain.{i}.rule.{i}.dscp-exclude,Tabular-ReadWrite,boolean
+Device.PeriodicStatistics.,device.periodic-statistics,ScalarObject,object
+Device.PeriodicStatistics.MinSampleInterval,device.periodic-statistics.min-sample-interval,Scalar-ReadOnly,unsignedInt
+Device.PeriodicStatistics.MaxReportSamples,device.periodic-statistics.max-report-samples,Scalar-ReadOnly,unsignedInt
+Device.PeriodicStatistics.SampleSetNumberOfEntries,device.periodic-statistics.sample-set-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.,device.periodic-statistics.sample-set.{i}.,TabularObject,object
+Device.PeriodicStatistics.SampleSet.{i}.Alias,device.periodic-statistics.sample-set.{i}.alias,Tabular-ReadWrite,string
+Device.PeriodicStatistics.SampleSet.{i}.Enable,device.periodic-statistics.sample-set.{i}.enable,Tabular-ReadWrite,boolean
+Device.PeriodicStatistics.SampleSet.{i}.Status,device.periodic-statistics.sample-set.{i}.status,Tabular-ReadOnly,string
+Device.PeriodicStatistics.SampleSet.{i}.Name,device.periodic-statistics.sample-set.{i}.name,Tabular-ReadWrite,string
+Device.PeriodicStatistics.SampleSet.{i}.SampleInterval,device.periodic-statistics.sample-set.{i}.sample-interval,Tabular-ReadWrite,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.ReportSamples,device.periodic-statistics.sample-set.{i}.report-samples,Tabular-ReadWrite,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.TimeReference,device.periodic-statistics.sample-set.{i}.time-reference,Tabular-ReadWrite,dateTime
+Device.PeriodicStatistics.SampleSet.{i}.FetchSamples,device.periodic-statistics.sample-set.{i}.fetch-samples,Tabular-ReadWrite,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.ReportStartTime,device.periodic-statistics.sample-set.{i}.report-start-time,Tabular-ReadOnly,dateTime
+Device.PeriodicStatistics.SampleSet.{i}.ReportEndTime,device.periodic-statistics.sample-set.{i}.report-end-time,Tabular-ReadOnly,dateTime
+Device.PeriodicStatistics.SampleSet.{i}.SampleSeconds,device.periodic-statistics.sample-set.{i}.sample-seconds,Tabular-ReadOnly,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.ParameterNumberOfEntries,device.periodic-statistics.sample-set.{i}.parameter-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.,device.periodic-statistics.sample-set.{i}.parameter.{i}.,TabularObject,object
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.Alias,device.periodic-statistics.sample-set.{i}.parameter.{i}.alias,Tabular-ReadWrite,string
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.Enable,device.periodic-statistics.sample-set.{i}.parameter.{i}.enable,Tabular-ReadWrite,boolean
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.Reference,device.periodic-statistics.sample-set.{i}.parameter.{i}.reference,Tabular-ReadWrite,string
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.SampleMode,device.periodic-statistics.sample-set.{i}.parameter.{i}.sample-mode,Tabular-ReadWrite,string
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.CalculationMode,device.periodic-statistics.sample-set.{i}.parameter.{i}.calculation-mode,Tabular-ReadWrite,string
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.LowThreshold,device.periodic-statistics.sample-set.{i}.parameter.{i}.low-threshold,Tabular-ReadWrite,int
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.HighThreshold,device.periodic-statistics.sample-set.{i}.parameter.{i}.high-threshold,Tabular-ReadWrite,int
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.SampleSeconds,device.periodic-statistics.sample-set.{i}.parameter.{i}.sample-seconds,Tabular-ReadOnly,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.SuspectData,device.periodic-statistics.sample-set.{i}.parameter.{i}.suspect-data,Tabular-ReadOnly,unsignedInt
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.Values,device.periodic-statistics.sample-set.{i}.parameter.{i}.values,Tabular-ReadOnly,string
+Device.PeriodicStatistics.SampleSet.{i}.Parameter.{i}.Failures,device.periodic-statistics.sample-set.{i}.parameter.{i}.failures,Tabular-ReadOnly,unsignedInt
+Device.FaultMgmt.,device.fault-mgmt,ScalarObject,object
+Device.FaultMgmt.SupportedAlarmNumberOfEntries,device.fault-mgmt.supported-alarm-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FaultMgmt.MaxCurrentAlarmEntries,device.fault-mgmt.max-current-alarm-entries,Scalar-ReadOnly,unsignedInt
+Device.FaultMgmt.CurrentAlarmNumberOfEntries,device.fault-mgmt.current-alarm-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FaultMgmt.HistoryEventNumberOfEntries,device.fault-mgmt.history-event-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FaultMgmt.ExpeditedEventNumberOfEntries,device.fault-mgmt.expedited-event-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FaultMgmt.QueuedEventNumberOfEntries,device.fault-mgmt.queued-event-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FaultMgmt.SupportedAlarm.{i}.,device.fault-mgmt.supported-alarm.{i}.,TabularObject,object
+Device.FaultMgmt.SupportedAlarm.{i}.EventType,device.fault-mgmt.supported-alarm.{i}.event-type,Tabular-ReadOnly,string
+Device.FaultMgmt.SupportedAlarm.{i}.ProbableCause,device.fault-mgmt.supported-alarm.{i}.probable-cause,Tabular-ReadOnly,string
+Device.FaultMgmt.SupportedAlarm.{i}.SpecificProblem,device.fault-mgmt.supported-alarm.{i}.specific-problem,Tabular-ReadOnly,string
+Device.FaultMgmt.SupportedAlarm.{i}.PerceivedSeverity,device.fault-mgmt.supported-alarm.{i}.perceived-severity,Tabular-ReadOnly,string
+Device.FaultMgmt.SupportedAlarm.{i}.ReportingMechanism,device.fault-mgmt.supported-alarm.{i}.reporting-mechanism,Tabular-ReadWrite,string
+Device.FaultMgmt.CurrentAlarm.{i}.,device.fault-mgmt.current-alarm.{i}.,TabularObject,object
+Device.FaultMgmt.CurrentAlarm.{i}.AlarmIdentifier,device.fault-mgmt.current-alarm.{i}.alarm-identifier,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.AlarmRaisedTime,device.fault-mgmt.current-alarm.{i}.alarm-raised-time,Tabular-ReadOnly,dateTime
+Device.FaultMgmt.CurrentAlarm.{i}.AlarmChangedTime,device.fault-mgmt.current-alarm.{i}.alarm-changed-time,Tabular-ReadOnly,dateTime
+Device.FaultMgmt.CurrentAlarm.{i}.ManagedObjectInstance,device.fault-mgmt.current-alarm.{i}.managed-object-instance,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.EventType,device.fault-mgmt.current-alarm.{i}.event-type,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.ProbableCause,device.fault-mgmt.current-alarm.{i}.probable-cause,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.SpecificProblem,device.fault-mgmt.current-alarm.{i}.specific-problem,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.PerceivedSeverity,device.fault-mgmt.current-alarm.{i}.perceived-severity,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.AdditionalText,device.fault-mgmt.current-alarm.{i}.additional-text,Tabular-ReadOnly,string
+Device.FaultMgmt.CurrentAlarm.{i}.AdditionalInformation,device.fault-mgmt.current-alarm.{i}.additional-information,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.,device.fault-mgmt.history-event.{i}.,TabularObject,object
+Device.FaultMgmt.HistoryEvent.{i}.EventTime,device.fault-mgmt.history-event.{i}.event-time,Tabular-ReadOnly,dateTime
+Device.FaultMgmt.HistoryEvent.{i}.AlarmIdentifier,device.fault-mgmt.history-event.{i}.alarm-identifier,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.NotificationType,device.fault-mgmt.history-event.{i}.notification-type,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.ManagedObjectInstance,device.fault-mgmt.history-event.{i}.managed-object-instance,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.EventType,device.fault-mgmt.history-event.{i}.event-type,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.ProbableCause,device.fault-mgmt.history-event.{i}.probable-cause,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.SpecificProblem,device.fault-mgmt.history-event.{i}.specific-problem,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.PerceivedSeverity,device.fault-mgmt.history-event.{i}.perceived-severity,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.AdditionalText,device.fault-mgmt.history-event.{i}.additional-text,Tabular-ReadOnly,string
+Device.FaultMgmt.HistoryEvent.{i}.AdditionalInformation,device.fault-mgmt.history-event.{i}.additional-information,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.,device.fault-mgmt.expedited-event.{i}.,TabularObject,object
+Device.FaultMgmt.ExpeditedEvent.{i}.EventTime,device.fault-mgmt.expedited-event.{i}.event-time,Tabular-ReadOnly,dateTime
+Device.FaultMgmt.ExpeditedEvent.{i}.AlarmIdentifier,device.fault-mgmt.expedited-event.{i}.alarm-identifier,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.NotificationType,device.fault-mgmt.expedited-event.{i}.notification-type,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.ManagedObjectInstance,device.fault-mgmt.expedited-event.{i}.managed-object-instance,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.EventType,device.fault-mgmt.expedited-event.{i}.event-type,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.ProbableCause,device.fault-mgmt.expedited-event.{i}.probable-cause,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.SpecificProblem,device.fault-mgmt.expedited-event.{i}.specific-problem,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.PerceivedSeverity,device.fault-mgmt.expedited-event.{i}.perceived-severity,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.AdditionalText,device.fault-mgmt.expedited-event.{i}.additional-text,Tabular-ReadOnly,string
+Device.FaultMgmt.ExpeditedEvent.{i}.AdditionalInformation,device.fault-mgmt.expedited-event.{i}.additional-information,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.,device.fault-mgmt.queued-event.{i}.,TabularObject,object
+Device.FaultMgmt.QueuedEvent.{i}.EventTime,device.fault-mgmt.queued-event.{i}.event-time,Tabular-ReadOnly,dateTime
+Device.FaultMgmt.QueuedEvent.{i}.AlarmIdentifier,device.fault-mgmt.queued-event.{i}.alarm-identifier,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.NotificationType,device.fault-mgmt.queued-event.{i}.notification-type,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.ManagedObjectInstance,device.fault-mgmt.queued-event.{i}.managed-object-instance,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.EventType,device.fault-mgmt.queued-event.{i}.event-type,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.ProbableCause,device.fault-mgmt.queued-event.{i}.probable-cause,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.SpecificProblem,device.fault-mgmt.queued-event.{i}.specific-problem,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.PerceivedSeverity,device.fault-mgmt.queued-event.{i}.perceived-severity,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.AdditionalText,device.fault-mgmt.queued-event.{i}.additional-text,Tabular-ReadOnly,string
+Device.FaultMgmt.QueuedEvent.{i}.AdditionalInformation,device.fault-mgmt.queued-event.{i}.additional-information,Tabular-ReadOnly,string
+Device.Security.,device.security,ScalarObject,object
+Device.Security.CertificateNumberOfEntries,device.security.certificate-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Security.Certificate.{i}.,device.security.certificate.{i}.,TabularObject,object
+Device.Security.Certificate.{i}.Enable,device.security.certificate.{i}.enable,Tabular-ReadWrite,boolean
+Device.Security.Certificate.{i}.LastModif,device.security.certificate.{i}.last-modif,Tabular-ReadOnly,dateTime
+Device.Security.Certificate.{i}.SerialNumber,device.security.certificate.{i}.serial-number,Tabular-ReadOnly,string
+Device.Security.Certificate.{i}.Issuer,device.security.certificate.{i}.issuer,Tabular-ReadOnly,string
+Device.Security.Certificate.{i}.NotBefore,device.security.certificate.{i}.not-before,Tabular-ReadOnly,dateTime
+Device.Security.Certificate.{i}.NotAfter,device.security.certificate.{i}.not-after,Tabular-ReadOnly,dateTime
+Device.Security.Certificate.{i}.Subject,device.security.certificate.{i}.subject,Tabular-ReadOnly,string
+Device.Security.Certificate.{i}.SubjectAlt,device.security.certificate.{i}.subject-alt,Tabular-ReadOnly,string
+Device.Security.Certificate.{i}.SignatureAlgorithm,device.security.certificate.{i}.signature-algorithm,Tabular-ReadOnly,string
+Device.FAP.,device.fap,ScalarObject,object
+Device.FAP.GPS.,device.fap.gps,ScalarObject,object
+Device.FAP.GPS.ScanOnBoot,device.fap.gps.scan-on-boot,Scalar-ReadWrite,boolean
+Device.FAP.GPS.ScanPeriodically,device.fap.gps.scan-periodically,Scalar-ReadWrite,boolean
+Device.FAP.GPS.PeriodicInterval,device.fap.gps.periodic-interval,Scalar-ReadWrite,unsignedInt
+Device.FAP.GPS.PeriodicTime,device.fap.gps.periodic-time,Scalar-ReadWrite,dateTime
+Device.FAP.GPS.ContinuousGPS,device.fap.gps.continuous-gps,Scalar-ReadWrite,boolean
+Device.FAP.GPS.ScanTimeout,device.fap.gps.scan-timeout,Scalar-ReadWrite,unsignedInt
+Device.FAP.GPS.ScanStatus,device.fap.gps.scan-status,Scalar-ReadOnly,string
+Device.FAP.GPS.ErrorDetails,device.fap.gps.error-details,Scalar-ReadOnly,string
+Device.FAP.GPS.LastScanTime,device.fap.gps.last-scan-time,Scalar-ReadOnly,dateTime
+Device.FAP.GPS.LastSuccessfulScanTime,device.fap.gps.last-successful-scan-time,Scalar-ReadOnly,dateTime
+Device.FAP.GPS.LockedLatitude,device.fap.gps.locked-latitude,Scalar-ReadOnly,int
+Device.FAP.GPS.LockedLongitude,device.fap.gps.locked-longitude,Scalar-ReadOnly,int
+Device.FAP.GPS.NumberOfSatellites,device.fap.gps.number-of-satellites,Scalar-ReadOnly,unsignedInt
+Device.FAP.GPS.ContinuousGPSStatus.,device.fap.gps.continuous-gps-status,ScalarObject,object
+Device.FAP.GPS.ContinuousGPSStatus.CurrentFix,device.fap.gps.continuous-gps-status.current-fix,Scalar-ReadOnly,boolean
+Device.FAP.GPS.ContinuousGPSStatus.GotFix,device.fap.gps.continuous-gps-status.got-fix,Scalar-ReadOnly,boolean
+Device.FAP.GPS.ContinuousGPSStatus.TimingGood,device.fap.gps.continuous-gps-status.timing-good,Scalar-ReadOnly,boolean
+Device.FAP.GPS.ContinuousGPSStatus.Latitude,device.fap.gps.continuous-gps-status.latitude,Scalar-ReadOnly,int
+Device.FAP.GPS.ContinuousGPSStatus.Longitude,device.fap.gps.continuous-gps-status.longitude,Scalar-ReadOnly,int
+Device.FAP.GPS.ContinuousGPSStatus.Elevation,device.fap.gps.continuous-gps-status.elevation,Scalar-ReadOnly,int
+Device.FAP.GPS.ContinuousGPSStatus.LastFixTime,device.fap.gps.continuous-gps-status.last-fix-time,Scalar-ReadOnly,dateTime
+Device.FAP.GPS.ContinuousGPSStatus.LastFixDuration,device.fap.gps.continuous-gps-status.last-fix-duration,Scalar-ReadOnly,unsignedInt
+Device.FAP.GPS.ContinuousGPSStatus.FirstFixTimeout,device.fap.gps.continuous-gps-status.first-fix-timeout,Scalar-ReadWrite,int
+Device.FAP.GPS.ContinuousGPSStatus.SatellitesTracked,device.fap.gps.continuous-gps-status.satellites-tracked,Scalar-ReadOnly,unsignedInt
+Device.FAP.GPS.ContinuousGPSStatus.SatelliteTrackingInterval,device.fap.gps.continuous-gps-status.satellite-tracking-interval,Scalar-ReadWrite,unsignedInt
+Device.FAP.GPS.ContinuousGPSStatus.ReceiverStatus,device.fap.gps.continuous-gps-status.receiver-status,Scalar-ReadOnly,string
+Device.FAP.GPS.ContinuousGPSStatus.LocationType,device.fap.gps.continuous-gps-status.location-type,Scalar-ReadOnly,string
+Device.FAP.GPS.ContinuousGPSStatus.LockTimeOutDuration,device.fap.gps.continuous-gps-status.lock-time-out-duration,Scalar-ReadWrite,unsignedInt
+Device.FAP.GPS.AGPSServerConfig.,device.fap.gps.agps-server-config,ScalarObject,object
+Device.FAP.GPS.AGPSServerConfig.Enable,device.fap.gps.agps-server-config.enable,Scalar-ReadWrite,boolean
+Device.FAP.GPS.AGPSServerConfig.ServerURL,device.fap.gps.agps-server-config.server-url,Scalar-ReadWrite,string
+Device.FAP.GPS.AGPSServerConfig.ServerPort,device.fap.gps.agps-server-config.server-port,Scalar-ReadWrite,unsignedInt
+Device.FAP.GPS.AGPSServerConfig.Username,device.fap.gps.agps-server-config.username,Scalar-ReadWrite,string
+Device.FAP.GPS.AGPSServerConfig.ReferenceLatitude,device.fap.gps.agps-server-config.reference-latitude,Scalar-ReadWrite,int
+Device.FAP.GPS.AGPSServerConfig.ReferenceLongitude,device.fap.gps.agps-server-config.reference-longitude,Scalar-ReadWrite,int
+Device.FAP.GPS.AGPSServerConfig.ServerInUse,device.fap.gps.agps-server-config.server-in-use,Scalar-ReadOnly,boolean
+Device.FAP.PerfMgmt.,device.fap.perf-mgmt,ScalarObject,object
+Device.FAP.PerfMgmt.ConfigNumberOfEntries,device.fap.perf-mgmt.config-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.FAP.PerfMgmt.Config.{i}.,device.fap.perf-mgmt.config.{i}.,TabularObject,object
+Device.FAP.PerfMgmt.Config.{i}.Enable,device.fap.perf-mgmt.config.{i}.enable,Tabular-ReadWrite,boolean
+Device.FAP.PerfMgmt.Config.{i}.Alias,device.fap.perf-mgmt.config.{i}.alias,Tabular-ReadWrite,string
+Device.FAP.PerfMgmt.Config.{i}.URL,device.fap.perf-mgmt.config.{i}.url,Tabular-ReadWrite,string
+Device.FAP.PerfMgmt.Config.{i}.Username,device.fap.perf-mgmt.config.{i}.username,Tabular-ReadWrite,string
+Device.FAP.PerfMgmt.Config.{i}.PeriodicUploadInterval,device.fap.perf-mgmt.config.{i}.periodic-upload-interval,Tabular-ReadWrite,unsignedInt
+Device.FAP.PerfMgmt.Config.{i}.PeriodicUploadTime,device.fap.perf-mgmt.config.{i}.periodic-upload-time,Tabular-ReadWrite,dateTime
+Device.FAP.ApplicationPlatform.,device.fap.application-platform,ScalarObject,object
+Device.FAP.ApplicationPlatform.Version,device.fap.application-platform.version,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Enable,device.fap.application-platform.enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Status,device.fap.application-platform.status,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.MaxNumberOfApplications,device.fap.application-platform.max-number-of-applications,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.CurrentNumberofApplications,device.fap.application-platform.current-numberof-applications,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Capabilities.,device.fap.application-platform.capabilities,ScalarObject,object
+Device.FAP.ApplicationPlatform.Capabilities.PresenceApplicationSupport,device.fap.application-platform.capabilities.presence-application-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.FemtoAwarenessAPISupport,device.fap.application-platform.capabilities.femto-awareness-api-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.SMSAPISupport,device.fap.application-platform.capabilities.smsapi-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.SubscribeToNotificationsOfSMSSentToApplicationSupport,device.fap.application-platform.capabilities.subscribe-to-notifications-of-sms-sent-to-application-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.QuerySMSDeliveryStatusSupport,device.fap.application-platform.capabilities.query-sms-delivery-status-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.MMSAPISupport,device.fap.application-platform.capabilities.mmsapi-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.QueryMMSDeliveryStatusSupport,device.fap.application-platform.capabilities.query-mms-delivery-status-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.SubscribeToNotificationsOfMMSSentToApplicationSupport,device.fap.application-platform.capabilities.subscribe-to-notifications-of-mms-sent-to-application-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.TerminalLocationAPISupport,device.fap.application-platform.capabilities.terminal-location-api-support,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Capabilities.AuthenticationMethodsSupported,device.fap.application-platform.capabilities.authentication-methods-supported,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Capabilities.AccessLevelsSupported,device.fap.application-platform.capabilities.access-levels-supported,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Capabilities.SendSMSTargetAddressType,device.fap.application-platform.capabilities.send-sms-target-address-type,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Capabilities.SendMMSTargetAddressType,device.fap.application-platform.capabilities.send-mms-target-address-type,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Control.,device.fap.application-platform.control,ScalarObject,object
+Device.FAP.ApplicationPlatform.Control.AuthenticationMethod,device.fap.application-platform.control.authentication-method,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.TunnelInst,device.fap.application-platform.control.tunnel-inst,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.,device.fap.application-platform.control.femto-awareness,ScalarObject,object
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.APIEnable,device.fap.application-platform.control.femto-awareness.api-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.QueueEnable,device.fap.application-platform.control.femto-awareness.queue-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.Queueing,device.fap.application-platform.control.femto-awareness.queueing,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.MaxAPIUsersNumber,device.fap.application-platform.control.femto-awareness.max-api-users-number,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.FemtozoneID,device.fap.application-platform.control.femto-awareness.femtozone-id,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.NotificationsUserIdentifierMSISDN,device.fap.application-platform.control.femto-awareness.notifications-user-identifier-msisdn,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.SubscribeToNotificationsResponseCallbackData,device.fap.application-platform.control.femto-awareness.subscribe-to-notifications-response-callback-data,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.FemtoAwareness.QueryFemtocellResponseTimezone,device.fap.application-platform.control.femto-awareness.query-femtocell-response-timezone,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.SMS.,device.fap.application-platform.control.sms,ScalarObject,object
+Device.FAP.ApplicationPlatform.Control.SMS.APIEnable,device.fap.application-platform.control.sms.api-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.SMS.QueueEnable,device.fap.application-platform.control.sms.queue-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.SMS.Queueing,device.fap.application-platform.control.sms.queueing,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.SMS.MaxAPIUsersNumber,device.fap.application-platform.control.sms.max-api-users-number,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Control.SMS.MinSendSMSTimeInterval,device.fap.application-platform.control.sms.min-send-sms-time-interval,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Control.SMS.EnableQuerySMSDeliveryStatus,device.fap.application-platform.control.sms.enable-query-sms-delivery-status,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.SMS.EnableSubscribeToNotificationsOfMessageSentToApplication,device.fap.application-platform.control.sms.enable-subscribe-to-notifications-of-message-sent-to-application,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.MMS.,device.fap.application-platform.control.mms,ScalarObject,object
+Device.FAP.ApplicationPlatform.Control.MMS.APIEnable,device.fap.application-platform.control.mms.api-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.MMS.QueueEnable,device.fap.application-platform.control.mms.queue-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.MMS.Queueing,device.fap.application-platform.control.mms.queueing,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.MMS.MaxAPIUsersNumber,device.fap.application-platform.control.mms.max-api-users-number,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Control.MMS.MinSendMMSTimeInterval,device.fap.application-platform.control.mms.min-send-mms-time-interval,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Control.MMS.EnableQueryMMSDeliveryStatus,device.fap.application-platform.control.mms.enable-query-mms-delivery-status,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.MMS.EnableSubscribeToNotificationsOfMessageSentToApplication,device.fap.application-platform.control.mms.enable-subscribe-to-notifications-of-message-sent-to-application,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.,device.fap.application-platform.control.terminal-location,ScalarObject,object
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.APIEnable,device.fap.application-platform.control.terminal-location.api-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.QueueEnable,device.fap.application-platform.control.terminal-location.queue-enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.Queueing,device.fap.application-platform.control.terminal-location.queueing,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.MaxAPIUsersNumber,device.fap.application-platform.control.terminal-location.max-api-users-number,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.QueryMobileLocationResponseAddress,device.fap.application-platform.control.terminal-location.query-mobile-location-response-address,Scalar-ReadWrite,string
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.QueryMobileLocationResponseLongitudeLatitude,device.fap.application-platform.control.terminal-location.query-mobile-location-response-longitude-latitude,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.QueryMobileLocationResponseAltitude,device.fap.application-platform.control.terminal-location.query-mobile-location-response-altitude,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Control.TerminalLocation.QueryMobileLocationResponseTimestamp,device.fap.application-platform.control.terminal-location.query-mobile-location-response-timestamp,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.,device.fap.application-platform.monitoring,ScalarObject,object
+Device.FAP.ApplicationPlatform.Monitoring.Enable,device.fap.application-platform.monitoring.enable,Scalar-ReadWrite,boolean
+Device.FAP.ApplicationPlatform.Monitoring.MonitoringInterval,device.fap.application-platform.monitoring.monitoring-interval,Scalar-ReadWrite,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.AuthenticationRequestsReceived,device.fap.application-platform.monitoring.authentication-requests-received,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.AuthenticationRequestsRejected,device.fap.application-platform.monitoring.authentication-requests-rejected,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.,device.fap.application-platform.monitoring.femto-awareness,ScalarObject,object
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.APIAvailable,device.fap.application-platform.monitoring.femto-awareness.api-available,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.APIUsers,device.fap.application-platform.monitoring.femto-awareness.api-users,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.QueueState,device.fap.application-platform.monitoring.femto-awareness.queue-state,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.QueueNum,device.fap.application-platform.monitoring.femto-awareness.queue-num,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.QueueReceived,device.fap.application-platform.monitoring.femto-awareness.queue-received,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.FemtoAwareness.QueueDiscarded,device.fap.application-platform.monitoring.femto-awareness.queue-discarded,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.SMS.,device.fap.application-platform.monitoring.sms,ScalarObject,object
+Device.FAP.ApplicationPlatform.Monitoring.SMS.APIAvailable,device.fap.application-platform.monitoring.sms.api-available,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Monitoring.SMS.APIUsers,device.fap.application-platform.monitoring.sms.api-users,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.SMS.QueueState,device.fap.application-platform.monitoring.sms.queue-state,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Monitoring.SMS.QueueNum,device.fap.application-platform.monitoring.sms.queue-num,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.SMS.QueueReceived,device.fap.application-platform.monitoring.sms.queue-received,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.SMS.QueueDiscarded,device.fap.application-platform.monitoring.sms.queue-discarded,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.MMS.,device.fap.application-platform.monitoring.mms,ScalarObject,object
+Device.FAP.ApplicationPlatform.Monitoring.MMS.APIAvailable,device.fap.application-platform.monitoring.mms.api-available,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Monitoring.MMS.APIUsers,device.fap.application-platform.monitoring.mms.api-users,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.MMS.QueueState,device.fap.application-platform.monitoring.mms.queue-state,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Monitoring.MMS.QueueNum,device.fap.application-platform.monitoring.mms.queue-num,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.MMS.QueueReceived,device.fap.application-platform.monitoring.mms.queue-received,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.MMS.QueueDiscarded,device.fap.application-platform.monitoring.mms.queue-discarded,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.,device.fap.application-platform.monitoring.terminal-location,ScalarObject,object
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.APIAvailable,device.fap.application-platform.monitoring.terminal-location.api-available,Scalar-ReadOnly,boolean
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.APIUsers,device.fap.application-platform.monitoring.terminal-location.api-users,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.QueueState,device.fap.application-platform.monitoring.terminal-location.queue-state,Scalar-ReadOnly,string
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.QueueNum,device.fap.application-platform.monitoring.terminal-location.queue-num,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.QueueReceived,device.fap.application-platform.monitoring.terminal-location.queue-received,Scalar-ReadOnly,unsignedInt
+Device.FAP.ApplicationPlatform.Monitoring.TerminalLocation.QueueDiscarded,device.fap.application-platform.monitoring.terminal-location.queue-discarded,Scalar-ReadOnly,unsignedInt
+Device.BulkData.,device.bulk-data,ScalarObject,object
+Device.BulkData.Enable,device.bulk-data.enable,Scalar-ReadWrite,boolean
+Device.BulkData.Status,device.bulk-data.status,Scalar-ReadOnly,string
+Device.BulkData.MinReportingInterval,device.bulk-data.min-reporting-interval,Scalar-ReadOnly,unsignedInt
+Device.BulkData.Protocols,device.bulk-data.protocols,Scalar-ReadOnly,string
+Device.BulkData.EncodingTypes,device.bulk-data.encoding-types,Scalar-ReadOnly,string
+Device.BulkData.ParameterWildCardSupported,device.bulk-data.parameter-wild-card-supported,Scalar-ReadOnly,boolean
+Device.BulkData.MaxNumberOfProfiles,device.bulk-data.max-number-of-profiles,Scalar-ReadOnly,int
+Device.BulkData.MaxNumberOfParameterReferences,device.bulk-data.max-number-of-parameter-references,Scalar-ReadOnly,int
+Device.BulkData.ProfileNumberOfEntries,device.bulk-data.profile-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.BulkData.Profile.{i}.,device.bulk-data.profile.{i}.,TabularObject,object
+Device.BulkData.Profile.{i}.Enable,device.bulk-data.profile.{i}.enable,Tabular-ReadWrite,boolean
+Device.BulkData.Profile.{i}.Alias,device.bulk-data.profile.{i}.alias,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.Name,device.bulk-data.profile.{i}.name,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.NumberOfRetainedFailedReports,device.bulk-data.profile.{i}.number-of-retained-failed-reports,Tabular-ReadWrite,int
+Device.BulkData.Profile.{i}.Protocol,device.bulk-data.profile.{i}.protocol,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.EncodingType,device.bulk-data.profile.{i}.encoding-type,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.ReportingInterval,device.bulk-data.profile.{i}.reporting-interval,Tabular-ReadWrite,unsignedInt
+Device.BulkData.Profile.{i}.TimeReference,device.bulk-data.profile.{i}.time-reference,Tabular-ReadWrite,dateTime
+Device.BulkData.Profile.{i}.StreamingHost,device.bulk-data.profile.{i}.streaming-host,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.StreamingPort,device.bulk-data.profile.{i}.streaming-port,Tabular-ReadWrite,unsignedInt
+Device.BulkData.Profile.{i}.StreamingSessionID,device.bulk-data.profile.{i}.streaming-session-id,Tabular-ReadWrite,unsignedInt
+Device.BulkData.Profile.{i}.FileTransferURL,device.bulk-data.profile.{i}.file-transfer-url,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.FileTransferUsername,device.bulk-data.profile.{i}.file-transfer-username,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.ControlFileFormat,device.bulk-data.profile.{i}.control-file-format,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.ParameterNumberOfEntries,device.bulk-data.profile.{i}.parameter-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.BulkData.Profile.{i}.Parameter.{i}.,device.bulk-data.profile.{i}.parameter.{i}.,TabularObject,object
+Device.BulkData.Profile.{i}.Parameter.{i}.Name,device.bulk-data.profile.{i}.parameter.{i}.name,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.Parameter.{i}.Reference,device.bulk-data.profile.{i}.parameter.{i}.reference,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.CSVEncoding.,device.bulk-data.profile.{i}.csv-encoding,ScalarObject,object
+Device.BulkData.Profile.{i}.CSVEncoding.FieldSeparator,device.bulk-data.profile.{i}.csv-encoding.field-separator,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.CSVEncoding.RowSeparator,device.bulk-data.profile.{i}.csv-encoding.row-separator,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.CSVEncoding.EscapeCharacter,device.bulk-data.profile.{i}.csv-encoding.escape-character,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.CSVEncoding.ReportFormat,device.bulk-data.profile.{i}.csv-encoding.report-format,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.CSVEncoding.RowTimestamp,device.bulk-data.profile.{i}.csv-encoding.row-timestamp,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.JSONEncoding.,device.bulk-data.profile.{i}.json-encoding,ScalarObject,object
+Device.BulkData.Profile.{i}.JSONEncoding.ReportFormat,device.bulk-data.profile.{i}.json-encoding.report-format,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.JSONEncoding.ReportTimestamp,device.bulk-data.profile.{i}.json-encoding.report-timestamp,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.HTTP.,device.bulk-data.profile.{i}.http,ScalarObject,object
+Device.BulkData.Profile.{i}.HTTP.URL,device.bulk-data.profile.{i}.http.url,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.HTTP.Username,device.bulk-data.profile.{i}.http.username,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.HTTP.CompressionsSupported,device.bulk-data.profile.{i}.http.compressions-supported,Scalar-ReadOnly,string
+Device.BulkData.Profile.{i}.HTTP.Compression,device.bulk-data.profile.{i}.http.compression,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.HTTP.MethodsSupported,device.bulk-data.profile.{i}.http.methods-supported,Scalar-ReadOnly,string
+Device.BulkData.Profile.{i}.HTTP.Method,device.bulk-data.profile.{i}.http.method,Scalar-ReadWrite,string
+Device.BulkData.Profile.{i}.HTTP.UseDateHeader,device.bulk-data.profile.{i}.http.use-date-header,Scalar-ReadWrite,boolean
+Device.BulkData.Profile.{i}.HTTP.RetryEnable,device.bulk-data.profile.{i}.http.retry-enable,Scalar-ReadWrite,boolean
+Device.BulkData.Profile.{i}.HTTP.RetryMinimumWaitInterval,device.bulk-data.profile.{i}.http.retry-minimum-wait-interval,Scalar-ReadWrite,unsignedInt
+Device.BulkData.Profile.{i}.HTTP.RetryIntervalMultiplier,device.bulk-data.profile.{i}.http.retry-interval-multiplier,Scalar-ReadWrite,unsignedInt
+Device.BulkData.Profile.{i}.HTTP.RequestURIParameterNumberOfEntries,device.bulk-data.profile.{i}.http.request-uri-parameter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.BulkData.Profile.{i}.HTTP.PersistAcrossReboot,device.bulk-data.profile.{i}.http.persist-across-reboot,Scalar-ReadWrite,boolean
+Device.BulkData.Profile.{i}.HTTP.RequestURIParameter.{i}.,device.bulk-data.profile.{i}.http.request-uri-parameter.{i}.,TabularObject,object
+Device.BulkData.Profile.{i}.HTTP.RequestURIParameter.{i}.Name,device.bulk-data.profile.{i}.http.request-uri-parameter.{i}.name,Tabular-ReadWrite,string
+Device.BulkData.Profile.{i}.HTTP.RequestURIParameter.{i}.Reference,device.bulk-data.profile.{i}.http.request-uri-parameter.{i}.reference,Tabular-ReadWrite,string
+Device.XMPP.,device.xmpp,ScalarObject,object
+Device.XMPP.ConnectionNumberOfEntries,device.xmpp.connection-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.XMPP.SupportedServerConnectAlgorithms,device.xmpp.supported-server-connect-algorithms,Scalar-ReadOnly,string
+Device.XMPP.Connection.{i}.,device.xmpp.connection.{i}.,TabularObject,object
+Device.XMPP.Connection.{i}.Enable,device.xmpp.connection.{i}.enable,Tabular-ReadWrite,boolean
+Device.XMPP.Connection.{i}.Alias,device.xmpp.connection.{i}.alias,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.Username,device.xmpp.connection.{i}.username,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.Domain,device.xmpp.connection.{i}.domain,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.Resource,device.xmpp.connection.{i}.resource,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.JabberID,device.xmpp.connection.{i}.jabber-id,Tabular-ReadOnly,string
+Device.XMPP.Connection.{i}.Status,device.xmpp.connection.{i}.status,Tabular-ReadOnly,string
+Device.XMPP.Connection.{i}.LastChangeDate,device.xmpp.connection.{i}.last-change-date,Tabular-ReadOnly,dateTime
+Device.XMPP.Connection.{i}.ServerConnectAlgorithm,device.xmpp.connection.{i}.server-connect-algorithm,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.KeepAliveInterval,device.xmpp.connection.{i}.keep-alive-interval,Tabular-ReadWrite,long
+Device.XMPP.Connection.{i}.ServerConnectAttempts,device.xmpp.connection.{i}.server-connect-attempts,Tabular-ReadWrite,unsignedInt
+Device.XMPP.Connection.{i}.ServerRetryInitialInterval,device.xmpp.connection.{i}.server-retry-initial-interval,Tabular-ReadWrite,unsignedInt
+Device.XMPP.Connection.{i}.ServerRetryIntervalMultiplier,device.xmpp.connection.{i}.server-retry-interval-multiplier,Tabular-ReadWrite,unsignedInt
+Device.XMPP.Connection.{i}.ServerRetryMaxInterval,device.xmpp.connection.{i}.server-retry-max-interval,Tabular-ReadWrite,unsignedInt
+Device.XMPP.Connection.{i}.UseTLS,device.xmpp.connection.{i}.use-tls,Tabular-ReadWrite,boolean
+Device.XMPP.Connection.{i}.TLSEstablished,device.xmpp.connection.{i}.tls-established,Tabular-ReadOnly,boolean
+Device.XMPP.Connection.{i}.ServerNumberOfEntries,device.xmpp.connection.{i}.server-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.XMPP.Connection.{i}.Server.{i}.,device.xmpp.connection.{i}.server.{i}.,TabularObject,object
+Device.XMPP.Connection.{i}.Server.{i}.Enable,device.xmpp.connection.{i}.server.{i}.enable,Tabular-ReadWrite,boolean
+Device.XMPP.Connection.{i}.Server.{i}.Alias,device.xmpp.connection.{i}.server.{i}.alias,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.Server.{i}.Priority,device.xmpp.connection.{i}.server.{i}.priority,Tabular-ReadWrite,unsignedInt
+Device.XMPP.Connection.{i}.Server.{i}.Weight,device.xmpp.connection.{i}.server.{i}.weight,Tabular-ReadWrite,long
+Device.XMPP.Connection.{i}.Server.{i}.ServerAddress,device.xmpp.connection.{i}.server.{i}.server-address,Tabular-ReadWrite,string
+Device.XMPP.Connection.{i}.Server.{i}.Port,device.xmpp.connection.{i}.server.{i}.port,Tabular-ReadWrite,unsignedInt
+Device.XMPP.Connection.{i}.Stats.,device.xmpp.connection.{i}.stats,ScalarObject,object
+Device.XMPP.Connection.{i}.Stats.ReceivedMessages,device.xmpp.connection.{i}.stats.received-messages,Scalar-ReadOnly,unsignedInt
+Device.XMPP.Connection.{i}.Stats.TransmittedMessages,device.xmpp.connection.{i}.stats.transmitted-messages,Scalar-ReadOnly,unsignedInt
+Device.XMPP.Connection.{i}.Stats.ReceivedErrorMessages,device.xmpp.connection.{i}.stats.received-error-messages,Scalar-ReadOnly,unsignedInt
+Device.XMPP.Connection.{i}.Stats.TransmittedErrorMessages,device.xmpp.connection.{i}.stats.transmitted-error-messages,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.,device.ieee1905,ScalarObject,object
+Device.IEEE1905.Version,device.ieee1905.version,Scalar-ReadOnly,string
+Device.IEEE1905.AL.,device.ieee1905.al,ScalarObject,object
+Device.IEEE1905.AL.IEEE1905Id,device.ieee1905.al.ieee1905-id,Scalar-ReadOnly,string
+Device.IEEE1905.AL.Status,device.ieee1905.al.status,Scalar-ReadOnly,string
+Device.IEEE1905.AL.LastChange,device.ieee1905.al.last-change,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.LowerLayers,device.ieee1905.al.lower-layers,Scalar-ReadOnly,string
+Device.IEEE1905.AL.RegistrarFreqBand,device.ieee1905.al.registrar-freq-band,Scalar-ReadOnly,string
+Device.IEEE1905.AL.InterfaceNumberOfEntries,device.ieee1905.al.interface-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.,device.ieee1905.al.interface.{i}.,TabularObject,object
+Device.IEEE1905.AL.Interface.{i}.InterfaceId,device.ieee1905.al.interface.{i}.interface-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Status,device.ieee1905.al.interface.{i}.status,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.LastChange,device.ieee1905.al.interface.{i}.last-change,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.LowerLayers,device.ieee1905.al.interface.{i}.lower-layers,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.InterfaceStackReference,device.ieee1905.al.interface.{i}.interface-stack-reference,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.MediaType,device.ieee1905.al.interface.{i}.media-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.GenericPhyOUI,device.ieee1905.al.interface.{i}.generic-phy-oui,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.GenericPhyVariant,device.ieee1905.al.interface.{i}.generic-phy-variant,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.GenericPhyURL,device.ieee1905.al.interface.{i}.generic-phy-url,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.SetIntfPowerStateEnabled,device.ieee1905.al.interface.{i}.set-intf-power-state-enabled,Tabular-ReadWrite,boolean
+Device.IEEE1905.AL.Interface.{i}.PowerState,device.ieee1905.al.interface.{i}.power-state,Tabular-ReadWrite,string
+Device.IEEE1905.AL.Interface.{i}.VendorPropertiesNumberOfEntries,device.ieee1905.al.interface.{i}.vendor-properties-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.LinkNumberOfEntries,device.ieee1905.al.interface.{i}.link-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.VendorProperties.{i}.,device.ieee1905.al.interface.{i}.vendor-properties.{i}.,TabularObject,object
+Device.IEEE1905.AL.Interface.{i}.VendorProperties.{i}.OUI,device.ieee1905.al.interface.{i}.vendor-properties.{i}.oui,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.VendorProperties.{i}.Information,device.ieee1905.al.interface.{i}.vendor-properties.{i}.information,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.,device.ieee1905.al.interface.{i}.link.{i}.,TabularObject,object
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.InterfaceId,device.ieee1905.al.interface.{i}.link.{i}.interface-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.IEEE1905Id,device.ieee1905.al.interface.{i}.link.{i}.ieee1905-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.MediaType,device.ieee1905.al.interface.{i}.link.{i}.media-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.GenericPhyOUI,device.ieee1905.al.interface.{i}.link.{i}.generic-phy-oui,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.GenericPhyVariant,device.ieee1905.al.interface.{i}.link.{i}.generic-phy-variant,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.GenericPhyURL,device.ieee1905.al.interface.{i}.link.{i}.generic-phy-url,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.,device.ieee1905.al.interface.{i}.link.{i}.metric,ScalarObject,object
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.IEEE802dot1Bridge,device.ieee1905.al.interface.{i}.link.{i}.metric.ieee802dot1-bridge,Scalar-ReadOnly,boolean
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.PacketErrors,device.ieee1905.al.interface.{i}.link.{i}.metric.packet-errors,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.PacketErrorsReceived,device.ieee1905.al.interface.{i}.link.{i}.metric.packet-errors-received,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.TransmittedPackets,device.ieee1905.al.interface.{i}.link.{i}.metric.transmitted-packets,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.PacketsReceived,device.ieee1905.al.interface.{i}.link.{i}.metric.packets-received,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.MACThroughputCapacity,device.ieee1905.al.interface.{i}.link.{i}.metric.mac-throughput-capacity,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.LinkAvailability,device.ieee1905.al.interface.{i}.link.{i}.metric.link-availability,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.PHYRate,device.ieee1905.al.interface.{i}.link.{i}.metric.phy-rate,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.Interface.{i}.Link.{i}.Metric.RSSI,device.ieee1905.al.interface.{i}.link.{i}.metric.rssi,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.ForwardingTable.,device.ieee1905.al.forwarding-table,ScalarObject,object
+Device.IEEE1905.AL.ForwardingTable.SetForwardingEnabled,device.ieee1905.al.forwarding-table.set-forwarding-enabled,Scalar-ReadWrite,boolean
+Device.IEEE1905.AL.ForwardingTable.ForwardingRuleNumberOfEntries,device.ieee1905.al.forwarding-table.forwarding-rule-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.,TabularObject,object
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.InterfaceList,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.interface-list,Tabular-ReadWrite,string
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.MACDestinationAddress,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.mac-destination-address,Tabular-ReadWrite,string
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.MACDestinationAddressFlag,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.mac-destination-address-flag,Tabular-ReadWrite,boolean
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.MACSourceAddress,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.mac-source-address,Tabular-ReadWrite,string
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.MACSourceAddressFlag,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.mac-source-address-flag,Tabular-ReadWrite,boolean
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.EtherType,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.ether-type,Tabular-ReadWrite,unsignedInt
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.EtherTypeFlag,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.ether-type-flag,Tabular-ReadWrite,boolean
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.Vid,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.vid,Tabular-ReadWrite,unsignedInt
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.VidFlag,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.vid-flag,Tabular-ReadWrite,boolean
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.PCP,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.pcp,Tabular-ReadWrite,unsignedInt
+Device.IEEE1905.AL.ForwardingTable.ForwardingRule.{i}.PCPFlag,device.ieee1905.al.forwarding-table.forwarding-rule.{i}.pcp-flag,Tabular-ReadWrite,boolean
+Device.IEEE1905.AL.NetworkTopology.,device.ieee1905.al.network-topology,ScalarObject,object
+Device.IEEE1905.AL.NetworkTopology.Enable,device.ieee1905.al.network-topology.enable,Scalar-ReadWrite,boolean
+Device.IEEE1905.AL.NetworkTopology.Status,device.ieee1905.al.network-topology.status,Scalar-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.MaxChangeLogEntries,device.ieee1905.al.network-topology.max-change-log-entries,Scalar-ReadWrite,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.LastChange,device.ieee1905.al.network-topology.last-change,Scalar-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905DeviceNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.ChangeLogNumberOfEntries,device.ieee1905.al.network-topology.change-log-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.,device.ieee1905.al.network-topology.change-log.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.TimeStamp,device.ieee1905.al.network-topology.change-log.{i}.time-stamp,Tabular-ReadOnly,dateTime
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.EventType,device.ieee1905.al.network-topology.change-log.{i}.event-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.ReporterDeviceId,device.ieee1905.al.network-topology.change-log.{i}.reporter-device-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.ReporterInterfaceId,device.ieee1905.al.network-topology.change-log.{i}.reporter-interface-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.NeighborType,device.ieee1905.al.network-topology.change-log.{i}.neighbor-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.ChangeLog.{i}.NeighborId,device.ieee1905.al.network-topology.change-log.{i}.neighbor-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Id,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Version,device.ieee1905.al.network-topology.ieee1905-device.{i}.version,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.RegistrarFreqBand,device.ieee1905.al.network-topology.ieee1905-device.{i}.registrar-freq-band,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.FriendlyName,device.ieee1905.al.network-topology.ieee1905-device.{i}.friendly-name,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.ManufacturerName,device.ieee1905.al.network-topology.ieee1905-device.{i}.manufacturer-name,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.ManufacturerModel,device.ieee1905.al.network-topology.ieee1905-device.{i}.manufacturer-model,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.ControlURL,device.ieee1905.al.network-topology.ieee1905-device.{i}.control-url,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.VendorPropertiesNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.vendor-properties-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv4AddressNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv4-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv6AddressNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv6-address-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.InterfaceNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.NonIEEE1905NeighborNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.non-ieee1905-neighbor-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905NeighborNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.L2NeighborNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.l2-neighbor-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.BridgingTupleNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.bridging-tuple-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv4Address.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv4-address.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv4Address.{i}.MACAddress,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv4-address.{i}.mac-address,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv4Address.{i}.IPv4Address,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv4-address.{i}.ipv4-address,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv4Address.{i}.IPv4AddressType,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv4-address.{i}.ipv4-address-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv4Address.{i}.DHCPServer,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv4-address.{i}.dhcp-server,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv6Address.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv6-address.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv6Address.{i}.MACAddress,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv6-address.{i}.mac-address,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv6Address.{i}.IPv6Address,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv6-address.{i}.ipv6-address,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv6Address.{i}.IPv6AddressType,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv6-address.{i}.ipv6-address-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IPv6Address.{i}.IPv6AddressOrigin,device.ieee1905.al.network-topology.ieee1905-device.{i}.ipv6-address.{i}.ipv6-address-origin,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.VendorProperties.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.vendor-properties.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.VendorProperties.{i}.MessageType,device.ieee1905.al.network-topology.ieee1905-device.{i}.vendor-properties.{i}.message-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.VendorProperties.{i}.OUI,device.ieee1905.al.network-topology.ieee1905-device.{i}.vendor-properties.{i}.oui,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.VendorProperties.{i}.Information,device.ieee1905.al.network-topology.ieee1905-device.{i}.vendor-properties.{i}.information,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.InterfaceId,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.interface-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.MediaType,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.media-type,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.PowerState,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.power-state,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.GenericPhyOUI,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.generic-phy-oui,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.GenericPhyVariant,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.generic-phy-variant,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.GenericPhyURL,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.generic-phy-url,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.NetworkMembership,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.network-membership,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.Role,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.role,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.APChannelBand,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.ap-channel-band,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.FrequencyIndex1,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.frequency-index1,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.Interface.{i}.FrequencyIndex2,device.ieee1905.al.network-topology.ieee1905-device.{i}.interface.{i}.frequency-index2,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.NonIEEE1905Neighbor.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.non-ieee1905-neighbor.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.NonIEEE1905Neighbor.{i}.LocalInterface,device.ieee1905.al.network-topology.ieee1905-device.{i}.non-ieee1905-neighbor.{i}.local-interface,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.NonIEEE1905Neighbor.{i}.NeighborInterfaceId,device.ieee1905.al.network-topology.ieee1905-device.{i}.non-ieee1905-neighbor.{i}.neighbor-interface-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.L2Neighbor.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.l2-neighbor.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.L2Neighbor.{i}.LocalInterface,device.ieee1905.al.network-topology.ieee1905-device.{i}.l2-neighbor.{i}.local-interface,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.L2Neighbor.{i}.NeighborInterfaceId,device.ieee1905.al.network-topology.ieee1905-device.{i}.l2-neighbor.{i}.neighbor-interface-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.L2Neighbor.{i}.BehindInterfaceIds,device.ieee1905.al.network-topology.ieee1905-device.{i}.l2-neighbor.{i}.behind-interface-ids,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.LocalInterface,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.local-interface,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.NeighborDeviceId,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.neighbor-device-id,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.MetricNumberOfEntries,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.NeighborMACAddress,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.neighbor-mac-address,Tabular-ReadOnly,string
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.IEEE802dot1Bridge,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.ieee802dot1-bridge,Tabular-ReadOnly,boolean
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.PacketErrors,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.packet-errors,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.PacketErrorsReceived,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.packet-errors-received,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.TransmittedPackets,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.transmitted-packets,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.PacketsReceived,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.packets-received,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.MACThroughputCapacity,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.mac-throughput-capacity,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.LinkAvailability,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.link-availability,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.PHYRate,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.phy-rate,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.IEEE1905Neighbor.{i}.Metric.{i}.RSSI,device.ieee1905.al.network-topology.ieee1905-device.{i}.ieee1905-neighbor.{i}.metric.{i}.rssi,Tabular-ReadOnly,unsignedInt
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.BridgingTuple.{i}.,device.ieee1905.al.network-topology.ieee1905-device.{i}.bridging-tuple.{i}.,TabularObject,object
+Device.IEEE1905.AL.NetworkTopology.IEEE1905Device.{i}.BridgingTuple.{i}.InterfaceList,device.ieee1905.al.network-topology.ieee1905-device.{i}.bridging-tuple.{i}.interface-list,Tabular-ReadOnly,string
+Device.IEEE1905.AL.Security.,device.ieee1905.al.security,ScalarObject,object
+Device.IEEE1905.AL.Security.SetupMethod,device.ieee1905.al.security.setup-method,Scalar-ReadWrite,string
+Device.IEEE1905.AL.NetworkingRegistrar.,device.ieee1905.al.networking-registrar,ScalarObject,object
+Device.IEEE1905.AL.NetworkingRegistrar.Registrar2dot4,device.ieee1905.al.networking-registrar.registrar2dot4,Scalar-ReadOnly,string
+Device.IEEE1905.AL.NetworkingRegistrar.Registrar5,device.ieee1905.al.networking-registrar.registrar5,Scalar-ReadOnly,string
+Device.IEEE1905.AL.NetworkingRegistrar.Registrar60,device.ieee1905.al.networking-registrar.registrar60,Scalar-ReadOnly,string
+Device.MQTT.,device.mqtt,ScalarObject,object
+Device.MQTT.ClientNumberOfEntries,device.mqtt.client-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.MQTT.BrokerNumberOfEntries,device.mqtt.broker-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Capabilities.,device.mqtt.capabilities,ScalarObject,object
+Device.MQTT.Capabilities.ProtocolVersionsSupported,device.mqtt.capabilities.protocol-versions-supported,Scalar-ReadOnly,string
+Device.MQTT.Capabilities.TransportProtocolSupported,device.mqtt.capabilities.transport-protocol-supported,Scalar-ReadOnly,string
+Device.MQTT.Capabilities.MaxNumberOfClientSubscriptions,device.mqtt.capabilities.max-number-of-client-subscriptions,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Capabilities.MaxNumberOfBrokerBridges,device.mqtt.capabilities.max-number-of-broker-bridges,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Capabilities.MaxNumberOfBrokerBridgeSubscriptions,device.mqtt.capabilities.max-number-of-broker-bridge-subscriptions,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Client.{i}.,device.mqtt.client.{i}.,TabularObject,object
+Device.MQTT.Client.{i}.Alias,device.mqtt.client.{i}.alias,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.Name,device.mqtt.client.{i}.name,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.Enable,device.mqtt.client.{i}.enable,Tabular-ReadWrite,boolean
+Device.MQTT.Client.{i}.Status,device.mqtt.client.{i}.status,Tabular-ReadOnly,string
+Device.MQTT.Client.{i}.ClientID,device.mqtt.client.{i}.client-id,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.Username,device.mqtt.client.{i}.username,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.TransportProtocol,device.mqtt.client.{i}.transport-protocol,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.ProtocolVersion,device.mqtt.client.{i}.protocol-version,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.CleanSession,device.mqtt.client.{i}.clean-session,Tabular-ReadWrite,boolean
+Device.MQTT.Client.{i}.MessageRetryTime,device.mqtt.client.{i}.message-retry-time,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Client.{i}.ConnectRetryTime,device.mqtt.client.{i}.connect-retry-time,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Client.{i}.KeepAliveTime,device.mqtt.client.{i}.keep-alive-time,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Client.{i}.BrokerAddress,device.mqtt.client.{i}.broker-address,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.BrokerPort,device.mqtt.client.{i}.broker-port,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Client.{i}.WillEnable,device.mqtt.client.{i}.will-enable,Tabular-ReadWrite,boolean
+Device.MQTT.Client.{i}.WillTopic,device.mqtt.client.{i}.will-topic,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.WillValue,device.mqtt.client.{i}.will-value,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.WillQoS,device.mqtt.client.{i}.will-qo-s,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Client.{i}.WillRetain,device.mqtt.client.{i}.will-retain,Tabular-ReadWrite,boolean
+Device.MQTT.Client.{i}.SubscriptionNumberOfEntries,device.mqtt.client.{i}.subscription-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.MQTT.Client.{i}.Subscription.{i}.,device.mqtt.client.{i}.subscription.{i}.,TabularObject,object
+Device.MQTT.Client.{i}.Subscription.{i}.Alias,device.mqtt.client.{i}.subscription.{i}.alias,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.Subscription.{i}.Enable,device.mqtt.client.{i}.subscription.{i}.enable,Tabular-ReadWrite,boolean
+Device.MQTT.Client.{i}.Subscription.{i}.Status,device.mqtt.client.{i}.subscription.{i}.status,Tabular-ReadOnly,string
+Device.MQTT.Client.{i}.Subscription.{i}.Topic,device.mqtt.client.{i}.subscription.{i}.topic,Tabular-ReadWrite,string
+Device.MQTT.Client.{i}.Subscription.{i}.QoS,device.mqtt.client.{i}.subscription.{i}.qo-s,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Client.{i}.Stats.,device.mqtt.client.{i}.stats,ScalarObject,object
+Device.MQTT.Client.{i}.Stats.BrokerConnectionEstablished,device.mqtt.client.{i}.stats.broker-connection-established,Scalar-ReadOnly,dateTime
+Device.MQTT.Client.{i}.Stats.LastPublishMessageSent,device.mqtt.client.{i}.stats.last-publish-message-sent,Scalar-ReadOnly,dateTime
+Device.MQTT.Client.{i}.Stats.LastPublishMessageReceived,device.mqtt.client.{i}.stats.last-publish-message-received,Scalar-ReadOnly,dateTime
+Device.MQTT.Client.{i}.Stats.PublishSent,device.mqtt.client.{i}.stats.publish-sent,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Client.{i}.Stats.PublishReceived,device.mqtt.client.{i}.stats.publish-received,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Client.{i}.Stats.SubscribeSent,device.mqtt.client.{i}.stats.subscribe-sent,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Client.{i}.Stats.UnSubscribeSent,device.mqtt.client.{i}.stats.un-subscribe-sent,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Client.{i}.Stats.MQTTMessagesSent,device.mqtt.client.{i}.stats.mqtt-messages-sent,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Client.{i}.Stats.MQTTMessagesReceived,device.mqtt.client.{i}.stats.mqtt-messages-received,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Client.{i}.Stats.ConnectionErrors,device.mqtt.client.{i}.stats.connection-errors,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Client.{i}.Stats.PublishErrors,device.mqtt.client.{i}.stats.publish-errors,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.,device.mqtt.broker.{i}.,TabularObject,object
+Device.MQTT.Broker.{i}.Alias,device.mqtt.broker.{i}.alias,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Name,device.mqtt.broker.{i}.name,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Enable,device.mqtt.broker.{i}.enable,Tabular-ReadWrite,boolean
+Device.MQTT.Broker.{i}.Status,device.mqtt.broker.{i}.status,Tabular-ReadOnly,string
+Device.MQTT.Broker.{i}.Port,device.mqtt.broker.{i}.port,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Interface,device.mqtt.broker.{i}.interface,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Username,device.mqtt.broker.{i}.username,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.BridgeNumberOfEntries,device.mqtt.broker.{i}.bridge-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.,device.mqtt.broker.{i}.bridge.{i}.,TabularObject,object
+Device.MQTT.Broker.{i}.Bridge.{i}.Alias,device.mqtt.broker.{i}.bridge.{i}.alias,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Name,device.mqtt.broker.{i}.bridge.{i}.name,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Enable,device.mqtt.broker.{i}.bridge.{i}.enable,Tabular-ReadWrite,boolean
+Device.MQTT.Broker.{i}.Bridge.{i}.Status,device.mqtt.broker.{i}.bridge.{i}.status,Tabular-ReadOnly,string
+Device.MQTT.Broker.{i}.Bridge.{i}.ClientID,device.mqtt.broker.{i}.bridge.{i}.client-id,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Username,device.mqtt.broker.{i}.bridge.{i}.username,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.TransportProtocol,device.mqtt.broker.{i}.bridge.{i}.transport-protocol,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.ProtocolVersion,device.mqtt.broker.{i}.bridge.{i}.protocol-version,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.CleanSession,device.mqtt.broker.{i}.bridge.{i}.clean-session,Tabular-ReadWrite,boolean
+Device.MQTT.Broker.{i}.Bridge.{i}.MessageRetryTime,device.mqtt.broker.{i}.bridge.{i}.message-retry-time,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.ConnectRetryTime,device.mqtt.broker.{i}.bridge.{i}.connect-retry-time,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.KeepAliveTime,device.mqtt.broker.{i}.bridge.{i}.keep-alive-time,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.ServerSelectionAlgorithm,device.mqtt.broker.{i}.bridge.{i}.server-selection-algorithm,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.ServerConnection,device.mqtt.broker.{i}.bridge.{i}.server-connection,Tabular-ReadOnly,string
+Device.MQTT.Broker.{i}.Bridge.{i}.ServerNumberOfEntries,device.mqtt.broker.{i}.bridge.{i}.server-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.SubscriptionNumberOfEntries,device.mqtt.broker.{i}.bridge.{i}.subscription-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.,device.mqtt.broker.{i}.bridge.{i}.server.{i}.,TabularObject,object
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.Enable,device.mqtt.broker.{i}.bridge.{i}.server.{i}.enable,Tabular-ReadWrite,boolean
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.Alias,device.mqtt.broker.{i}.bridge.{i}.server.{i}.alias,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.Priority,device.mqtt.broker.{i}.bridge.{i}.server.{i}.priority,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.Weight,device.mqtt.broker.{i}.bridge.{i}.server.{i}.weight,Tabular-ReadWrite,long
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.Address,device.mqtt.broker.{i}.bridge.{i}.server.{i}.address,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Server.{i}.Port,device.mqtt.broker.{i}.bridge.{i}.server.{i}.port,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.,TabularObject,object
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.Alias,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.alias,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.Enable,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.enable,Tabular-ReadWrite,boolean
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.Status,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.status,Tabular-ReadOnly,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.Topic,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.topic,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.Direction,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.direction,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.QoS,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.qo-s,Tabular-ReadWrite,unsignedInt
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.LocalPrefix,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.local-prefix,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Bridge.{i}.Subscription.{i}.RemotePrefix,device.mqtt.broker.{i}.bridge.{i}.subscription.{i}.remote-prefix,Tabular-ReadWrite,string
+Device.MQTT.Broker.{i}.Stats.,device.mqtt.broker.{i}.stats,ScalarObject,object
+Device.MQTT.Broker.{i}.Stats.TotalNumberOfClients,device.mqtt.broker.{i}.stats.total-number-of-clients,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Stats.NumberOfActiveClients,device.mqtt.broker.{i}.stats.number-of-active-clients,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Stats.NumberOfInactiveClients,device.mqtt.broker.{i}.stats.number-of-inactive-clients,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Stats.Subscriptions,device.mqtt.broker.{i}.stats.subscriptions,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Stats.PublishSent,device.mqtt.broker.{i}.stats.publish-sent,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Broker.{i}.Stats.PublishReceived,device.mqtt.broker.{i}.stats.publish-received,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Broker.{i}.Stats.MQTTMessagesSent,device.mqtt.broker.{i}.stats.mqtt-messages-sent,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Broker.{i}.Stats.MQTTMessagesReceived,device.mqtt.broker.{i}.stats.mqtt-messages-received,Scalar-ReadOnly,unsignedLong
+Device.MQTT.Broker.{i}.Stats.ConnectionErrors,device.mqtt.broker.{i}.stats.connection-errors,Scalar-ReadOnly,unsignedInt
+Device.MQTT.Broker.{i}.Stats.PublishErrors,device.mqtt.broker.{i}.stats.publish-errors,Scalar-ReadOnly,unsignedInt
+Device.DynamicDNS.,device.dynamic-dns,ScalarObject,object
+Device.DynamicDNS.ClientNumberOfEntries,device.dynamic-dns.client-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DynamicDNS.ServerNumberOfEntries,device.dynamic-dns.server-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.DynamicDNS.SupportedServices,device.dynamic-dns.supported-services,Scalar-ReadOnly,string
+Device.DynamicDNS.Client.{i}.,device.dynamic-dns.client.{i}.,TabularObject,object
+Device.DynamicDNS.Client.{i}.Enable,device.dynamic-dns.client.{i}.enable,Tabular-ReadWrite,boolean
+Device.DynamicDNS.Client.{i}.Status,device.dynamic-dns.client.{i}.status,Tabular-ReadOnly,string
+Device.DynamicDNS.Client.{i}.Alias,device.dynamic-dns.client.{i}.alias,Tabular-ReadWrite,string
+Device.DynamicDNS.Client.{i}.LastError,device.dynamic-dns.client.{i}.last-error,Tabular-ReadOnly,string
+Device.DynamicDNS.Client.{i}.Server,device.dynamic-dns.client.{i}.server,Tabular-ReadWrite,string
+Device.DynamicDNS.Client.{i}.Interface,device.dynamic-dns.client.{i}.interface,Tabular-ReadWrite,string
+Device.DynamicDNS.Client.{i}.Username,device.dynamic-dns.client.{i}.username,Tabular-ReadWrite,string
+Device.DynamicDNS.Client.{i}.HostnameNumberOfEntries,device.dynamic-dns.client.{i}.hostname-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.DynamicDNS.Client.{i}.Hostname.{i}.,device.dynamic-dns.client.{i}.hostname.{i}.,TabularObject,object
+Device.DynamicDNS.Client.{i}.Hostname.{i}.Enable,device.dynamic-dns.client.{i}.hostname.{i}.enable,Tabular-ReadWrite,boolean
+Device.DynamicDNS.Client.{i}.Hostname.{i}.Status,device.dynamic-dns.client.{i}.hostname.{i}.status,Tabular-ReadOnly,string
+Device.DynamicDNS.Client.{i}.Hostname.{i}.Name,device.dynamic-dns.client.{i}.hostname.{i}.name,Tabular-ReadWrite,string
+Device.DynamicDNS.Client.{i}.Hostname.{i}.LastUpdate,device.dynamic-dns.client.{i}.hostname.{i}.last-update,Tabular-ReadOnly,dateTime
+Device.DynamicDNS.Server.{i}.,device.dynamic-dns.server.{i}.,TabularObject,object
+Device.DynamicDNS.Server.{i}.Enable,device.dynamic-dns.server.{i}.enable,Tabular-ReadWrite,string
+Device.DynamicDNS.Server.{i}.Name,device.dynamic-dns.server.{i}.name,Tabular-ReadWrite,string
+Device.DynamicDNS.Server.{i}.Alias,device.dynamic-dns.server.{i}.alias,Tabular-ReadWrite,string
+Device.DynamicDNS.Server.{i}.ServiceName,device.dynamic-dns.server.{i}.service-name,Tabular-ReadWrite,string
+Device.DynamicDNS.Server.{i}.ServerAddress,device.dynamic-dns.server.{i}.server-address,Tabular-ReadWrite,string
+Device.DynamicDNS.Server.{i}.ServerPort,device.dynamic-dns.server.{i}.server-port,Tabular-ReadWrite,unsignedInt
+Device.DynamicDNS.Server.{i}.SupportedProtocols,device.dynamic-dns.server.{i}.supported-protocols,Tabular-ReadOnly,string
+Device.DynamicDNS.Server.{i}.Protocol,device.dynamic-dns.server.{i}.protocol,Tabular-ReadWrite,string
+Device.DynamicDNS.Server.{i}.CheckInterval,device.dynamic-dns.server.{i}.check-interval,Tabular-ReadWrite,unsignedInt
+Device.DynamicDNS.Server.{i}.RetryInterval,device.dynamic-dns.server.{i}.retry-interval,Tabular-ReadWrite,unsignedInt
+Device.DynamicDNS.Server.{i}.MaxRetries,device.dynamic-dns.server.{i}.max-retries,Tabular-ReadWrite,unsignedInt
+Device.LEDs.,device.le-ds,ScalarObject,object
+Device.LEDs.LEDNumberOfEntries,device.le-ds.led-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.LEDs.LED.{i}.,device.le-ds.led.{i}.,TabularObject,object
+Device.LEDs.LED.{i}.Alias,device.le-ds.led.{i}.alias,Tabular-ReadWrite,string
+Device.LEDs.LED.{i}.Name,device.le-ds.led.{i}.name,Tabular-ReadWrite,string
+Device.LEDs.LED.{i}.Status,device.le-ds.led.{i}.status,Tabular-ReadOnly,string
+Device.LEDs.LED.{i}.Reason,device.le-ds.led.{i}.reason,Tabular-ReadOnly,string
+Device.LEDs.LED.{i}.CyclePeriodRepetitions,device.le-ds.led.{i}.cycle-period-repetitions,Tabular-ReadOnly,int
+Device.LEDs.LED.{i}.Location,device.le-ds.led.{i}.location,Tabular-ReadOnly,string
+Device.LEDs.LED.{i}.RelativeXPosition,device.le-ds.led.{i}.relative-x-position,Tabular-ReadOnly,unsignedInt
+Device.LEDs.LED.{i}.RelativeYPosition,device.le-ds.led.{i}.relative-y-position,Tabular-ReadOnly,unsignedInt
+Device.LEDs.LED.{i}.CycleElementNumberOfEntries,device.le-ds.led.{i}.cycle-element-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LEDs.LED.{i}.CycleElement.{i}.,device.le-ds.led.{i}.cycle-element.{i}.,TabularObject,object
+Device.LEDs.LED.{i}.CycleElement.{i}.Alias,device.le-ds.led.{i}.cycle-element.{i}.alias,Tabular-ReadWrite,string
+Device.LEDs.LED.{i}.CycleElement.{i}.Enable,device.le-ds.led.{i}.cycle-element.{i}.enable,Tabular-ReadWrite,boolean
+Device.LEDs.LED.{i}.CycleElement.{i}.Order,device.le-ds.led.{i}.cycle-element.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.LEDs.LED.{i}.CycleElement.{i}.Color,device.le-ds.led.{i}.cycle-element.{i}.color,Tabular-ReadWrite,string
+Device.LEDs.LED.{i}.CycleElement.{i}.Duration,device.le-ds.led.{i}.cycle-element.{i}.duration,Tabular-ReadWrite,unsignedInt
+Device.LEDs.LED.{i}.CycleElement.{i}.FadeInterval,device.le-ds.led.{i}.cycle-element.{i}.fade-interval,Tabular-ReadWrite,unsignedInt
+Device.LEDs.LED.{i}.CurrentCycleElement.,device.le-ds.led.{i}.current-cycle-element,ScalarObject,object
+Device.LEDs.LED.{i}.CurrentCycleElement.CycleElementReference,device.le-ds.led.{i}.current-cycle-element.cycle-element-reference,Scalar-ReadOnly,string
+Device.LEDs.LED.{i}.CurrentCycleElement.Color,device.le-ds.led.{i}.current-cycle-element.color,Scalar-ReadOnly,string
+Device.LEDs.LED.{i}.CurrentCycleElement.Duration,device.le-ds.led.{i}.current-cycle-element.duration,Scalar-ReadOnly,unsignedInt
+Device.BASAPM.,device.basapm,ScalarObject,object
+Device.BASAPM.MeasurementEndpointNumberOfEntries,device.basapm.measurement-endpoint-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.BASAPM.MeasurementEndpoint.{i}.,device.basapm.measurement-endpoint.{i}.,TabularObject,object
+Device.BASAPM.MeasurementEndpoint.{i}.Alias,device.basapm.measurement-endpoint.{i}.alias,Tabular-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.Enable,device.basapm.measurement-endpoint.{i}.enable,Tabular-ReadWrite,boolean
+Device.BASAPM.MeasurementEndpoint.{i}.MeasurementAgent,device.basapm.measurement-endpoint.{i}.measurement-agent,Tabular-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.DeviceOwnership,device.basapm.measurement-endpoint.{i}.device-ownership,Tabular-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.OperationalDomain,device.basapm.measurement-endpoint.{i}.operational-domain,Tabular-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.InternetDomain,device.basapm.measurement-endpoint.{i}.internet-domain,Tabular-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.UseMeasurementEndpointInReports,device.basapm.measurement-endpoint.{i}.use-measurement-endpoint-in-reports,Tabular-ReadWrite,boolean
+Device.BASAPM.MeasurementEndpoint.{i}.ISPDevice.,device.basapm.measurement-endpoint.{i}.isp-device,ScalarObject,object
+Device.BASAPM.MeasurementEndpoint.{i}.ISPDevice.ReferencePoint,device.basapm.measurement-endpoint.{i}.isp-device.reference-point,Scalar-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.ISPDevice.GeographicalLocation,device.basapm.measurement-endpoint.{i}.isp-device.geographical-location,Scalar-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.CustomerDevice.,device.basapm.measurement-endpoint.{i}.customer-device,ScalarObject,object
+Device.BASAPM.MeasurementEndpoint.{i}.CustomerDevice.EquipmentIdentifier,device.basapm.measurement-endpoint.{i}.customer-device.equipment-identifier,Scalar-ReadWrite,string
+Device.BASAPM.MeasurementEndpoint.{i}.CustomerDevice.CustomerIdentifier,device.basapm.measurement-endpoint.{i}.customer-device.customer-identifier,Scalar-ReadWrite,string
+Device.LMAP.,device.lmap,ScalarObject,object
+Device.LMAP.MeasurementAgentNumberOfEntries,device.lmap.measurement-agent-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.LMAP.ReportNumberOfEntries,device.lmap.report-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.LMAP.EventNumberOfEntries,device.lmap.event-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.,device.lmap.measurement-agent.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Alias,device.lmap.measurement-agent.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Enable,device.lmap.measurement-agent.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Version,device.lmap.measurement-agent.{i}.version,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.LastStarted,device.lmap.measurement-agent.{i}.last-started,Tabular-ReadOnly,dateTime
+Device.LMAP.MeasurementAgent.{i}.CapabilityTags,device.lmap.measurement-agent.{i}.capability-tags,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Identifier,device.lmap.measurement-agent.{i}.identifier,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.GroupIdentifier,device.lmap.measurement-agent.{i}.group-identifier,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.MeasurementPoint,device.lmap.measurement-agent.{i}.measurement-point,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.UseAgentIdentifierInReports,device.lmap.measurement-agent.{i}.use-agent-identifier-in-reports,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.UseGroupIdentifierInReports,device.lmap.measurement-agent.{i}.use-group-identifier-in-reports,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.UseMeasurementPointInReports,device.lmap.measurement-agent.{i}.use-measurement-point-in-reports,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.PublicCredential,device.lmap.measurement-agent.{i}.public-credential,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.PrivateCredential,device.lmap.measurement-agent.{i}.private-credential,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.EventLog,device.lmap.measurement-agent.{i}.event-log,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.TaskCapabilityNumberOfEntries,device.lmap.measurement-agent.{i}.task-capability-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.ScheduleNumberOfEntries,device.lmap.measurement-agent.{i}.schedule-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.TaskNumberOfEntries,device.lmap.measurement-agent.{i}.task-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannelNumberOfEntries,device.lmap.measurement-agent.{i}.communication-channel-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.InstructionNumberOfEntries,device.lmap.measurement-agent.{i}.instruction-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.,device.lmap.measurement-agent.{i}.task-capability.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.Name,device.lmap.measurement-agent.{i}.task-capability.{i}.name,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.Version,device.lmap.measurement-agent.{i}.task-capability.{i}.version,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.TaskCapabilityRegistryNumberOfEntries,device.lmap.measurement-agent.{i}.task-capability.{i}.task-capability-registry-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.Registry.{i}.,device.lmap.measurement-agent.{i}.task-capability.{i}.registry.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.Registry.{i}.RegistryEntry,device.lmap.measurement-agent.{i}.task-capability.{i}.registry.{i}.registry-entry,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.TaskCapability.{i}.Registry.{i}.Roles,device.lmap.measurement-agent.{i}.task-capability.{i}.registry.{i}.roles,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Controller.,device.lmap.measurement-agent.{i}.controller,ScalarObject,object
+Device.LMAP.MeasurementAgent.{i}.Controller.ControllerTimeout,device.lmap.measurement-agent.{i}.controller.controller-timeout,Scalar-ReadWrite,int
+Device.LMAP.MeasurementAgent.{i}.Controller.ControlSchedules,device.lmap.measurement-agent.{i}.controller.control-schedules,Scalar-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Controller.ControlTasks,device.lmap.measurement-agent.{i}.controller.control-tasks,Scalar-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Controller.ControlChannels,device.lmap.measurement-agent.{i}.controller.control-channels,Scalar-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.,device.lmap.measurement-agent.{i}.schedule.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Enable,device.lmap.measurement-agent.{i}.schedule.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Alias,device.lmap.measurement-agent.{i}.schedule.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Name,device.lmap.measurement-agent.{i}.schedule.{i}.name,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.State,device.lmap.measurement-agent.{i}.schedule.{i}.state,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Start,device.lmap.measurement-agent.{i}.schedule.{i}.start,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.End,device.lmap.measurement-agent.{i}.schedule.{i}.end,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Duration,device.lmap.measurement-agent.{i}.schedule.{i}.duration,Tabular-ReadWrite,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Tags,device.lmap.measurement-agent.{i}.schedule.{i}.tags,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.SuppressionTags,device.lmap.measurement-agent.{i}.schedule.{i}.suppression-tags,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.ExecutionMode,device.lmap.measurement-agent.{i}.schedule.{i}.execution-mode,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.LastInvocation,device.lmap.measurement-agent.{i}.schedule.{i}.last-invocation,Tabular-ReadOnly,dateTime
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Storage,device.lmap.measurement-agent.{i}.schedule.{i}.storage,Tabular-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.ActionNumberOfEntries,device.lmap.measurement-agent.{i}.schedule.{i}.action-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Stats.,device.lmap.measurement-agent.{i}.schedule.{i}.stats,ScalarObject,object
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Stats.Invocations,device.lmap.measurement-agent.{i}.schedule.{i}.stats.invocations,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Stats.Suppressions,device.lmap.measurement-agent.{i}.schedule.{i}.stats.suppressions,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Stats.Overlaps,device.lmap.measurement-agent.{i}.schedule.{i}.stats.overlaps,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Stats.Failures,device.lmap.measurement-agent.{i}.schedule.{i}.stats.failures,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Enable,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Alias,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.State,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.state,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Order,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Task,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.task,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.OutputDestination,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.output-destination,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.SuppressionTags,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.suppression-tags,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Tags,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.tags,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Storage,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.storage,Tabular-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastInvocation,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-invocation,Tabular-ReadOnly,dateTime
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastSuccessfulCompletion,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-successful-completion,Tabular-ReadOnly,dateTime
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastSuccessfulStatusCode,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-successful-status-code,Tabular-ReadOnly,int
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastSuccessfulMessage,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-successful-message,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastFailedCompletion,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-failed-completion,Tabular-ReadOnly,dateTime
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastFailedStatusCode,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-failed-status-code,Tabular-ReadOnly,int
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.LastFailedMessage,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.last-failed-message,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.OptionNumberOfEntries,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Stats.,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.stats,ScalarObject,object
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Stats.Invocations,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.stats.invocations,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Stats.Suppressions,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.stats.suppressions,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Stats.Overlaps,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.stats.overlaps,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Stats.Failures,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.stats.failures,Scalar-ReadOnly,unsignedLong
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Option.{i}.,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Option.{i}.Enable,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Option.{i}.Alias,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Option.{i}.Order,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Option.{i}.Name,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option.{i}.name,Tabular-ReadWrite,int
+Device.LMAP.MeasurementAgent.{i}.Schedule.{i}.Action.{i}.Option.{i}.Value,device.lmap.measurement-agent.{i}.schedule.{i}.action.{i}.option.{i}.value,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.,device.lmap.measurement-agent.{i}.task.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Enable,device.lmap.measurement-agent.{i}.task.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Alias,device.lmap.measurement-agent.{i}.task.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Name,device.lmap.measurement-agent.{i}.task.{i}.name,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Tags,device.lmap.measurement-agent.{i}.task.{i}.tags,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.OptionNumberOfEntries,device.lmap.measurement-agent.{i}.task.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.RegistryNumberOfEntries,device.lmap.measurement-agent.{i}.task.{i}.registry-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Registry.{i}.,device.lmap.measurement-agent.{i}.task.{i}.registry.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Registry.{i}.Enable,device.lmap.measurement-agent.{i}.task.{i}.registry.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Registry.{i}.Alias,device.lmap.measurement-agent.{i}.task.{i}.registry.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Registry.{i}.RegistryEntry,device.lmap.measurement-agent.{i}.task.{i}.registry.{i}.registry-entry,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Registry.{i}.Roles,device.lmap.measurement-agent.{i}.task.{i}.registry.{i}.roles,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Option.{i}.,device.lmap.measurement-agent.{i}.task.{i}.option.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Option.{i}.Enable,device.lmap.measurement-agent.{i}.task.{i}.option.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Option.{i}.Alias,device.lmap.measurement-agent.{i}.task.{i}.option.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Option.{i}.Order,device.lmap.measurement-agent.{i}.task.{i}.option.{i}.order,Tabular-ReadWrite,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Option.{i}.Name,device.lmap.measurement-agent.{i}.task.{i}.option.{i}.name,Tabular-ReadWrite,int
+Device.LMAP.MeasurementAgent.{i}.Task.{i}.Option.{i}.Value,device.lmap.measurement-agent.{i}.task.{i}.option.{i}.value,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.,device.lmap.measurement-agent.{i}.communication-channel.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.Enable,device.lmap.measurement-agent.{i}.communication-channel.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.Alias,device.lmap.measurement-agent.{i}.communication-channel.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.Name,device.lmap.measurement-agent.{i}.communication-channel.{i}.name,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.UseBulkDataProfile,device.lmap.measurement-agent.{i}.communication-channel.{i}.use-bulk-data-profile,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.BulkDataProfile,device.lmap.measurement-agent.{i}.communication-channel.{i}.bulk-data-profile,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.Target,device.lmap.measurement-agent.{i}.communication-channel.{i}.target,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.TargetPublicCredential,device.lmap.measurement-agent.{i}.communication-channel.{i}.target-public-credential,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.CommunicationChannel.{i}.Interface,device.lmap.measurement-agent.{i}.communication-channel.{i}.interface,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.,device.lmap.measurement-agent.{i}.instruction.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.Enable,device.lmap.measurement-agent.{i}.instruction.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.Alias,device.lmap.measurement-agent.{i}.instruction.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.LastChange,device.lmap.measurement-agent.{i}.instruction.{i}.last-change,Tabular-ReadOnly,dateTime
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.InstructionSchedules,device.lmap.measurement-agent.{i}.instruction.{i}.instruction-schedules,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.InstructionTasks,device.lmap.measurement-agent.{i}.instruction.{i}.instruction-tasks,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.ReportChannels,device.lmap.measurement-agent.{i}.instruction.{i}.report-channels,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppressionNumberOfEntries,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.,TabularObject,object
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.Enable,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.Alias,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.Name,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.name,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.State,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.state,Tabular-ReadOnly,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.StopRunning,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.stop-running,Tabular-ReadWrite,boolean
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.Start,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.start,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.End,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.end,Tabular-ReadWrite,string
+Device.LMAP.MeasurementAgent.{i}.Instruction.{i}.MeasurementSuppression.{i}.SuppressionMatch,device.lmap.measurement-agent.{i}.instruction.{i}.measurement-suppression.{i}.suppression-match,Tabular-ReadWrite,string
+Device.LMAP.Report.{i}.,device.lmap.report.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.ReportDate,device.lmap.report.{i}.report-date,Tabular-ReadOnly,dateTime
+Device.LMAP.Report.{i}.AgentIdentifier,device.lmap.report.{i}.agent-identifier,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.GroupIdentifier,device.lmap.report.{i}.group-identifier,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.MeasurementPoint,device.lmap.report.{i}.measurement-point,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.ResultNumberOfEntries,device.lmap.report.{i}.result-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.,device.lmap.report.{i}.result.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.Result.{i}.TaskName,device.lmap.report.{i}.result.{i}.task-name,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.ScheduleName,device.lmap.report.{i}.result.{i}.schedule-name,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.ActionName,device.lmap.report.{i}.result.{i}.action-name,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.EventTime,device.lmap.report.{i}.result.{i}.event-time,Tabular-ReadOnly,dateTime
+Device.LMAP.Report.{i}.Result.{i}.StartTime,device.lmap.report.{i}.result.{i}.start-time,Tabular-ReadOnly,dateTime
+Device.LMAP.Report.{i}.Result.{i}.EndTime,device.lmap.report.{i}.result.{i}.end-time,Tabular-ReadOnly,dateTime
+Device.LMAP.Report.{i}.Result.{i}.CycleNumber,device.lmap.report.{i}.result.{i}.cycle-number,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.Status,device.lmap.report.{i}.result.{i}.status,Tabular-ReadOnly,int
+Device.LMAP.Report.{i}.Result.{i}.Tags,device.lmap.report.{i}.result.{i}.tags,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.OptionNumberOfEntries,device.lmap.report.{i}.result.{i}.option-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.ResultConflictNumberOfEntries,device.lmap.report.{i}.result.{i}.result-conflict-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.ResultReportTableNumberOfEntries,device.lmap.report.{i}.result.{i}.result-report-table-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.Option.{i}.,device.lmap.report.{i}.result.{i}.option.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.Result.{i}.Option.{i}.Order,device.lmap.report.{i}.result.{i}.option.{i}.order,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.Option.{i}.Name,device.lmap.report.{i}.result.{i}.option.{i}.name,Tabular-ReadOnly,int
+Device.LMAP.Report.{i}.Result.{i}.Option.{i}.Value,device.lmap.report.{i}.result.{i}.option.{i}.value,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.Conflict.{i}.,device.lmap.report.{i}.result.{i}.conflict.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.Result.{i}.Conflict.{i}.TaskName,device.lmap.report.{i}.result.{i}.conflict.{i}.task-name,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.Conflict.{i}.ScheduleName,device.lmap.report.{i}.result.{i}.conflict.{i}.schedule-name,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.Conflict.{i}.ActionName,device.lmap.report.{i}.result.{i}.conflict.{i}.action-name,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.,device.lmap.report.{i}.result.{i}.report-table.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.ColumnLabels,device.lmap.report.{i}.result.{i}.report-table.{i}.column-labels,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.ResultReportRowNumberOfEntries,device.lmap.report.{i}.result.{i}.report-table.{i}.result-report-row-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.RegistryNumberOfEntries,device.lmap.report.{i}.result.{i}.report-table.{i}.registry-number-of-entries,Tabular-ReadOnly,unsignedInt
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.ResultRow.{i}.,device.lmap.report.{i}.result.{i}.report-table.{i}.result-row.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.ResultRow.{i}.Values,device.lmap.report.{i}.result.{i}.report-table.{i}.result-row.{i}.values,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.Registry.{i}.,device.lmap.report.{i}.result.{i}.report-table.{i}.registry.{i}.,TabularObject,object
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.Registry.{i}.RegistryEntry,device.lmap.report.{i}.result.{i}.report-table.{i}.registry.{i}.registry-entry,Tabular-ReadOnly,string
+Device.LMAP.Report.{i}.Result.{i}.ReportTable.{i}.Registry.{i}.Roles,device.lmap.report.{i}.result.{i}.report-table.{i}.registry.{i}.roles,Tabular-ReadOnly,string
+Device.LMAP.Event.{i}.,device.lmap.event.{i}.,TabularObject,object
+Device.LMAP.Event.{i}.Enable,device.lmap.event.{i}.enable,Tabular-ReadWrite,boolean
+Device.LMAP.Event.{i}.Alias,device.lmap.event.{i}.alias,Tabular-ReadWrite,string
+Device.LMAP.Event.{i}.Name,device.lmap.event.{i}.name,Tabular-ReadWrite,string
+Device.LMAP.Event.{i}.Type,device.lmap.event.{i}.type,Tabular-ReadWrite,string
+Device.LMAP.Event.{i}.RandomnessSpread,device.lmap.event.{i}.randomness-spread,Tabular-ReadWrite,int
+Device.LMAP.Event.{i}.CycleInterval,device.lmap.event.{i}.cycle-interval,Tabular-ReadWrite,int
+Device.LMAP.Event.{i}.PeriodicTimer.,device.lmap.event.{i}.periodic-timer,ScalarObject,object
+Device.LMAP.Event.{i}.PeriodicTimer.StartTime,device.lmap.event.{i}.periodic-timer.start-time,Scalar-ReadWrite,dateTime
+Device.LMAP.Event.{i}.PeriodicTimer.EndTime,device.lmap.event.{i}.periodic-timer.end-time,Scalar-ReadWrite,dateTime
+Device.LMAP.Event.{i}.PeriodicTimer.Interval,device.lmap.event.{i}.periodic-timer.interval,Scalar-ReadWrite,unsignedInt
+Device.LMAP.Event.{i}.CalendarTimer.,device.lmap.event.{i}.calendar-timer,ScalarObject,object
+Device.LMAP.Event.{i}.CalendarTimer.StartTime,device.lmap.event.{i}.calendar-timer.start-time,Scalar-ReadWrite,dateTime
+Device.LMAP.Event.{i}.CalendarTimer.EndTime,device.lmap.event.{i}.calendar-timer.end-time,Scalar-ReadWrite,dateTime
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleMonths,device.lmap.event.{i}.calendar-timer.schedule-months,Scalar-ReadWrite,string
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleDaysOfMonth,device.lmap.event.{i}.calendar-timer.schedule-days-of-month,Scalar-ReadWrite,string
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleDaysOfWeek,device.lmap.event.{i}.calendar-timer.schedule-days-of-week,Scalar-ReadWrite,string
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleHoursOfDay,device.lmap.event.{i}.calendar-timer.schedule-hours-of-day,Scalar-ReadWrite,string
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleMinutesOfHour,device.lmap.event.{i}.calendar-timer.schedule-minutes-of-hour,Scalar-ReadWrite,string
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleSecondsOfMinute,device.lmap.event.{i}.calendar-timer.schedule-seconds-of-minute,Scalar-ReadWrite,string
+Device.LMAP.Event.{i}.CalendarTimer.EnableScheduleTimezoneOffset,device.lmap.event.{i}.calendar-timer.enable-schedule-timezone-offset,Scalar-ReadWrite,boolean
+Device.LMAP.Event.{i}.CalendarTimer.ScheduleTimezoneOffset,device.lmap.event.{i}.calendar-timer.schedule-timezone-offset,Scalar-ReadWrite,int
+Device.LMAP.Event.{i}.OneOff.,device.lmap.event.{i}.one-off,ScalarObject,object
+Device.LMAP.Event.{i}.OneOff.StartTime,device.lmap.event.{i}.one-off.start-time,Scalar-ReadWrite,dateTime
+Device.Services.FAPService.{i}.,device.services.fap-service.{i}.,TabularObject,object,urn:onf:otcc:wireless:yang:radio-access
+Device.Services.FAPService.{i}.Alias,device.services.fap-service.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.DeviceType,device.services.fap-service.{i}.device-type,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.DNPrefix,device.services.fap-service.{i}.dn-prefix,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.Capabilities.,device.services.fap-service.{i}.capabilities,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.GPSEquipped,device.services.fap-service.{i}.capabilities.gps-equipped,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.MaxTxPower,device.services.fap-service.{i}.capabilities.max-tx-power,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Capabilities.SupportedSystems,device.services.fap-service.{i}.capabilities.supported-systems,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.Beacon,device.services.fap-service.{i}.capabilities.beacon,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.,device.services.fap-service.{i}.capabilities.umts,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.UMTS.DuplexMode,device.services.fap-service.{i}.capabilities.umts.duplex-mode,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.UMTS.GSMRxSupported,device.services.fap-service.{i}.capabilities.umts.gsm-rx-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.HSDPASupported,device.services.fap-service.{i}.capabilities.umts.hsdpa-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.MaxHSDPADataRateSupported,device.services.fap-service.{i}.capabilities.umts.max-hsdpa-data-rate-supported,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Capabilities.UMTS.HSUPASupported,device.services.fap-service.{i}.capabilities.umts.hsupa-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.MaxHSUPADataRateSupported,device.services.fap-service.{i}.capabilities.umts.max-hsupa-data-rate-supported,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Capabilities.UMTS.MaxHSPDSCHsSupported,device.services.fap-service.{i}.capabilities.umts.max-hspdsc-hs-supported,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Capabilities.UMTS.MaxHSSCCHsSupported,device.services.fap-service.{i}.capabilities.umts.max-hsscc-hs-supported,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Capabilities.UMTS.FDDBandsSupported,device.services.fap-service.{i}.capabilities.umts.fdd-bands-supported,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported,device.services.fap-service.{i}.capabilities.umts.gsm-rx-bands-supported,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.,device.services.fap-service.{i}.capabilities.umts.self-config,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.UARFCNConfig,device.services.fap-service.{i}.capabilities.umts.self-config.uarfcn-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig,device.services.fap-service.{i}.capabilities.umts.self-config.primary-scrambling-code-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig,device.services.fap-service.{i}.capabilities.umts.self-config.max-fap-tx-power-expanded-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig,device.services.fap-service.{i}.capabilities.umts.self-config.pcpich-power-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig,device.services.fap-service.{i}.capabilities.umts.self-config.max-ul-tx-power-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.LACRACURAConfig,device.services.fap-service.{i}.capabilities.umts.self-config.lacracura-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.NeighborListConfig,device.services.fap-service.{i}.capabilities.umts.self-config.neighbor-list-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.CellReSelectionConfig,device.services.fap-service.{i}.capabilities.umts.self-config.cell-re-selection-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.IntraFreqMeasConfig,device.services.fap-service.{i}.capabilities.umts.self-config.intra-freq-meas-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.InterFreqMeasConfig,device.services.fap-service.{i}.capabilities.umts.self-config.inter-freq-meas-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.InterRATMeasConfig,device.services.fap-service.{i}.capabilities.umts.self-config.inter-rat-meas-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.UEInternalMeasConfig,device.services.fap-service.{i}.capabilities.umts.self-config.ue-internal-meas-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig,device.services.fap-service.{i}.capabilities.umts.self-config.noise-rise-limit-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.LTE.,device.services.fap-service.{i}.capabilities.lte,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.LTE.DuplexMode,device.services.fap-service.{i}.capabilities.lte.duplex-mode,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.LTE.BandsSupported,device.services.fap-service.{i}.capabilities.lte.bands-supported,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Capabilities.LTE.NNSFSupported,device.services.fap-service.{i}.capabilities.lte.nnsf-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.LTE.UMTSRxSupported,device.services.fap-service.{i}.capabilities.lte.umts-rx-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.LTE.UMTSRxBandsSupported,device.services.fap-service.{i}.capabilities.lte.umts-rx-bands-supported,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.LTE.GSMRxSupported,device.services.fap-service.{i}.capabilities.lte.gsm-rx-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported,device.services.fap-service.{i}.capabilities.lte.gsm-rx-bands-supported,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.LTE.CDMA2000RxSupported,device.services.fap-service.{i}.capabilities.lte.cdma2000-rx-supported,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.LTE.CDMA2000RxBandsSupported,device.services.fap-service.{i}.capabilities.lte.cdma2000-rx-bands-supported,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.,device.services.fap-service.{i}.capabilities.cdma2000,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.RemoteIPAccessCapable,device.services.fap-service.{i}.capabilities.cdma2000.remote-ip-access-capable,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.BandClassSupportedFAPBeacon,device.services.fap-service.{i}.capabilities.cdma2000.band-class-supported-fap-beacon,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.,device.services.fap-service.{i}.capabilities.cdma2000.one-x,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.BandClassSupportedFAP,device.services.fap-service.{i}.capabilities.cdma2000.one-x.band-class-supported-fap,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.ActiveHandinCapable,device.services.fap-service.{i}.capabilities.cdma2000.one-x.active-handin-capable,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable,device.services.fap-service.{i}.capabilities.cdma2000.one-x.femto-overhead-messages-capable,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.,device.services.fap-service.{i}.capabilities.cdma2000.one-x.self-config,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig,device.services.fap-service.{i}.capabilities.cdma2000.one-x.self-config.rfcnfl-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig,device.services.fap-service.{i}.capabilities.cdma2000.one-x.self-config.pilot-pn-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig,device.services.fap-service.{i}.capabilities.cdma2000.one-x.self-config.max-fap-tx-power-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig,device.services.fap-service.{i}.capabilities.cdma2000.one-x.self-config.max-fap-beacon-tx-power-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.,device.services.fap-service.{i}.capabilities.cdma2000.hrpd,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.A13SessionTransferCapable,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.a13-session-transfer-capable,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.A16SessionTransferCapable,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.a16-session-transfer-capable,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.LocalIPAccessCapable,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.local-ip-access-capable,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.DedicatedHRPDBeacon,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.dedicated-hrpd-beacon,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.self-config,ScalarObject,object
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.self-config.rfcnfl-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.self-config.pilot-pn-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.self-config.max-fap-tx-power-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPBeaconTxPowerConfig,device.services.fap-service.{i}.capabilities.cdma2000.hrpd.self-config.max-fap-beacon-tx-power-config,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.,device.services.fap-service.{i}.fap-control,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.SelfConfigEvents,device.services.fap-service.{i}.fap-control.self-config-events,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.EnclosureTamperingDetected,device.services.fap-service.{i}.fap-control.enclosure-tampering-detected,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.,device.services.fap-service.{i}.fap-control.umts,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.UMTS.OpState,device.services.fap-service.{i}.fap-control.umts.op-state,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.AdminState,device.services.fap-service.{i}.fap-control.umts.admin-state,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.RFTxStatus,device.services.fap-service.{i}.fap-control.umts.rf-tx-status,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.PMConfig,device.services.fap-service.{i}.fap-control.umts.pm-config,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.,device.services.fap-service.{i}.fap-control.umts.self-config,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.uarfcn-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.primary-scrambling-code-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.max-fap-tx-power-expanded-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.pcpich-power-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.max-ul-tx-power-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.lacracura-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.NeighborListSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.neighbor-list-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.CellReSelectionSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.cell-re-selection-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.IntraFreqMeasSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.intra-freq-meas-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.InterFreqMeasSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.inter-freq-meas-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.InterRATMeasSelfConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.inter-rat-meas-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.UEInternalMeasConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.ue-internal-meas-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable,device.services.fap-service.{i}.fap-control.umts.self-config.noise-rise-limit-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.,device.services.fap-service.{i}.fap-control.umts.gateway,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer1,device.services.fap-service.{i}.fap-control.umts.gateway.sec-gw-server1,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer2,device.services.fap-service.{i}.fap-control.umts.gateway.sec-gw-server2,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer3,device.services.fap-service.{i}.fap-control.umts.gateway.sec-gw-server3,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer1,device.services.fap-service.{i}.fap-control.umts.gateway.fapgw-server1,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer2,device.services.fap-service.{i}.fap-control.umts.gateway.fapgw-server2,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer3,device.services.fap-service.{i}.fap-control.umts.gateway.fapgw-server3,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWPort,device.services.fap-service.{i}.fap-control.umts.gateway.fapgw-port,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.LTE.,device.services.fap-service.{i}.fap-control.lte,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.LTE.OpState,device.services.fap-service.{i}.fap-control.lte.op-state,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.LTE.AdminState,device.services.fap-service.{i}.fap-control.lte.admin-state,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.LTE.RFTxStatus,device.services.fap-service.{i}.fap-control.lte.rf-tx-status,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.LTE.PMConfig,device.services.fap-service.{i}.fap-control.lte.pm-config,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.,device.services.fap-service.{i}.fap-control.lte.gateway,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer1,device.services.fap-service.{i}.fap-control.lte.gateway.sec-gw-server1,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer2,device.services.fap-service.{i}.fap-control.lte.gateway.sec-gw-server2,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer3,device.services.fap-service.{i}.fap-control.lte.gateway.sec-gw-server3,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkServerList,device.services.fap-service.{i}.fap-control.lte.gateway.s1-sig-link-server-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode,device.services.fap-service.{i}.fap-control.lte.gateway.s1-connection-mode,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkPort,device.services.fap-service.{i}.fap-control.lte.gateway.s1-sig-link-port,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.,device.services.fap-service.{i}.fap-control.cdma2000,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HomeDomain,device.services.fap-service.{i}.fap-control.cdma2000.home-domain,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.RemoteIPAccessEnable,device.services.fap-service.{i}.fap-control.cdma2000.remote-ip-access-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.PMConfig,device.services.fap-service.{i}.fap-control.cdma2000.pm-config,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Time.,device.services.fap-service.{i}.fap-control.cdma2000.time,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Time.LocalTimeZone,device.services.fap-service.{i}.fap-control.cdma2000.time.local-time-zone,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Time.CurrentLocalTime,device.services.fap-service.{i}.fap-control.cdma2000.time.current-local-time,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Time.LeapSeconds,device.services.fap-service.{i}.fap-control.cdma2000.time.leap-seconds,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Time.DaylightSavingsUsed,device.services.fap-service.{i}.fap-control.cdma2000.time.daylight-savings-used,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.,device.services.fap-service.{i}.fap-control.cdma2000.one-x,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState,device.services.fap-service.{i}.fap-control.cdma2000.one-x.admin-state,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.OpState,device.services.fap-service.{i}.fap-control.cdma2000.one-x.op-state,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.RFTxStatus,device.services.fap-service.{i}.fap-control.cdma2000.one-x.rf-tx-status,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.Daylight,device.services.fap-service.{i}.fap-control.cdma2000.one-x.daylight,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.MaxPRev,device.services.fap-service.{i}.fap-control.cdma2000.one-x.max-p-rev,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.Reregister,device.services.fap-service.{i}.fap-control.cdma2000.one-x.reregister,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.EmergencySessionPeriod,device.services.fap-service.{i}.fap-control.cdma2000.one-x.emergency-session-period,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.LocationAreaCode,device.services.fap-service.{i}.fap-control.cdma2000.one-x.location-area-code,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.MSCId,device.services.fap-service.{i}.fap-control.cdma2000.one-x.msc-id,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinEnable,device.services.fap-service.{i}.fap-control.cdma2000.one-x.active-handin-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.,device.services.fap-service.{i}.fap-control.cdma2000.one-x.active-handin-measurement,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandinMeasurementEnable,device.services.fap-service.{i}.fap-control.cdma2000.one-x.active-handin-measurement.active-handin-measurement-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandInMeasurementDuration,device.services.fap-service.{i}.fap-control.cdma2000.one-x.active-handin-measurement.active-hand-in-measurement-duration,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.MeasurementReportThreshold,device.services.fap-service.{i}.fap-control.cdma2000.one-x.active-handin-measurement.measurement-report-threshold,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.,device.services.fap-service.{i}.fap-control.cdma2000.one-x.self-config,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.one-x.self-config.rfcnfl-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.one-x.self-config.pilot-pn-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.one-x.self-config.max-fap-tx-power-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.one-x.self-config.max-fap-beacon-tx-power-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Gateway.,device.services.fap-service.{i}.fap-control.cdma2000.gateway,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer1,device.services.fap-service.{i}.fap-control.cdma2000.gateway.sec-gw-server1,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer2,device.services.fap-service.{i}.fap-control.cdma2000.gateway.sec-gw-server2,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer3,device.services.fap-service.{i}.fap-control.cdma2000.gateway.sec-gw-server3,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWSwitchoverCount,device.services.fap-service.{i}.fap-control.cdma2000.gateway.sec-gw-switchover-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.,device.services.fap-service.{i}.fap-control.cdma2000.hrpd,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.OpState,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.op-state,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.AdminState,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.admin-state,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.RFTxStatus,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.rf-tx-status,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13SessionTransferEnable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13-session-transfer-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.LocalIPAccessEnable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.local-ip-access-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.self-config,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.self-config.rfcnfl-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.self-config.pilot-pn-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.self-config.max-fap-tx-power-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxHRPDBeaconTxPowerSelfConfigEnable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.self-config.max-hrpd-beacon-tx-power-self-config-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13,ScalarObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104NumberOfEntries,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.color-code-to-uati104-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIPNumberOfEntries,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.color-code-to-uati104.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Enable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.color-code-to-uati104.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Alias,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.color-code-to-uati104.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.ColorCode,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.color-code-to-uati104.{i}.color-code,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.UATI104,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.color-code-to-uati104.{i}.uati104,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Enable,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Alias,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnetLength,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip.{i}.hrpd-subnet-length,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnet,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip.{i}.hrpd-subnet,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.A13IPAddress,device.services.fap-service.{i}.fap-control.cdma2000.hrpd.a13.hrpd-subnet-to-ip.{i}.a13-ip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.,device.services.fap-service.{i}.access-mgmt,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.,device.services.fap-service.{i}.access-mgmt.umts,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.AccessMode,device.services.fap-service.{i}.access-mgmt.umts.access-mode,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision,device.services.fap-service.{i}.access-mgmt.umts.non-csgue-access-decision,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.CSGMembershipDeterminedLocally,device.services.fap-service.{i}.access-mgmt.umts.csg-membership-determined-locally,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MaxUEsServed,device.services.fap-service.{i}.access-mgmt.umts.max-u-es-served,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MaxCSGMembers,device.services.fap-service.{i}.access-mgmt.umts.max-csg-members,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MaxNonCSGMembers,device.services.fap-service.{i}.access-mgmt.umts.max-non-csg-members,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MaxResourceNonCSGMembers,device.services.fap-service.{i}.access-mgmt.umts.max-resource-non-csg-members,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.HNBName,device.services.fap-service.{i}.access-mgmt.umts.hnb-name,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.CSGID,device.services.fap-service.{i}.access-mgmt.umts.csgid,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.AccessControlList,device.services.fap-service.{i}.access-mgmt.umts.access-control-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MaxMemberDetailEntries,device.services.fap-service.{i}.access-mgmt.umts.max-member-detail-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetailNumberOfEntries,device.services.fap-service.{i}.access-mgmt.umts.member-detail-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.,device.services.fap-service.{i}.access-mgmt.umts.member-detail.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Enable,device.services.fap-service.{i}.access-mgmt.umts.member-detail.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Alias,device.services.fap-service.{i}.access-mgmt.umts.member-detail.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.IMSI,device.services.fap-service.{i}.access-mgmt.umts.member-detail.{i}.imsi,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MSISDN,device.services.fap-service.{i}.access-mgmt.umts.member-detail.{i}.msisdn,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MembershipExpires,device.services.fap-service.{i}.access-mgmt.umts.member-detail.{i}.membership-expires,Tabular-ReadWrite,dateTime
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.,device.services.fap-service.{i}.access-mgmt.umts.local-ip-access,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.Enable,device.services.fap-service.{i}.access-mgmt.umts.local-ip-access.enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.LTE.,device.services.fap-service.{i}.access-mgmt.lte,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.LTE.AccessMode,device.services.fap-service.{i}.access-mgmt.lte.access-mode,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.LTE.MaxUEsServed,device.services.fap-service.{i}.access-mgmt.lte.max-u-es-served,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.LTE.MaxCSGMembers,device.services.fap-service.{i}.access-mgmt.lte.max-csg-members,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.LTE.MaxNonCSGMembers,device.services.fap-service.{i}.access-mgmt.lte.max-non-csg-members,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.LTE.MaxResourceNonCSGMembers,device.services.fap-service.{i}.access-mgmt.lte.max-resource-non-csg-members,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.LTE.CSGID,device.services.fap-service.{i}.access-mgmt.lte.csgid,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.LTE.HNBName,device.services.fap-service.{i}.access-mgmt.lte.hnb-name,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.,device.services.fap-service.{i}.access-mgmt.lte.local-ip-access,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.Enable,device.services.fap-service.{i}.access-mgmt.lte.local-ip-access.enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.,device.services.fap-service.{i}.access-mgmt.cdma2000,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.AccessMode,device.services.fap-service.{i}.access-mgmt.cdma2000.access-mode,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MaxTotalActiveCallsAllowed,device.services.fap-service.{i}.access-mgmt.cdma2000.max-total-active-calls-allowed,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.AccessControlList,device.services.fap-service.{i}.access-mgmt.cdma2000.access-control-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MaxMemberDetailEntries,device.services.fap-service.{i}.access-mgmt.cdma2000.max-member-detail-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetailNumberOfEntries,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Enable,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Alias,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.IMSI,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.imsi,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierType,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.hrpd-identifier-type,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierValue,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.hrpd-identifier-value,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.MembershipExpires,device.services.fap-service.{i}.access-mgmt.cdma2000.member-detail.{i}.membership-expires,Tabular-ReadWrite,dateTime
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.filter-type,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterInUse,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.filter-in-use,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilterNumberOfEntries,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.egress-filter-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.egress-filter.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Enable,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.egress-filter.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Alias,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.egress-filter.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Subnet,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.egress-filter.{i}.subnet,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.SubnetMask,device.services.fap-service.{i}.access-mgmt.cdma2000.local-ip-access.hrpd.egress-filter.{i}.subnet-mask,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.,device.services.fap-service.{i}.access-mgmt.legacy,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access,ScalarObject,object
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Enable,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.MaxRulesEntries,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.max-rules-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.RuleNumberOfEntries,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Enable,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Alias,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestIPAddress,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.dest-ip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestSubnetMask,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.dest-subnet-mask,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Protocol,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.protocol,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.action,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Interface,device.services.fap-service.{i}.access-mgmt.legacy.local-ip-access.rule.{i}.interface,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.,device.services.fap-service.{i}.cell-config,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.,device.services.fap-service.{i}.cell-config.umts,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.TunnelInstance,device.services.fap-service.{i}.cell-config.umts.tunnel-instance,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.,device.services.fap-service.{i}.cell-config.umts.cn,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PLMNType,device.services.fap-service.{i}.cell-config.umts.cn.plmn-type,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PLMNID,device.services.fap-service.{i}.cell-config.umts.cn.plmnid,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.EquivPLMNID,device.services.fap-service.{i}.cell-config.umts.cn.equiv-plmnid,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.SAC,device.services.fap-service.{i}.cell-config.umts.cn.sac,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.BroadcastSAC,device.services.fap-service.{i}.cell-config.umts.cn.broadcast-sac,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.LACRAC,device.services.fap-service.{i}.cell-config.umts.cn.lacrac,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.LACInUse,device.services.fap-service.{i}.cell-config.umts.cn.lac-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.RACInUse,device.services.fap-service.{i}.cell-config.umts.cn.rac-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.T3212,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.t3212,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.IMSIAttachDetachEnable,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.imsi-attach-detach-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.RAB.,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.rab,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.RAB.Stats.,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.rab.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.RAB.Stats.AttEstabCS,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.rab.stats.att-estab-cs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.RAB.Stats.FailEstabCS,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.rab.stats.fail-estab-cs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.RAB.Stats.SuccEstabCS,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.rab.stats.succ-estab-cs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.RAB.Stats.RelDropCS,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.rab.stats.rel-drop-cs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.HHO.,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.hho,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.HHO.Stats.,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.hho.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.HHO.Stats.Att3GMacroToHnbCSHO,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.hho.stats.att3-g-macro-to-hnb-csho,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.HHO.Stats.Succ3GMacroToHnbCSHO,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.hho.stats.succ3-g-macro-to-hnb-csho,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.HHO.Stats.Att2GMacroToHnbCSHO,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.hho.stats.att2-g-macro-to-hnb-csho,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.CSDomain.HHO.Stats.Succ2GMacroToHnbCSHO,device.services.fap-service.{i}.cell-config.umts.cn.cs-domain.hho.stats.succ2-g-macro-to-hnb-csho,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.NetworkModeOperationCombined,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.network-mode-operation-combined,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.AttEstabPS,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.att-estab-ps,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.SuccEstabPS,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.succ-estab-ps,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.FailEstabPS,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.fail-estab-ps,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.RelDropPS,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.rel-drop-ps,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.ULNumUserBitsEDCH,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.ul-num-user-bits-edch,Scalar-ReadOnly,unsignedLong
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.ULNumUserBits64K,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.ul-num-user-bits64-k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.ULNumUserBits128K,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.ul-num-user-bits128-k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.ULNumUserBits384K,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.ul-num-user-bits384-k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.DLNumUserBitsHSDPA,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.dl-num-user-bits-hsdpa,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.DLNumUserBits64K,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.dl-num-user-bits64-k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.DLNumUserBits128K,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.dl-num-user-bits128-k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.DLNumUserBits384K,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.dl-num-user-bits384-k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.LGWNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.lgw-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.LGW.{i}.,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.lgw.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.LGW.{i}.CorrelationID,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.lgw.{i}.correlation-id,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.LGW.{i}.EstabDirectPathLGWAttNbr,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.lgw.{i}.estab-direct-path-lgw-att-nbr,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.LGW.{i}.EstabDirectPathLGWSuccNbr,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.lgw.{i}.estab-direct-path-lgw-succ-nbr,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.PSDomain.RAB.Stats.LGW.{i}.EstabDirectPathLGWFailNbr,device.services.fap-service.{i}.cell-config.umts.cn.ps-domain.rab.stats.lgw.{i}.estab-direct-path-lgw-fail-nbr,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.HHO.,device.services.fap-service.{i}.cell-config.umts.cn.hho,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.HHO.Stats.,device.services.fap-service.{i}.cell-config.umts.cn.hho.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.HHO.Stats.SuccHnbUmtsIntraFreq,device.services.fap-service.{i}.cell-config.umts.cn.hho.stats.succ-hnb-umts-intra-freq,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.HHO.Stats.AttHnbUmtsIntraFreq,device.services.fap-service.{i}.cell-config.umts.cn.hho.stats.att-hnb-umts-intra-freq,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.CN.HHO.Stats.AttHnbUmtsInterFreq,device.services.fap-service.{i}.cell-config.umts.cn.hho.stats.att-hnb-umts-inter-freq,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.,device.services.fap-service.{i}.cell-config.umts.ran,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.URAList,device.services.fap-service.{i}.cell-config.umts.ran.ura-list,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.URAInUse,device.services.fap-service.{i}.cell-config.umts.ran.ura-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RNCID,device.services.fap-service.{i}.cell-config.umts.ran.rncid,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellID,device.services.fap-service.{i}.cell-config.umts.ran.cell-id,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TRatC,device.services.fap-service.{i}.cell-config.umts.ran.t-rat-c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TRafC,device.services.fap-service.{i}.cell-config.umts.ran.t-raf-c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NRafC,device.services.fap-service.{i}.cell-config.umts.ran.n-raf-c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TigOR,device.services.fap-service.{i}.cell-config.umts.ran.tig-or,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TinTR,device.services.fap-service.{i}.cell-config.umts.ran.tin-tr,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TDataFwd,device.services.fap-service.{i}.cell-config.umts.ran.t-data-fwd,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TRelocPrep,device.services.fap-service.{i}.cell-config.umts.ran.t-reloc-prep,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.TRelocOverall,device.services.fap-service.{i}.cell-config.umts.ran.t-reloc-overall,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.HNBIDRealm,device.services.fap-service.{i}.cell-config.umts.ran.hnbid-realm,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.HSFlag,device.services.fap-service.{i}.cell-config.umts.ran.hs-flag,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.HSEnable,device.services.fap-service.{i}.cell-config.umts.ran.hs-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSPDSCHs,device.services.fap-service.{i}.cell-config.umts.ran.num-of-hspdsc-hs,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSSCCHs,device.services.fap-service.{i}.cell-config.umts.ran.num-of-hsscc-hs,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.,device.services.fap-service.{i}.cell-config.umts.ran.csg,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGIndicator,device.services.fap-service.{i}.cell-config.umts.ran.csg.csg-indicator,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.UARFCNDLList,device.services.fap-service.{i}.cell-config.umts.ran.csg.uarfcndl-list,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.,device.services.fap-service.{i}.cell-config.umts.ran.csg.csgpsc-split-info,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.StartPSCRange1Coefficient,device.services.fap-service.{i}.cell-config.umts.ran.csg.csgpsc-split-info.start-psc-range1-coefficient,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs,device.services.fap-service.{i}.cell-config.umts.ran.csg.csgpsc-split-info.number-of-ps-cs,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.PSCRange2Offset,device.services.fap-service.{i}.cell-config.umts.ran.csg.csgpsc-split-info.psc-range2-offset,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.quality-measure-cpich,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMin,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.qqual-min,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMinOffset,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.qqual-min-offset,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMin,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.q-rx-lev-min,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.DeltaQRxLevMin,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.delta-q-rx-lev-min,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMinOffset,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.q-rx-lev-min-offset,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst1s,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.q-hyst1s,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst2s,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.q-hyst2s,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TReselections,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.t-reselections,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntrasearch,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.s-intrasearch,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntersearch,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.s-intersearch,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchHCS,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.s-search-hcs,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchRAT,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.s-search-rat,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SHCSRAT,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.shcsrat,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SLimitSearchRAT,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.s-limit-search-rat,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.non-hcstcr-max,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSNCR,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.non-hcsncr,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.non-hcstcr-max-hyst,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHCS,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.qhcs,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UseOfHCS,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.use-of-hcs,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.HCSPrio,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.hcs-prio,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.tcr-max,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NCR,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.ncr,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.tcr-max-hyst,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UETxPwrMaxRACH,device.services.fap-service.{i}.cell-config.umts.ran.cell-selection.ue-tx-pwr-max-rach,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T300,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t300,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T301,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t301,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T302,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t302,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T304,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t304,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T305,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t305,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T307,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t307,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T308,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t308,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T309,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t309,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T310,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t310,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T311,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t311,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T312,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t312,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T313,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t313,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T314,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t314,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T315,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t315,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T316,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t316,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T317,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.t317,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N300,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n300,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N301,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n301,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N302,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n302,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N304,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n304,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N310,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n310,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N312,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n312,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N313,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n313,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N315,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.n315,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.WaitTime,device.services.fap-service.{i}.cell-config.umts.ran.rrc-timers.wait-time,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.DRX.,device.services.fap-service.{i}.cell-config.umts.ran.drx,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientCS,device.services.fap-service.{i}.cell-config.umts.ran.drx.drx-cycle-length-coefficient-cs,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientPS,device.services.fap-service.{i}.cell-config.umts.ran.drx.drx-cycle-length-coefficient-ps,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.DRX.UTRANDRXCycleLengthCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.drx.utrandrx-cycle-length-coefficient,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.,device.services.fap-service.{i}.cell-config.umts.ran.power-control,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.ConstantValue,device.services.fap-service.{i}.cell-config.umts.ran.power-control.constant-value,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PowerRampStepUp,device.services.fap-service.{i}.cell-config.umts.ran.power-control.power-ramp-step-up,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PreambleRetransMax,device.services.fap-service.{i}.cell-config.umts.ran.power-control.preamble-retrans-max,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PersistenceScaleFactor,device.services.fap-service.{i}.cell-config.umts.ran.power-control.persistence-scale-factor,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.MMax,device.services.fap-service.{i}.cell-config.umts.ran.power-control.m-max,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Min,device.services.fap-service.{i}.cell-config.umts.ran.power-control.nb01-min,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Max,device.services.fap-service.{i}.cell-config.umts.ran.power-control.nb01-max,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellBarred,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction.cell-barred,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.IntraFreqCellReselectionIndicator,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction.intra-freq-cell-reselection-indicator,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.TBarred,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction.t-barred,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListCS,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction.access-class-barred-list-cs,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListPS,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction.access-class-barred-list-ps,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellReservedForOperatorUse,device.services.fap-service.{i}.cell-config.umts.ran.cell-restriction.cell-reserved-for-operator-use,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.measurement-quantity,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.FilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.filter-coefficient,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.IntraFrequencyEventIdentity,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.intra-frequency-event-identity,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.triggering-condition2-event1a,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.triggering-condition1-event1b,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.triggering-condition2-event1e,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.triggering-condition1-event1f,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.reporting-range-event1a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1b,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.reporting-range-event1b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.weighting-factor-event1a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1b,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.weighting-factor-event1b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportDeactivationThresholdEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.report-deactivation-threshold-event1a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.reporting-amount-event1a,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1c,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.reporting-amount-event1c,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.reporting-interval-event1a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1c,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.reporting-interval-event1c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.hysteresis-event1a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1b,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.hysteresis-event1b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1c,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.hysteresis-event1c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1d,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.hysteresis-event1d,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1e,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.hysteresis-event1e,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1f,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.hysteresis-event1f,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1a,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.time-to-trigger-event1a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1b,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.time-to-trigger-event1b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1c,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.time-to-trigger-event1c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1d,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.time-to-trigger-event1d,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1e,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.time-to-trigger-event1e,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1f,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.time-to-trigger-event1f,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1e,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.threshold-used-frequency-event1e,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1f,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.threshold-used-frequency-event1f,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReplacementActivationThresholdEvent1c,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.replacement-activation-threshold-event1c,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.InstanceNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Enable,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Alias,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.intra-frequency-event-identity,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.EventDescription,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.event-description,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.measurement-quantity,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.FilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.filter-coefficient,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.triggering-condition,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingRange,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.reporting-range,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.WeightingFactor,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.weighting-factor,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportDeactivationThreshold,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.report-deactivation-threshold,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingAmount,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.reporting-amount,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingInterval,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.reporting-interval,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Hysteresis,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.hysteresis,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TimeToTrigger,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.time-to-trigger,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ThresholdUsedFrequency,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.threshold-used-frequency,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReplacementActivationThreshold,device.services.fap-service.{i}.cell-config.umts.ran.intra-freq-meas.instance.{i}.replacement-activation-threshold,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.measurement-quantity,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.FilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.filter-coefficient,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InterFrequencyEventIdentity,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.inter-frequency-event-identity,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2a,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.weighting-factor-event2a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2b,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.weighting-factor-event2b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2d,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.weighting-factor-event2d,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2f,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.weighting-factor-event2f,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2a,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.hysteresis-event2a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2b,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.hysteresis-event2b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2d,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.hysteresis-event2d,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2f,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.hysteresis-event2f,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2a,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.time-to-trigger-event2a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2b,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.time-to-trigger-event2b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2d,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.time-to-trigger-event2d,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2f,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.time-to-trigger-event2f,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2b,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.threshold-used-frequency-event2b,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2d,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.threshold-used-frequency-event2d,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2f,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.threshold-used-frequency-event2f,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InstanceNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Enable,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Alias,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.intra-frequency-event-identity,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.EventDescription,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.event-description,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.measurement-quantity,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.FilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.filter-coefficient,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.WeightingFactor,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.weighting-factor,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Hysteresis,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.hysteresis,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.TimeToTrigger,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.time-to-trigger,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdUsedFrequency,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.threshold-used-frequency,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdNonUsedFrequency,device.services.fap-service.{i}.cell-config.umts.ran.inter-freq-meas.instance.{i}.threshold-non-used-frequency,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.GSMFilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.gsm-filter-coefficient,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.BSICVerificationRequired,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.bsic-verification-required,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.WeightingFactor,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.weighting-factor,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Hysteresis,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.hysteresis,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.TimeToTrigger,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.time-to-trigger,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOwnSystem,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.threshold-own-system,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOtherSystem,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.threshold-other-system,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.InstanceNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Enable,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Alias,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.inter-rat-event-identity,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.EventDescription,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.event-description,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.FilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.filter-coefficient,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.BSICVerificationRequired,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.bsic-verification-required,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.WeightingFactor,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.weighting-factor,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Hysteresis,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.hysteresis,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.TimeToTrigger,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.time-to-trigger,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOwnSystem,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.threshold-own-system,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOtherSystem,device.services.fap-service.{i}.cell-config.umts.ran.inter-rat-meas.instance.{i}.threshold-other-system,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.,device.services.fap-service.{i}.cell-config.umts.ran.ue-internal-meas,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.FilterCoefficient,device.services.fap-service.{i}.cell-config.umts.ran.ue-internal-meas.filter-coefficient,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6a,device.services.fap-service.{i}.cell-config.umts.ran.ue-internal-meas.ue-tx-pwr-threshold-event6a,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6a,device.services.fap-service.{i}.cell-config.umts.ran.ue-internal-meas.time-to-trigger-event6a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6b,device.services.fap-service.{i}.cell-config.umts.ran.ue-internal-meas.ue-tx-pwr-threshold-event6b,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6b,device.services.fap-service.{i}.cell-config.umts.ran.ue-internal-meas.time-to-trigger-event6b,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.,device.services.fap-service.{i}.cell-config.umts.ran.rf,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDL,device.services.fap-service.{i}.cell-config.umts.ran.rf.uarfcndl,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLInUse,device.services.fap-service.{i}.cell-config.umts.ran.rf.uarfcndl-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNULInUse,device.services.fap-service.{i}.cell-config.umts.ran.rf.uarfcnul-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLToProtect,device.services.fap-service.{i}.cell-config.umts.ran.rf.uarfcndl-to-protect,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode,device.services.fap-service.{i}.cell-config.umts.ran.rf.primary-scrambling-code,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCodeInUse,device.services.fap-service.{i}.cell-config.umts.ran.rf.primary-scrambling-code-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded,device.services.fap-service.{i}.cell-config.umts.ran.rf.max-fap-tx-power-expanded,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerInUseExpanded,device.services.fap-service.{i}.cell-config.umts.ran.rf.max-fap-tx-power-in-use-expanded,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.max-ul-tx-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPowerInUse,device.services.fap-service.{i}.cell-config.umts.ran.rf.max-ul-tx-power-in-use,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.pcpich-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPowerInUse,device.services.fap-service.{i}.cell-config.umts.ran.rf.pcpich-power-in-use,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PowerOffsetPilotDPDCH,device.services.fap-service.{i}.cell-config.umts.ran.rf.power-offset-pilot-dpdch,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPCoverageTarget,device.services.fap-service.{i}.cell-config.umts.ran.rf.fap-coverage-target,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPQualityTargetEcIo,device.services.fap-service.{i}.cell-config.umts.ran.rf.fap-quality-target-ec-io,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PSCHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.psch-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.SSCHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.ssch-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PICHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.pich-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.PCHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.pch-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.FACHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.fach-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.BCHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.bch-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.AICHPower,device.services.fap-service.{i}.cell-config.umts.ran.rf.aich-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.CTCHAllocationPeriod,device.services.fap-service.{i}.cell-config.umts.ran.rf.ctch-allocation-period,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.CBSFrameOffset,device.services.fap-service.{i}.cell-config.umts.ran.rf.cbs-frame-offset,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxTTI,device.services.fap-service.{i}.cell-config.umts.ran.rf.max-tti,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue,device.services.fap-service.{i}.cell-config.umts.ran.rf.noise-rise-limit-lower-value,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue,device.services.fap-service.{i}.cell-config.umts.ran.rf.noise-rise-limit-upper-value,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse,device.services.fap-service.{i}.cell-config.umts.ran.rf.noise-rise-limit-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxIntraFreqCellEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.max-intra-freq-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxInterFreqCellEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.max-inter-freq-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCellNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCellNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Enable,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Alias,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MustInclude,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PLMNID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RNCID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.rncid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.cid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.LAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.lac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.rac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.URA,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.ura,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHScramblingCode,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.pcpich-scrambling-code,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHTxPower,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.pcpich-tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CollocatedInterFreqCell,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.collocated-inter-freq-cell,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxTxPower,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.max-tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxDPCHtxPower,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.intra-freq-cell.{i}.max-dpc-htx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Enable,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Alias,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.MustInclude,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PLMNID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RNCID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.rncid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.CID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.cid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.LAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.lac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.rac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.URA,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.ura,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNUL,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.uarfcnul,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNDL,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.uarfcndl,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHScramblingCode,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.pcpich-scrambling-code,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHTxPower,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-freq-cell.{i}.pcpich-tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.MaxGSMEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.max-gsm-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSMNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Enable,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Alias,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.LAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.lac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.bsic,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.CI,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.ci,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.band-indicator,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list.inter-rat-cell.gsm.{i}.bccharfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxIntraFreqCellEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.max-intra-freq-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxInterFreqCellEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.max-inter-freq-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCellNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCellNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PLMNID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RNCID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.rncid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.CID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.cid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.LAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.lac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.rac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.URA,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.ura,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PCPICHScramblingCode,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.intra-freq-cell.{i}.pcpich-scrambling-code,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PLMNID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RNCID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.rncid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.CID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.cid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.LAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.lac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.rac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.URA,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.ura,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNUL,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.uarfcnul,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNDL,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.uarfcndl,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PCPICHScramblingCode,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-freq-cell.{i}.pcpich-scrambling-code,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.max-gsm-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.lac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.bsic,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.ci,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.band-indicator,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN,device.services.fap-service.{i}.cell-config.umts.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.bccharfcn,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRC.,device.services.fap-service.{i}.cell-config.umts.ran.rrc,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRC.Stats.,device.services.fap-service.{i}.cell-config.umts.ran.rrc.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRC.Stats.AttConnEstab,device.services.fap-service.{i}.cell-config.umts.ran.rrc.stats.att-conn-estab,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRC.Stats.FailConnEstab,device.services.fap-service.{i}.cell-config.umts.ran.rrc.stats.fail-conn-estab,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAN.RRC.Stats.SuccConnEstab,device.services.fap-service.{i}.cell-config.umts.ran.rrc.stats.succ-conn-estab,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.,device.services.fap-service.{i}.cell-config.umts.rab,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabCS,device.services.fap-service.{i}.cell-config.umts.rab.rab-succ-estab-cs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabCS,device.services.fap-service.{i}.cell-config.umts.rab.rab-fail-estab-cs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabPS,device.services.fap-service.{i}.cell-config.umts.rab.rab-succ-estab-ps,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabPS,device.services.fap-service.{i}.cell-config.umts.rab.rab-fail-estab-ps,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMean,device.services.fap-service.{i}.cell-config.umts.rab.rabcs-setup-time-mean,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMax,device.services.fap-service.{i}.cell-config.umts.rab.rabcs-setup-time-max,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMean,device.services.fap-service.{i}.cell-config.umts.rab.rabps-setup-time-mean,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMax,device.services.fap-service.{i}.cell-config.umts.rab.rabps-setup-time-max,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.FailHO,device.services.fap-service.{i}.cell-config.umts.rab.fail-ho,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.UMTS.RAB.SuccHO,device.services.fap-service.{i}.cell-config.umts.rab.succ-ho,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.,device.services.fap-service.{i}.cell-config.lte,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.TunnelNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.tunnel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.Tunnel.{i}.,device.services.fap-service.{i}.cell-config.lte.tunnel.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.tunnel.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.tunnel.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.Tunnel.{i}.TunnelRef,device.services.fap-service.{i}.cell-config.lte.tunnel.{i}.tunnel-ref,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.Tunnel.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.tunnel.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.,device.services.fap-service.{i}.cell-config.lte.epc,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList,device.services.fap-service.{i}.cell-config.lte.epc.allowed-ciphering-algorithm-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList,device.services.fap-service.{i}.cell-config.lte.epc.allowed-integrity-protection-algorithm-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.TAC,device.services.fap-service.{i}.cell-config.lte.epc.tac,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.EAID,device.services.fap-service.{i}.cell-config.lte.epc.eaid,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.MaxPLMNListEntries,device.services.fap-service.{i}.cell-config.lte.epc.max-plmn-list-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNListNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.MaxQoSEntries,device.services.fap-service.{i}.cell-config.lte.epc.max-qo-s-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoSNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.epc.qo-s-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.IsPrimary,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list.{i}.is-primary,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.CellReservedForOperatorUse,device.services.fap-service.{i}.cell-config.lte.epc.plmn-list.{i}.cell-reserved-for-operator-use,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.QCI,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.qci,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.type,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Priority,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.priority,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.PacketDelayBudget,device.services.fap-service.{i}.cell-config.lte.epc.qo-s.{i}.packet-delay-budget,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.,device.services.fap-service.{i}.cell-config.lte.epc.ho,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToeNBAtt,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.toe-nb-att,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToeNBSucc,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.toe-nb-succ,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToeNBFail,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.toe-nb-fail,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.FromeNBAtt,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.frome-nb-att,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.FromeNBSucc,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.frome-nb-succ,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.FromeNBFail,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.frome-nb-fail,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToUtranAtt,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.to-utran-att,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToUtranSucc,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.to-utran-succ,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToUtranFail,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.to-utran-fail,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToGeranAtt,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.to-geran-att,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToGeranSucc,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.to-geran-succ,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EPC.HO.Stats.ToGeranFail,device.services.fap-service.{i}.cell-config.lte.epc.ho.stats.to-geran-fail,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.,device.services.fap-service.{i}.cell-config.lte.ran,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Common.,device.services.fap-service.{i}.cell-config.lte.ran.common,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Common.CellIdentity,device.services.fap-service.{i}.cell-config.lte.ran.common.cell-identity,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.S1AP.,device.services.fap-service.{i}.cell-config.lte.ran.s1-ap,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocPrep,device.services.fap-service.{i}.cell-config.lte.ran.s1-ap.t-reloc-prep,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocOverall,device.services.fap-service.{i}.cell-config.lte.ran.s1-ap.t-reloc-overall,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.S1U.,device.services.fap-service.{i}.cell-config.lte.ran.s1-u,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.S1U.GTPUEchoInterval,device.services.fap-service.{i}.cell-config.lte.ran.s1-u.gtpu-echo-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.,device.services.fap-service.{i}.cell-config.lte.ran.rf,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNDL,device.services.fap-service.{i}.cell-config.lte.ran.rf.earfcndl,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNUL,device.services.fap-service.{i}.cell-config.lte.ran.rf.earfcnul,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.FreqBandIndicator,device.services.fap-service.{i}.cell-config.lte.ran.rf.freq-band-indicator,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.DLBandwidth,device.services.fap-service.{i}.cell-config.lte.ran.rf.dl-bandwidth,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.ULBandwidth,device.services.fap-service.{i}.cell-config.lte.ran.rf.ul-bandwidth,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.ReferenceSignalPower,device.services.fap-service.{i}.cell-config.lte.ran.rf.reference-signal-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.PhyCellID,device.services.fap-service.{i}.cell-config.lte.ran.rf.phy-cell-id,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.PSCHPowerOffset,device.services.fap-service.{i}.cell-config.lte.ran.rf.psch-power-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.SSCHPowerOffset,device.services.fap-service.{i}.cell-config.lte.ran.rf.ssch-power-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.PBCHPowerOffset,device.services.fap-service.{i}.cell-config.lte.ran.rf.pbch-power-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.,device.services.fap-service.{i}.cell-config.lte.ran.phy,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.,device.services.fap-service.{i}.cell-config.lte.ran.phy.antenna-info,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.AntennaPortsCount,device.services.fap-service.{i}.cell-config.lte.ran.phy.antenna-info.antenna-ports-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.,device.services.fap-service.{i}.cell-config.lte.ran.phy.pdsch,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pb,device.services.fap-service.{i}.cell-config.lte.ran.phy.pdsch.pb,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pa,device.services.fap-service.{i}.cell-config.lte.ran.phy.pdsch.pa,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.,device.services.fap-service.{i}.cell-config.lte.ran.phy.srs,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSEnabled,device.services.fap-service.{i}.cell-config.lte.ran.phy.srs.srs-enabled,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSBandwidthConfig,device.services.fap-service.{i}.cell-config.lte.ran.phy.srs.srs-bandwidth-config,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSMaxUpPTS,device.services.fap-service.{i}.cell-config.lte.ran.phy.srs.srs-max-up-pts,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.AckNackSRSSimultaneousTransmission,device.services.fap-service.{i}.cell-config.lte.ran.phy.srs.ack-nack-srs-simultaneous-transmission,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.,device.services.fap-service.{i}.cell-config.lte.ran.phy.prach,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.RootSequenceIndex,device.services.fap-service.{i}.cell-config.lte.ran.phy.prach.root-sequence-index,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ConfigurationIndex,device.services.fap-service.{i}.cell-config.lte.ran.phy.prach.configuration-index,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.HighSpeedFlag,device.services.fap-service.{i}.cell-config.lte.ran.phy.prach.high-speed-flag,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ZeroCorrelationZoneConfig,device.services.fap-service.{i}.cell-config.lte.ran.phy.prach.zero-correlation-zone-config,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.FreqOffset,device.services.fap-service.{i}.cell-config.lte.ran.phy.prach.freq-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch.delta-pucch-shift,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NRBCQI,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch.nrbcqi,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NCSAN,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch.ncsan,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.N1PUCCHAN,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch.n1-pucchan,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.CQIPUCCHResourceIndex,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch.cqipucch-resource-index,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.K,device.services.fap-service.{i}.cell-config.lte.ran.phy.pucch.k,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.NSB,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.nsb,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.hopping-mode,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingOffset,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.hopping-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.Enable64QAM,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.enable64-qam,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.ulrs,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupHoppingEnabled,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.ulrs.group-hopping-enabled,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupAssignmentPUSCH,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.ulrs.group-assignment-pusch,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.SequenceHoppingEnabled,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.ulrs.sequence-hopping-enabled,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.CyclicShift,device.services.fap-service.{i}.cell-config.lte.ran.phy.pusch.ulrs.cyclic-shift,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUSCH,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.p0-nominal-pusch,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.Alpha,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.alpha,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUCCH,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.p0-nominal-pucch,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.delta-fpucch-format1,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1b,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.delta-fpucch-format1b,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.delta-fpucch-format2,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2a,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.delta-fpucch-format2a,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2b,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.delta-fpucch-format2b,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaPreambleMsg3,device.services.fap-service.{i}.cell-config.lte.ran.phy.ul-power-control.delta-preamble-msg3,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.NeighCellConfig,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.neigh-cell-config,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.MaxSFConfigListEntries,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.max-sf-config-list-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigListNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SyncStratumID,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.sync-stratum-id,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationPeriod,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.radio-frame-allocation-period,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioframeAllocationOffset,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.radioframe-allocation-offset,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationSize,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.radio-frame-allocation-size,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SubFrameAllocations,device.services.fap-service.{i}.cell-config.lte.ran.phy.mbsfn.sf-config-list.{i}.sub-frame-allocations,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.,device.services.fap-service.{i}.cell-config.lte.ran.phy.prs,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumPRSResourceBlocks,device.services.fap-service.{i}.cell-config.lte.ran.phy.prs.num-prs-resource-blocks,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.PRSConfigurationIndex,device.services.fap-service.{i}.cell-config.lte.ran.phy.prs.prs-configuration-index,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumConsecutivePRSSubfames,device.services.fap-service.{i}.cell-config.lte.ran.phy.prs.num-consecutive-prs-subfames,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.,device.services.fap-service.{i}.cell-config.lte.ran.phy.tdd-frame,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment,device.services.fap-service.{i}.cell-config.lte.ran.phy.tdd-frame.sub-frame-assignment,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns,device.services.fap-service.{i}.cell-config.lte.ran.phy.tdd-frame.special-subframe-patterns,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.,device.services.fap-service.{i}.cell-config.lte.ran.mac,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.NumberOfRaPreambles,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.number-of-ra-preambles,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.SizeOfRaGroupA,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.size-of-ra-group-a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessageSizeGroupA,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.message-size-group-a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessagePowerOffsetGroupB,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.message-power-offset-group-b,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PowerRampingStep,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.power-ramping-step,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleInitialReceivedTargetPower,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.preamble-initial-received-target-power,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleTransMax,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.preamble-trans-max,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ResponseWindowSize,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.response-window-size,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ContentionResolutionTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.contention-resolution-timer,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MaxHARQMsg3Tx,device.services.fap-service.{i}.cell-config.lte.ran.mac.rach.max-harq-msg3-tx,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXEnabled,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.drx-enabled,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.OnDurationTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.on-duration-timer,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXInactivityTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.drx-inactivity-timer,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXRetransmissionTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.drx-retransmission-timer,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.LongDRXCycle,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.long-drx-cycle,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXStartOffset,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.drx-start-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.ShortDRXCycle,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.short-drx-cycle,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXShortCycleTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.drx.drx-short-cycle-timer,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.,device.services.fap-service.{i}.cell-config.lte.ran.mac.ulsch,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.MaxHARQTx,device.services.fap-service.{i}.cell-config.lte.ran.mac.ulsch.max-harq-tx,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.PeriodicBSRTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.ulsch.periodic-bsr-timer,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.RetxBSRTimer,device.services.fap-service.{i}.cell-config.lte.ran.mac.ulsch.retx-bsr-timer,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.TTIBundling,device.services.fap-service.{i}.cell-config.lte.ran.mac.ulsch.tti-bundling,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.,device.services.fap-service.{i}.cell-config.lte.ran.rlc,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.DefaultConfiguration,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.default-configuration,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TPollRetransmit,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.t-poll-retransmit,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollPDU,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.poll-pdu,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollByte,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.poll-byte,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.MaxRetxThreshold,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.max-retx-threshold,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TReordering,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.t-reordering,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TStatusProhibit,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b1.t-status-prohibit,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.DefaultConfiguration,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.default-configuration,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TPollRetransmit,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.t-poll-retransmit,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollPDU,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.poll-pdu,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollByte,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.poll-byte,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.MaxRetxThreshold,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.max-retx-threshold,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TReordering,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.t-reordering,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TStatusProhibit,device.services.fap-service.{i}.cell-config.lte.ran.rlc.sr-b2.t-status-prohibit,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T300,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t300,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T301,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t301,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T302,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t302,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304EUTRA,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t304-eutra,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304IRAT,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t304-irat,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T310,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t310,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T311,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t311,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T320,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.t320,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N310,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.n310,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N311,device.services.fap-service.{i}.cell-config.lte.ran.rrc-timers.n311,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.,device.services.fap-service.{i}.cell-config.lte.ran.cell-restriction,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellBarred,device.services.fap-service.{i}.cell-config.lte.ran.cell-restriction.cell-barred,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellReservedForOperatorUse,device.services.fap-service.{i}.cell-config.lte.ran.cell-restriction.cell-reserved-for-operator-use,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.BarringForEmergency,device.services.fap-service.{i}.cell-config.lte.ran.cell-restriction.barring-for-emergency,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.,device.services.fap-service.{i}.cell-config.lte.ran.mobility,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.Qhyst,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.qhyst,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.q-hyst-sf-medium,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.q-hyst-sf-high,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.TEvaluation,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.t-evaluation,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.THystNormal,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.t-hyst-normal,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.n-cell-change-medium,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.common.n-cell-change-high,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB1,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.q-rx-lev-min-si-b1,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB3,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.q-rx-lev-min-si-b3,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinOffset,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.q-rx-lev-min-offset,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SIntraSearch,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.s-intra-search,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRA,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.t-reselection-eutra,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SNonIntraSearch,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.s-non-intra-search,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.CellReselectionPriority,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.cell-reselection-priority,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.PMax,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.p-max,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.ThreshServingLow,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.thresh-serving-low,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.t-reselection-eutrasf-medium,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.intra-freq.t-reselection-eutrasf-high,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.MaxCarrierEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.max-carrier-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.CarrierNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.EUTRACarrierARFCN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.eutra-carrier-arfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QRxLevMinSIB5,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.q-rx-lev-min-si-b5,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QOffsetFreq,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.q-offset-freq,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRA,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.t-reselection-eutra,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.CellReselectionPriority,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.cell-reselection-priority,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.thresh-x-high,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXLow,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.thresh-x-low,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.PMax,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.p-max,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.t-reselection-eutrasf-medium,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.inter-freq.carrier.{i}.t-reselection-eutrasf-high,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRA,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.t-reselection-utra,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.t-reselection-utrasf-medium,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.t-reselection-utrasf-high,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.MaxUTRANFDDFreqEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.max-utranfdd-freq-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreqNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.UTRACarrierARFCN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.utra-carrier-arfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QRxLevMin,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.q-rx-lev-min,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QQualMin,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.q-qual-min,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.CellReselectionPriority,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.cell-reselection-priority,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.thresh-x-high,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXLow,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.thresh-x-low,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.PMaxUTRA,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.utra.utranfdd-freq.{i}.p-max-utra,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERAN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.t-reselection-geran,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.t-reselection-geransf-medium,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.t-reselection-geransf-high,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.MaxGERANFreqGroupEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.max-geran-freq-group-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroupNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.band-indicator,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BCCHARFCN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.bccharfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.QRxLevMin,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.q-rx-lev-min,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.CellReselectionPriority,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.cell-reselection-priority,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.thresh-x-high,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXLow,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.geran.geran-freq-group.{i}.thresh-x-low,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.SearchWindowSize,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.search-window-size,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.t-reselection-cdma2000,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFMedium,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.t-reselection-cdma2000-sf-medium,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.t-reselection-cdma2000-sf-high,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.MaxCDMA2000BandEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.max-cdma2000-band-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000BandNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.BandClass,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.band-class,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.CellReselectionPriority,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.cell-reselection-priority,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXHigh,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.thresh-x-high,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXLow,device.services.fap-service.{i}.cell-config.lte.ran.mobility.idle-mode.irat.cdma2000.cdma2000-band.{i}.thresh-x-low,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.filter-coefficient-rsrp,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRQ,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.filter-coefficient-rsrq,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a1-threshold-rsrp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRQ,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a1-threshold-rsrq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a2-threshold-rsrp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRQ,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a2-threshold-rsrq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A3Offset,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a3-offset,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportOnLeave,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.report-on-leave,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a4-threshold-rsrp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRQ,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a4-threshold-rsrq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a5-threshold1-rsrp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRQ,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a5-threshold1-rsrq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a5-threshold2-rsrp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRQ,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.a5-threshold2-rsrq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.Hysteresis,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.hysteresis,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TimeToTrigger,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.time-to-trigger,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.trigger-quantity,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.report-quantity,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.MaxReportCells,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.max-report-cells,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportInterval,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.report-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportAmount,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.eutra.report-amount,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsettUTRA,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.qoffsett-utra,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientUTRA,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.filter-coefficient-utra,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.meas-quantity-utrafdd,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRARSCP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b1-threshold-utrarscp,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRAEcN0,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b1-threshold-utra-ec-n0,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetGERAN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.qoffset-geran,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientGERAN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.filter-coefficient-geran,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdGERAN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b1-threshold-geran,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetCDMA2000,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.qoffset-cdma2000,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.meas-quantity-cdma2000,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdCDMA2000,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b1-threshold-cdma2000,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRARSCP,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b2-threshold2-utrarscp,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRAEcN0,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b2-threshold2-utra-ec-n0,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2GERAN,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b2-threshold2-geran,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2CDMA2000,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.b2-threshold2-cdma2000,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.Hysteresis,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.hysteresis,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.TimeToTrigger,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.time-to-trigger,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MaxReportCells,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.max-report-cells,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportInterval,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.report-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportAmount,device.services.fap-service.{i}.cell-config.lte.ran.mobility.conn-mode.irat.report-amount,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.MaxLTECellEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.max-lte-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECellNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.MustInclude,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.cid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.EUTRACarrierARFCN,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.eutra-carrier-arfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PhyCellID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.phy-cell-id,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.QOffset,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.q-offset,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CIO,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.cio,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.RSTxPower,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.rs-tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Blacklisted,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.lte-cell.{i}.blacklisted,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxUMTSEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.max-umts-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxGSMEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.max-gsm-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxCDMA2000Entries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.max-cdma2000-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTSNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSMNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000NumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.MustInclude,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RNCID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.rncid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.CID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.cid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.LAC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.lac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RAC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.rac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.URA,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.ura,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNUL,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.uarfcnul,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNDL,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.uarfcndl,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHScramblingCode,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.pcpich-scrambling-code,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHTxPower,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.umts.{i}.pcpich-tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.plmnid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.LAC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.lac,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.bsic,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.CI,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.ci,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.band-indicator,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.gsm.{i}.bccharfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Alias,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.MustInclude,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.must-include,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.BandClass,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.band-class,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.ARFCN,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.arfcn,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.PNOffset,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.pn-offset,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.type,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.CID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list.inter-rat-cell.cdma2000.{i}.cid,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.MaxLTECellEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.max-lte-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECellNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.cid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.EUTRACarrierARFCN,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.eutra-carrier-arfcn,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PhyCellID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.phy-cell-id,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.QOffset,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.q-offset,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CIO,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.cio,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.RSTxPower,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.rs-tx-power,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.Blacklisted,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.lte-cell.{i}.blacklisted,Tabular-ReadOnly,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxUMTSEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.max-umts-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.max-gsm-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxCDMA2000Entries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.max-cdma2000-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTSNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000NumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RNCID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.rncid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.CID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.cid,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.LAC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.lac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RAC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.rac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.URA,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.ura,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNUL,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.uarfcnul,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNDL,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.uarfcndl,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHScramblingCode,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.pcpich-scrambling-code,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHTxPower,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.umts.{i}.pcpich-tx-power,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.lac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.bsic,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.ci,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.band-indicator,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.gsm.{i}.bccharfcn,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.BandClass,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000.{i}.band-class,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.ARFCN,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000.{i}.arfcn,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.PNOffset,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000.{i}.pn-offset,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000.{i}.type,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.CID,device.services.fap-service.{i}.cell-config.lte.ran.neighbor-list-in-use.inter-rat-cell.cdma2000.{i}.cid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CSG.,device.services.fap-service.{i}.cell-config.lte.ran.csg,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CSG.Stats.,device.services.fap-service.{i}.cell-config.lte.ran.csg.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CSG.Stats.MeanNbrUsr,device.services.fap-service.{i}.cell-config.lte.ran.csg.stats.mean-nbr-usr,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CSG.Stats.AttInboundMobility,device.services.fap-service.{i}.cell-config.lte.ran.csg.stats.att-inbound-mobility,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CSG.Stats.SuccInboundMobility,device.services.fap-service.{i}.cell-config.lte.ran.csg.stats.succ-inbound-mobility,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.CSG.Stats.FailedInboundMobility,device.services.fap-service.{i}.cell-config.lte.ran.csg.stats.failed-inbound-mobility,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRC.,device.services.fap-service.{i}.cell-config.lte.ran.rrc,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRC.Stats.,device.services.fap-service.{i}.cell-config.lte.ran.rrc.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRC.Stats.AttConnEstab,device.services.fap-service.{i}.cell-config.lte.ran.rrc.stats.att-conn-estab,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRC.Stats.FailConnEstab,device.services.fap-service.{i}.cell-config.lte.ran.rrc.stats.fail-conn-estab,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRC.Stats.SuccConnEstab,device.services.fap-service.{i}.cell-config.lte.ran.rrc.stats.succ-conn-estab,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.,device.services.fap-service.{i}.cell-config.lte.ran.erab,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.EstabInitAttNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.estab-init-att-nbr,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.EstabInitSuccNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.estab-init-succ-nbr,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.EstabInitFailNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.estab-init-fail-nbr,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.EstabAttNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.estab-att-nbr,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.EstabSuccNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.estab-succ-nbr,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.EstabFailNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.estab-fail-nbr,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.RelEnbNbrQCI,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.rel-enb-nbr-qci,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.RelEnbNbrCause,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.rel-enb-nbr-cause,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.LGWNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.lgw-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.LGW.{i}.,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.lgw.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.LGW.{i}.CorrelationID,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.lgw.{i}.correlation-id,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.LGW.{i}.EstabDirectPathLGWAttNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.lgw.{i}.estab-direct-path-lgw-att-nbr,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.LGW.{i}.EstabDirectPathLGWSuccNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.lgw.{i}.estab-direct-path-lgw-succ-nbr,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.ERAB.Stats.LGW.{i}.EstabDirectPathLGWFailNbr,device.services.fap-service.{i}.cell-config.lte.ran.erab.stats.lgw.{i}.estab-direct-path-lgw-fail-nbr,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.,device.services.fap-service.{i}.cell-config.lte.ran.drb,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduBitrateDl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-bitrate-dl,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduBitrateUl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-bitrate-ul,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduBitrateDlMax,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-bitrate-dl-max,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduBitrateUlMax,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-bitrate-ul-max,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduDelayDl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-delay-dl,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduDropRateDl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-drop-rate-dl,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduAirLossRateDl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-air-loss-rate-dl,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.PdcpSduLossRateUl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.pdcp-sdu-loss-rate-ul,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.UEActiveDl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.ue-active-dl,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.DRB.Stats.UEActiveUl,device.services.fap-service.{i}.cell-config.lte.ran.drb.stats.ue-active-ul,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRU.,device.services.fap-service.{i}.cell-config.lte.ran.rru,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRU.Stats.,device.services.fap-service.{i}.cell-config.lte.ran.rru.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRU.Stats.PrbTotDl,device.services.fap-service.{i}.cell-config.lte.ran.rru.stats.prb-tot-dl,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RRU.Stats.PrbTotUl,device.services.fap-service.{i}.cell-config.lte.ran.rru.stats.prb-tot-ul,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.,device.services.fap-service.{i}.cell-config.lte.energy-savings,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.Enable,device.services.fap-service.{i}.cell-config.lte.energy-savings.enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.State,device.services.fap-service.{i}.cell-config.lte.energy-savings.state,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.NotAllowedTimePeriodNumberOfEntries,device.services.fap-service.{i}.cell-config.lte.energy-savings.not-allowed-time-period-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.ActivationCandidateCellsLoad.,device.services.fap-service.{i}.cell-config.lte.energy-savings.activation-candidate-cells-load,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.ActivationCandidateCellsLoad.Threshold,device.services.fap-service.{i}.cell-config.lte.energy-savings.activation-candidate-cells-load.threshold,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.ActivationCandidateCellsLoad.TimeDuration,device.services.fap-service.{i}.cell-config.lte.energy-savings.activation-candidate-cells-load.time-duration,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.DeactivationCandidateCellsLoad.,device.services.fap-service.{i}.cell-config.lte.energy-savings.deactivation-candidate-cells-load,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.DeactivationCandidateCellsLoad.Threshold,device.services.fap-service.{i}.cell-config.lte.energy-savings.deactivation-candidate-cells-load.threshold,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.DeactivationCandidateCellsLoad.TimeDuration,device.services.fap-service.{i}.cell-config.lte.energy-savings.deactivation-candidate-cells-load.time-duration,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.NotAllowedTimePeriod.{i}.,device.services.fap-service.{i}.cell-config.lte.energy-savings.not-allowed-time-period.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.NotAllowedTimePeriod.{i}.Enable,device.services.fap-service.{i}.cell-config.lte.energy-savings.not-allowed-time-period.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.NotAllowedTimePeriod.{i}.StartTime,device.services.fap-service.{i}.cell-config.lte.energy-savings.not-allowed-time-period.{i}.start-time,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.NotAllowedTimePeriod.{i}.EndTime,device.services.fap-service.{i}.cell-config.lte.energy-savings.not-allowed-time-period.{i}.end-time,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.LTE.EnergySavings.NotAllowedTimePeriod.{i}.DaysOfWeek,device.services.fap-service.{i}.cell-config.lte.energy-savings.not-allowed-time-period.{i}.days-of-week,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.,device.services.fap-service.{i}.cell-config.cdma2000,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.TunnelInstance,device.services.fap-service.{i}.cell-config.cdma2000.tunnel-instance,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.,device.services.fap-service.{i}.cell-config.cdma2000.one-x,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSNNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.MaxBatchPCFPDSNEntries,device.services.fap-service.{i}.cell-config.cdma2000.one-x.max-batch-pcfpdsn-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSNNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorNID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.one-x-sector-nid,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorSID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.one-x-sector-sid,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXPZID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.one-xpzid,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.BaseID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.base-id,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.MaxNeighborListEntries,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.max-neighbor-list-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborListNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.rfcnfl,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLBandInUse,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.rfcnfl-band-in-use,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLInUse,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.rfcnfl-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.pilot-pn,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPNInUse,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.pilot-pn-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.max-fap-tx-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPowerInUse,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.max-fap-tx-power-in-use,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PchPwrPercentage,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.pch-pwr-percentage,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPwrPercentage,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.pilot-pwr-percentage,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.SyncPwrPercentage,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.rf.sync-pwr-percentage,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLMargin,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.rfcnfl-margin,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPCoverageTarget,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.fap-coverage-target,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPBeaconCoverageTarget,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.fap-beacon-coverage-target,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxCoverageEdgePilotStrength,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.max-coverage-edge-pilot-strength,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxAllowablePilotStrengthDegradation,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.max-allowable-pilot-strength-degradation,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLToProtect,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.rfcnfl-to-protect,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPAllowedAdjChanCoverageHole,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.fap-allowed-adj-chan-coverage-hole,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.ACIR,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.network-listen-mode-config.acir,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwr,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.nom-pwr,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.InitPwr,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.init-pwr,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStepIndb,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.pwr-step-indb,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwrExt,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.nom-pwr-ext,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMAuth,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.apm-auth,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMRandUpdatePrd,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.apm-rand-update-prd,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Initialpwr,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.initialpwr,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStep,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.pwr-step,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NumStep,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.num-step,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxCapSize,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.max-cap-size,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PreambleSize,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.preamble-size,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist09,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist09,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist10,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist10,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist11,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist11,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist12,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist12,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist13,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist13,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist14,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist14,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist15,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.psist15,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MsgPsist,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.msg-psist,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.RegPsist,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.reg-psist,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbePNRan,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.probe-pn-ran,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.AccTmo,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.acc-tmo,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbeBkoff,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.probe-bkoff,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Bkoff,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.bkoff,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxReqSeq,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.max-req-seq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxRspSeq,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.access-parameters.max-rsp-seq,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegZone,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.reg-zone,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TotalZones,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.total-zones,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.ZoneTimer,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.zone-timer,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegPeriod,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.reg-period,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinA,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.srch-win-a,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.srch-win-n,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinR,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.srch-win-r,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.NghbrMaxAge,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.nghbr-max-age,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepThresh,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.pwr-rep-thresh,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepFrames,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.pwr-rep-frames,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrThreshEnable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.pwr-thresh-enable,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrPeriodEnable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.pwr-period-enable,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepDelay,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.pwr-rep-delay,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Rescan,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.rescan,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tadd,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.tadd,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tdrop,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.tdrop,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tcomp,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.tcomp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TTdrop,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.t-tdrop,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTadd,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.in-traffic-tadd,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTdrop,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.in-traffic-tdrop,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTcomp,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.in-traffic-tcomp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTtdrop,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.system-parameters.in-traffic-ttdrop,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.Prev,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.prev,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PMinRev,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.p-min-rev,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DeleteForTMSI,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.delete-for-tmsi,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.UseTMSI,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.use-tmsi,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PrefMSIDType,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.pref-msid-type,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MCC,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.mcc,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSI1112,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.imsi1112,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZoneLen,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.tmsi-zone-len,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZone,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.tmsi-zone,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BcastIndex,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.bcast-index,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSITSupported,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.imsit-supported,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SoftSlope,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.soft-slope,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AddIntercept,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.add-intercept,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DropIntercept,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.drop-intercept,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumAltSo,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.max-num-alt-so,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.ReselectedIncluded,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.reselected-included,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcThresh,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.ec-thresh,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcIoThresh,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.ec-io-thresh,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PilotReport,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.pilot-report,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetEntryInfo,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.nghbr-set-entry-info,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOOrder,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.access-ho-order,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetAccessInfo,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.nghbr-set-access-info,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHO,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.access-ho,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOMsgRsp,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.access-ho-msg-rsp,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessProbeHO,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.access-probe-ho,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccHOListUpd,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.acc-ho-list-upd,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccProbeHOOtherMsg,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.acc-probe-ho-other-msg,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumProbeHO,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.max-num-probe-ho,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BrdcastGPSAssit,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.brdcast-gps-assit,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHSupported,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.qpch-supported,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NumQPCH,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.num-qpch,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHRate,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.qpch-rate,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelPage,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.qpch-pwr-level-page,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHcciSupported,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.qpc-hcci-supported,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelConfig,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.qpch-pwr-level-config,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SDBSupported,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.sdb-supported,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RLgainTrafficPilot,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.r-lgain-traffic-pilot,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelayIncl,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.rvs-pwr-ctrl-delay-incl,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelay,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.extended-system-parameters.rvs-pwr-ctrl-delay,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHInitSetpt,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr.fpcfch-init-setpt,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCSubchanGain,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr.fpc-subchan-gain,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.RLGainAdj,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr.rl-gain-adj,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHFER,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr.fpcfchfer,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMinSetpt,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr.fpcfch-min-setpt,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMaxSetpt,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.forward-pwr-ctr.fpcfch-max-setpt,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HandoutEnable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.handout-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotPowerThresh,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.ho-pilot-power-thresh,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotDuration,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.ho-pilot-duration,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHORequired,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.tx-ho-required,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOCommand,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.rx-ho-command,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredRejected,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.ho-required-rejected,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredUnanswered,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.ho-required-unanswered,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxUHDM,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.tx-uhdm,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxNSAck,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.rx-ns-ack,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HOFailureCount,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.ho-failure-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.CallDropCount,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.call-drop-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHOCommence,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.tx-ho-commence,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOSessionClear,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.rx-ho-session-clear,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ReturnOnFailureCount,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.return-on-failure-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.OnePilotReportCount,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.one-pilot-report-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TwoPilotReportCount,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.two-pilot-report-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ThreePilotReportCount,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.hard-handoff.stats.three-pilot-report-count,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCIncl,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpcfpc-incl,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMinSetpt,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpcfpcfch-min-setpt,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMaxSetpt,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpcfpcfch-max-setpt,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCRPCIncl,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpcrpc-incl,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFCHChanAdjGain,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpcfch-chan-adj-gain,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepThresh,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpc-pwr-rep-thresh,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepFrames,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpc-pwr-rep-frames,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPwrThreshEnable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-x-pwr-thresh-enable,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrPeriodEnable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpc-pwr-period-enable,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepDelay,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.power-control.one-xpc-pwr-rep-delay,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.PilotInc,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.pilot-inc,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIndex,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.one-x-neighbor-index,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.neighbor-config,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborPN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.neighbor-pn,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.search-priority,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.neighbor-band,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborFrequency,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.neighbor-frequency,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.FrequencyIncluded,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.frequency-included,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.InTraffic,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.in-traffic,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OverheadMsg,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.overhead-msg,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.BaseIdentifier,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.base-identifier,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.air-interface,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.HandOutCapable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.hand-out-capable,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLongitude,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.one-x-neighbor-longitude,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLatitude,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.one-x-neighbor-latitude,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborMSCId,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.one-x-neighbor-msc-id,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIOSCellId,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.one-x-neighbor-ios-cell-id,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.ForceInOverhead,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.force-in-overhead,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.IncludedInOverhead,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.neighbor-list.{i}.included-in-overhead,Tabular-ReadOnly,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.AssociationType,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.association-type,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDLEN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.apidlen,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.apid,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDMASK,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.apidmask,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSMSCID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.iosmscid,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSCELLID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.ioscellid,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYSINCL,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.intrafreqhohysincl,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.intrafreqhohys,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPEINCL,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.intrafreqhoslopeincl,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPE,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.intrafreqhoslope,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYSINCL,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.interfreqhohysincl,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.interfreqhohys,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPEINCL,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.interfreqhoslopeincl,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPE,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.interfreqhoslope,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTHINCL,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.interfreqsrchthincl,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTH,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidm.interfreqsrchth,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidtm,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARiLEN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidtm.apidtextcha-ri-len,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTMSGENCODING,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidtm.apidtextmsgencoding,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARi,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.apidtm.apidtextcha-ri,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.LIFETIME,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.lifetime,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.NUMAPPIREC,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.numappirec,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIRECNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APASSNTYPE,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apassntype,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSIDSAMEASPREVIOUS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apsidsameasprevious,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNIDSAMEASPREVIOUS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apnidsameasprevious,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBANDSAMEASPREVIOUS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apbandsameasprevious,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQSAMEASPREVIOUS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apfreqsameasprevious,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECSAMEASPREVIOUS,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.appnrecsameasprevious,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apsid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNID,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apnid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBAND,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apband,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQ,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.apfreq,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECTYPE,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.appnrectype,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECLEN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.appnreclen,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNREC,device.services.fap-service.{i}.cell-config.cdma2000.one-x.ran.appim.appirec.{i}.appnrec,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPDSNHealthMonitorInterval,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcfpdsn-health-monitor-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-no-reason,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-admin-prohibit,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-insuff-resources,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-failed-auth,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-id-mismatch,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-malformed-req,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-unknown-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-setup-failure-unsupp-vend-id,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-closed-by-rnc,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-closed-by-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-success-pages,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10FailedPages,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-failed-pages,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-ingress-bytes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-egress-bytes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.a10-reg-update-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcf-config.pcf-performance-stats.total-a10-dropped-pages,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableNumber,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-number,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableStartIPAddress,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-start-ip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableEndIPAddress,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-end-ip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-security-parameter-index,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecretKey,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-secret-key,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-ios-version,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.batch-table-pdsn-admin-status,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType,device.services.fap-service.{i}.cell-config.cdma2000.one-x.batch-pcfpdsn.{i}.pdsn-type,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNNumber,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pdsn-number,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityParameterIndex,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.security-parameter-index,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityKey,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.security-key,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.ios-version,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNadminStatus,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pds-nadmin-status,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNHealthStatus,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pdsn-health-status,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNIPAddress,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pdsnip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.pdsn-number-reg-update-perf,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.pdsnip-address-reg-update-perf,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-received-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-id-check-fail-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-auth-check-fail-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-for-unknown-psipdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-unspecified-reason-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-ppp-timeout-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-registration-timeout-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-pdsn-error-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-inter-pcf-handoff-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-inter-pdsn-handoff-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-pdsnoamp-intervention-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-accounting-error-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-user-failed-authentication-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-unknown-cause-code-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-without-reason-code-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a10-setup-attempts-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a10-setup-successes-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a10-setup-blocks-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-id-mismatch-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-unknown-pdsnpdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-no-reason-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-admin-prohibit-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-insuff-resources-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-failed-auth-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-malformed-req-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-unsupp-vend-id-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-reverse-tunnel-unavailable-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-unknown-error-code-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a10-reg-req-for-registration-retransmissions-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a10-reg-req-for-re-registration-retransmissions-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.a10-reg-req-for-release-retransmissions-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.pdsn-number-pdsn-perf,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf,device.services.fap-service.{i}.cell-config.cdma2000.one-x.pcfpdsn.{i}.pcfpdsn-stats.pds-nip-address-pdsn-perf,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationAttempts,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.registration-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationFails,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.registration-fails,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationsBlocked,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.registrations-blocked,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageAttempts,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.page-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageFails,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.page-fails,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallAttempts,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.voice-call-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallFailures,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.voice-call-failures,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsBlocked,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.voice-calls-blocked,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsDropped,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.voice-calls-dropped,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallAttempts,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.data-call-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallFailures,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.data-call-failures,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsBlocked,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.data-calls-blocked,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsDropped,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.data-calls-dropped,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageVoiceCall,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.average-voice-call,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageDataCall,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.average-data-call,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageSessionInSec,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.average-session-in-sec,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalVoiceCalls,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.total-voice-calls,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalDataCalls,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.total-data-calls,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdVoicePacketDropPercentage,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.fwd-voice-packet-drop-percentage,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevVoicePacketDropPercentage,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.rev-voice-packet-drop-percentage,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdAvgDataRate,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.fwd-avg-data-rate,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevAvgDataRate,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.rev-avg-data-rate,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexZeroToOneTransitions,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.bc-index-zero-to-one-transitions,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexOneToZeroTransitions,device.services.fap-service.{i}.cell-config.cdma2000.one-x.stats.bc-index-one-to-zero-transitions,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.,device.services.fap-service.{i}.cell-config.cdma2000.one-x.redirect,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectChannelNumber,device.services.fap-service.{i}.cell-config.cdma2000.one-x.redirect.redirect-channel-number,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectBandClass,device.services.fap-service.{i}.cell-config.cdma2000.one-x.redirect.redirect-band-class,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSNNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.MaxBatchPCFPDSNEntries,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.max-batch-pcfpdsn-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSNNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDCarBandClass,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.hrpd-car-band-class,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.rfcnfl,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFLInUse,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.rfcnfl-in-use,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.pilot-pn,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPNInUse,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.pilot-pn-in-use,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.max-fap-tx-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPowerInUse,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.max-fap-tx-power-in-use,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ControlChannelRate,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.control-channel-rate,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SyncCapsuleOffset,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.sync-capsule-offset,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabLength,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.rab-length,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabOffset,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.rab-offset,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SectorID,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.sector-id,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ColorCode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.color-code,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SubnetMaskLength,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.subnet-mask-length,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilenceDuration,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.hrpd-sec-el-reverse-link-silence-duration,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilencePeriod,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.hrpd-sec-el-reverse-link-silence-period,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.OpenLoopAdjust,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.open-loop-adjust,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeInitialAdjust,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.probe-initial-adjust,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeNumSteps,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.probe-num-steps,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbePowerStep,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.probe-power-step,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.APersistence,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.a-persistence,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RSSIRABThreshold,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.rssirab-threshold,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.LoadRABThreshold,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.load-rab-threshold,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ConnectionRateLimit,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.connection-rate-limit,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RfeRLBalanceRatio,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.ran.rf.rfe-rl-balance-ratio,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPDSNHealthMonitorInterval,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcfpdsn-health-monitor-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-no-reason,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-admin-prohibit,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-insuff-resources,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-failed-auth,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-id-mismatch,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-malformed-req,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-unknown-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-setup-failure-unsupp-vend-id,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-closed-by-rnc,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-closed-by-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-success-pages,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10FailedPages,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-failed-pages,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-ingress-bytes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-egress-bytes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.a10-reg-update-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcf-config.pcf-performance-stats.total-a10-dropped-pages,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableNumber,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-number,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableStartIPAddress,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-start-ip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableEndIPAddress,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-end-ip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-security-parameter-index,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecretKey,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-secret-key,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-ios-version,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.batch-table-pdsn-admin-status,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.PDSNType,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.batch-pcfpdsn.{i}.pdsn-type,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNNumber,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pdsn-number,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityParameterIndex,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.security-parameter-index,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityKey,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.security-key,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.ios-version,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNadminStatus,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pds-nadmin-status,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNHealthStatus,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pdsn-health-status,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNIPAddress,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pdsnip-address,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNNumberSessionUpdatePerf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.pdsn-number-session-update-perf,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNIPAddressSessionUpdatePerf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.pdsnip-address-session-update-perf,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateReceivedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-received-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateAcceptedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-accepted-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateExtendedAPIPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-extended-apipdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateForUnknownPSIPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-for-unknown-psipdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedIDCheckFailPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-id-check-fail-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedAuthCheckFailPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-auth-check-fail-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedReasonUnspecifiedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-reason-unspecified-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedPoorlyFormedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-poorly-formed-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedSessionParamsNotUpdatedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-session-params-not-updated-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedQoSProfileIdNotSupportedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-qo-s-profile-id-not-supported-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedInsufficientResourcesPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-insufficient-resources-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedHandoffInProgressPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-session-update-stats.a11-session-update-denied-handoff-in-progress-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.pdsn-number-reg-update-perf,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.pdsnip-address-reg-update-perf,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-received-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-id-check-fail-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-auth-check-fail-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-for-unknown-psipdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-unspecified-reason-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-ppp-timeout-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-registration-timeout-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-pdsn-error-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-inter-pcf-handoff-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-inter-pdsn-handoff-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-pdsnoamp-intervention-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-accounting-error-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-user-failed-authentication-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-unknown-cause-code-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.a11-reg-update-stats.a11-reg-update-without-reason-code-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNNumberAuxA10Perf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.pdsn-number-aux-a10-perf,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNIPAddressAuxA10Perf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.pdsnip-address-aux-a10-perf,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInFirstRegReqPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.aux-a10-connections-created-in-first-reg-req-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInSubsequentRegReqPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.aux-a10-connections-created-in-subsequent-reg-req-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10FwdIpFlowsCreatedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.aux-a10-fwd-ip-flows-created-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10RevIpFlowsCreatedPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.aux-a10-rev-ip-flows-created-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10IpFlowAccountingRegRequestsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.aux-a10-stats.aux-a10-ip-flow-accounting-reg-requests-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a10-setup-attempts-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a10-setup-successes-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a10-setup-blocks-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-id-mismatch-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-unknown-pdsnpdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-no-reason-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-admin-prohibit-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-insuff-resources-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-failed-auth-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-malformed-req-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-unsupp-vend-id-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-reverse-tunnel-unavailable-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a11-reg-req-denied-unknown-error-code-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a10-reg-req-for-registration-retransmissions-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a10-reg-req-for-re-registration-retransmissions-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.a10-reg-req-for-release-retransmissions-pdsn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.pdsn-number-pdsn-perf,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.pcfpdsn.{i}.pcfpdsn-stats.pds-nip-address-pdsn-perf,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.redirect,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectChannelNumber,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.redirect.redirect-channel-number,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectBandClass,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.redirect.redirect-band-class,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupAttempts,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-session-setup-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupSuccessful,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-session-setup-successful,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumCurrentSessionsEstablished,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-current-sessions-established,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPageMessagesToAt,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-page-messages-to-at,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPagesSucceeded,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-pages-succeeded,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnectionsOpened,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-connections-opened,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupsFailedToTermAuth,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-session-setups-failed-to-term-auth,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardRLPBytes,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-forward-rlp-bytes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumReverseRLPBytes,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-reverse-rlp-bytes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AverageSessionSetupTime,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.average-session-setup-time,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AveragePageSetupTime,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.average-page-setup-time,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnSetupsAborted,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-conn-setups-aborted,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardPreRLPDroppedPkts,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.call-control-stats.num-forward-pre-rlp-dropped-pkts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSubscriberProfileUpdatesRcvd,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-qo-s-subscriber-profile-updates-rcvd,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgRcvd,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-pdsnip-flow-updates-msg-rcvd,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgFailed,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-pdsnip-flow-updates-msg-failed,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsReceived,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-qo-s-setup-requests-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsAccepted,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-qo-s-setup-requests-accepted,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsRejected,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-qo-s-setup-requests-rejected,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsReceived,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-on-requests-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsAccepted,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-on-requests-accepted,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsRejected,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-on-requests-rejected,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsFailed,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-on-requests-failed,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOnMessagesSent,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-fwd-reservation-on-messages-sent,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOnMessagesSent,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-rev-reservation-on-messages-sent,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsReceived,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-off-requests-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsAccepted,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-off-requests-accepted,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsRejected,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-reservation-off-requests-rejected,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOffMessagesSent,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-fwd-reservation-off-messages-sent,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOffMessagesSent,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-rev-reservation-off-messages-sent,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSReleaseRequestsReceived,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-qo-s-release-requests-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumConnectionCloseInitiatedNoRANRsr,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.qo-s-stats.num-connection-close-initiated-no-ran-rsr,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageRequests,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-page-requests,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageRequests,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-page-requests,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupAttempts,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-connection-setup-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupAttempts,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-connection-setup-attempts,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupSuccess,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-connection-setup-success,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupSuccess,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-connection-setup-success,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNormalConnectionCloses,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-normal-connection-closes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNormalConnectionCloses,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-normal-connection-closes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumTotalConnectionCloses,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-total-connection-closes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumTotalConnectionCloses,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-total-connection-closes,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDrops,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-rf-related-drops,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDrops,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-rf-related-drops,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageResponses,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-page-responses,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageResponses,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-page-responses,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsRTCLost,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-rf-related-drops-rtc-lost,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsRTCLost,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-rf-related-drops-rtc-lost,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsNoFTC,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-rf-related-drops-no-ftc,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsNoFTC,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-rf-related-drops-no-ftc,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDrops,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-network-error-drops,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDrops,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-network-error-drops,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCInternal,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-network-error-drops-rnc-internal,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCInternal,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-network-error-drops-rnc-internal,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCExternal,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-network-error-drops-rnc-external,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCExternal,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-network-error-drops-rnc-external,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsA10SetupFail,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-network-error-drops-a10-setup-fail,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsA10SetupFail,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-network-error-drops-a10-setup-fail,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsSectorDown,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-misc-drops-sector-down,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsSectorDown,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-misc-drops-sector-down,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsInternalError,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-misc-drops-internal-error,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsInternalError,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-misc-drops-internal-error,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsStateMismatch,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-misc-drops-state-mismatch,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsStateMismatch,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-misc-drops-state-mismatch,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsDueToRLP,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.s-num-misc-drops-due-to-rlp,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsDueToRLP,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.rnc-sig-apps-stats.c-num-misc-drops-due-to-rlp,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-config,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.A12AccessAuthenticationEnable,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-config.a12-access-authentication-enable,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AnPppAuthenticationAttemptsByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.an-ppp-authentication-attempts-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RequestsSentFromNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-requests-sent-from-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RejectsReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-rejects-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AcceptsReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-accepts-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AccessChallengesReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-access-challenges-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RetransmitsSentFromNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-retransmits-sent-from-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TimeoutsEventsForNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-timeouts-events-for-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12MalformedresponseReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-malformedresponse-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12BadAuthenticatorReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-bad-authenticator-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownTypeReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-unknown-type-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownPktReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-unknown-pkt-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownServerReceivedByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-unknown-server-received-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12OtherFailureOccurencesInNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-other-failure-occurences-in-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12ByPassNumAtsWithUnknownMfrCodeByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-by-pass-num-ats-with-unknown-mfr-code-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToAnPppErrorByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-tx-path-fail-due-to-an-ppp-error-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoServerAvailableByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-tx-path-fail-due-to-no-server-available-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToInternalErrorByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-tx-path-fail-due-to-internal-error-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoPacketIdAvailableByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-tx-path-fail-due-to-no-packet-id-available-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToTransmitErrorByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-tx-path-fail-due-to-transmit-error-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SvrTimeoutsForNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-svr-timeouts-for-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassLcpTimeoutByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-enh-ta-bypass-lcp-timeout-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapTimeoutByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-enh-ta-bypass-chap-timeout-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapInvalidByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-enh-ta-bypass-chap-invalid-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapNaiMatchesA12BypassListByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-enh-ta-bypass-chap-nai-matches-a12-bypass-list-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SessionTaTimeoutByNode,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.a12-session-ta-timeout-by-node,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthFailedDueToSessionCloseTotal,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.access-auth-failed-due-to-session-close-total,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthSucceeded,device.services.fap-service.{i}.cell-config.cdma2000.hrpd.access-auth-stats.access-auth-succeeded,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.,device.services.fap-service.{i}.cell-config.cdma2000.beacon,ScalarObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-admin-status,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-oper-status,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconEnable,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.Period,device.services.fap-service.{i}.cell-config.cdma2000.beacon.period,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower,device.services.fap-service.{i}.cell-config.cdma2000.beacon.max-fap-beacon-tx-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPowerInUse,device.services.fap-service.{i}.cell-config.cdma2000.beacon.max-fap-beacon-tx-power-in-use,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPchPwrPercentage,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-pch-pwr-percentage,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower,device.services.fap-service.{i}.cell-config.cdma2000.beacon.max-hrpd-beacon-tx-power,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPowerInUse,device.services.fap-service.{i}.cell-config.cdma2000.beacon.max-hrpd-beacon-tx-power-in-use,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPilotPwrPercentage,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-pilot-pwr-percentage,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconSyncPwrPercentage,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-sync-pwr-percentage,Scalar-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxBeaconListEntries,device.services.fap-service.{i}.cell-config.cdma2000.beacon.max-beacon-list-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconListNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconListEntries,device.services.fap-service.{i}.cell-config.cdma2000.beacon.max-hrpd-beacon-list-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconListNumberOfEntries,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconIndex,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-index,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Offset,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.offset,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Duration,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.duration,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.transmission-format,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconBandClass,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-band-class,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconChannelFreq,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-channel-freq,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPNOffset,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-pn-offset,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TxPower,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconSID,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-sid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconNID,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-nid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPZID,device.services.fap-service.{i}.cell-config.cdma2000.beacon.beacon-list.{i}.beacon-pzid,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Enable,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Alias,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconIndex,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.beacon-index,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.CCoffset,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.c-coffset,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Offset,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.offset,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Duration,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.duration,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.NumCCcycles,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.num-c-ccycles,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconBandClass,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.beacon-band-class,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconChannelFreq,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.beacon-channel-freq,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconPNOffset,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.beacon-pn-offset,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.TxPower,device.services.fap-service.{i}.cell-config.cdma2000.beacon.hrpd-beacon-list.{i}.tx-power,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.REM.,device.services.fap-service.{i}.rem,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.,device.services.fap-service.{i}.rem.umts,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.,device.services.fap-service.{i}.rem.umts.wcdma,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling,device.services.fap-service.{i}.rem.umts.wcdma.in-service-handling,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.ScanOnBoot,device.services.fap-service.{i}.rem.umts.wcdma.scan-on-boot,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.ScanPeriodically,device.services.fap-service.{i}.rem.umts.wcdma.scan-periodically,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.PeriodicInterval,device.services.fap-service.{i}.rem.umts.wcdma.periodic-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.PeriodicTime,device.services.fap-service.{i}.rem.umts.wcdma.periodic-time,Scalar-ReadWrite,dateTime
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.REMPLMNList,device.services.fap-service.{i}.rem.umts.wcdma.remplmn-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.REMBandList,device.services.fap-service.{i}.rem.umts.wcdma.rem-band-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.UARFCNDLList,device.services.fap-service.{i}.rem.umts.wcdma.uarfcndl-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.ScanTimeout,device.services.fap-service.{i}.rem.umts.wcdma.scan-timeout,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.ScanStatus,device.services.fap-service.{i}.rem.umts.wcdma.scan-status,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.ErrorDetails,device.services.fap-service.{i}.rem.umts.wcdma.error-details,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.LastScanTime,device.services.fap-service.{i}.rem.umts.wcdma.last-scan-time,Scalar-ReadOnly,dateTime
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.MaxCellEntries,device.services.fap-service.{i}.rem.umts.wcdma.max-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.CellNumberOfEntries,device.services.fap-service.{i}.rem.umts.wcdma.cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.rf,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.UARFCNDL,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.rf.uarfcndl,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHRSCP,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.rf.cpichrscp,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHEcNo,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.rf.cpich-ec-no,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.RSSI,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.rf.rssi,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.PrimaryScramblingCode,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.rf.primary-scrambling-code,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.plmn-type,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNID,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.plmnid,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.LAC,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.lac,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.RAC,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.rac,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CellID,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.cell-id,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PCPICHTxPower,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.pcpich-tx-power,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGIndicator,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.csg-indicator,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGID,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.csgid,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.UARFCNDLList,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.uarfcndl-list,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.csgpsc-split-info,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.StartPSCRange1Coefficient,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.csgpsc-split-info.start-psc-range1-coefficient,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.csgpsc-split-info.number-of-ps-cs,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.PSCRange2Offset,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.csgpsc-split-info.psc-range2-offset,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Latitude,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position.latitude,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Longitude,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position.longitude,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMajor,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position.uncertainty-semi-major,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMinor,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position.uncertainty-semi-minor,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.OrientationOfMajorAxis,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position.orientation-of-major-axis,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Confidence,device.services.fap-service.{i}.rem.umts.wcdma.cell.{i}.bcch.reference-position.confidence,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.,device.services.fap-service.{i}.rem.umts.gsm,ScalarObject,object
+Device.Services.FAPService.{i}.REM.UMTS.GSM.InServiceHandling,device.services.fap-service.{i}.rem.umts.gsm.in-service-handling,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.ScanOnBoot,device.services.fap-service.{i}.rem.umts.gsm.scan-on-boot,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.UMTS.GSM.ScanPeriodically,device.services.fap-service.{i}.rem.umts.gsm.scan-periodically,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.UMTS.GSM.PeriodicInterval,device.services.fap-service.{i}.rem.umts.gsm.periodic-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.PeriodicTime,device.services.fap-service.{i}.rem.umts.gsm.periodic-time,Scalar-ReadWrite,dateTime
+Device.Services.FAPService.{i}.REM.UMTS.GSM.REMPLMNList,device.services.fap-service.{i}.rem.umts.gsm.remplmn-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.REMBandList,device.services.fap-service.{i}.rem.umts.gsm.rem-band-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.ARFCNList,device.services.fap-service.{i}.rem.umts.gsm.arfcn-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.ScanTimeout,device.services.fap-service.{i}.rem.umts.gsm.scan-timeout,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.ScanStatus,device.services.fap-service.{i}.rem.umts.gsm.scan-status,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.ErrorDetails,device.services.fap-service.{i}.rem.umts.gsm.error-details,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.LastScanTime,device.services.fap-service.{i}.rem.umts.gsm.last-scan-time,Scalar-ReadOnly,dateTime
+Device.Services.FAPService.{i}.REM.UMTS.GSM.MaxCellEntries,device.services.fap-service.{i}.rem.umts.gsm.max-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.CellNumberOfEntries,device.services.fap-service.{i}.rem.umts.gsm.cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.band-indicator,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.ARFCN,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.arfcn,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BSIC,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.bsic,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.PLMNID,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.LAC,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.lac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RAC,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.rac,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.CI,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.ci,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RSSI,device.services.fap-service.{i}.rem.umts.gsm.cell.{i}.rssi,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.REM.LTE.,device.services.fap-service.{i}.rem.lte,ScalarObject,object
+Device.Services.FAPService.{i}.REM.LTE.InServiceHandling,device.services.fap-service.{i}.rem.lte.in-service-handling,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.LTE.ScanOnBoot,device.services.fap-service.{i}.rem.lte.scan-on-boot,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.LTE.ScanPeriodically,device.services.fap-service.{i}.rem.lte.scan-periodically,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.LTE.PeriodicInterval,device.services.fap-service.{i}.rem.lte.periodic-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.PeriodicTime,device.services.fap-service.{i}.rem.lte.periodic-time,Scalar-ReadWrite,dateTime
+Device.Services.FAPService.{i}.REM.LTE.REMPLMNList,device.services.fap-service.{i}.rem.lte.remplmn-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.LTE.REMBandList,device.services.fap-service.{i}.rem.lte.rem-band-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.LTE.EUTRACarrierARFCNDLList,device.services.fap-service.{i}.rem.lte.eutra-carrier-arfcndl-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.LTE.ScanTimeout,device.services.fap-service.{i}.rem.lte.scan-timeout,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.ScanStatus,device.services.fap-service.{i}.rem.lte.scan-status,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.LTE.ErrorDetails,device.services.fap-service.{i}.rem.lte.error-details,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.LTE.LastScanTime,device.services.fap-service.{i}.rem.lte.last-scan-time,Scalar-ReadOnly,dateTime
+Device.Services.FAPService.{i}.REM.LTE.MaxCellEntries,device.services.fap-service.{i}.rem.lte.max-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.CellNumberOfEntries,device.services.fap-service.{i}.rem.lte.cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.MaxCarrierMeasEntries,device.services.fap-service.{i}.rem.lte.max-carrier-meas-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeasNumberOfEntries,device.services.fap-service.{i}.rem.lte.carrier-meas-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.,device.services.fap-service.{i}.rem.lte.cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.RF.,device.services.fap-service.{i}.rem.lte.cell.{i}.rf,ScalarObject,object
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.RF.EUTRACarrierARFCN,device.services.fap-service.{i}.rem.lte.cell.{i}.rf.eutra-carrier-arfcn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.RF.PhyCellID,device.services.fap-service.{i}.rem.lte.cell.{i}.rf.phy-cell-id,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRP,device.services.fap-service.{i}.rem.lte.cell.{i}.rf.rsrp,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRQ,device.services.fap-service.{i}.rem.lte.cell.{i}.rf.rsrq,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.RF.RSSI,device.services.fap-service.{i}.rem.lte.cell.{i}.rf.rssi,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch,ScalarObject,object
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.DLBandwidth,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.dl-bandwidth,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.ULBandwidth,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.ul-bandwidth,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.RSTxPower,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.rs-tx-power,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.TAC,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.tac,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellID,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.cell-id,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellBarred,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.cell-barred,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIndication,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.csg-indication,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIdentity,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.csg-identity,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.MaxPLMNListEntries,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.max-plmn-list-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNListNumberOfEntries,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.plmn-list-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.plmn-list.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.PLMNID,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.plmn-list.{i}.plmnid,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.CellReservedForOperatorUse,device.services.fap-service.{i}.rem.lte.cell.{i}.bcch.plmn-list.{i}.cell-reserved-for-operator-use,Tabular-ReadOnly,boolean
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeas.{i}.,device.services.fap-service.{i}.rem.lte.carrier-meas.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeas.{i}.Enable,device.services.fap-service.{i}.rem.lte.carrier-meas.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeas.{i}.Alias,device.services.fap-service.{i}.rem.lte.carrier-meas.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierARFCNDL,device.services.fap-service.{i}.rem.lte.carrier-meas.{i}.carrier-arfcndl,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierChWidth,device.services.fap-service.{i}.rem.lte.carrier-meas.{i}.carrier-ch-width,Tabular-ReadWrite,int
+Device.Services.FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierRSSI,device.services.fap-service.{i}.rem.lte.carrier-meas.{i}.carrier-rssi,Tabular-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.,device.services.fap-service.{i}.rem.cdma2000,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.InServiceHandling,device.services.fap-service.{i}.rem.cdma2000.in-service-handling,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.ScanOnBoot,device.services.fap-service.{i}.rem.cdma2000.scan-on-boot,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.ScanNow,device.services.fap-service.{i}.rem.cdma2000.scan-now,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.ReturnTimer,device.services.fap-service.{i}.rem.cdma2000.return-timer,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.ScanPeriodically,device.services.fap-service.{i}.rem.cdma2000.scan-periodically,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.PeriodicInterval,device.services.fap-service.{i}.rem.cdma2000.periodic-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.PeriodicTime,device.services.fap-service.{i}.rem.cdma2000.periodic-time,Scalar-ReadWrite,dateTime
+Device.Services.FAPService.{i}.REM.CDMA2000.ReportOverheads,device.services.fap-service.{i}.rem.cdma2000.report-overheads,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.ScanTimeout,device.services.fap-service.{i}.rem.cdma2000.scan-timeout,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.ScanStatus,device.services.fap-service.{i}.rem.cdma2000.scan-status,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.CDMA2000.ErrorDetails,device.services.fap-service.{i}.rem.cdma2000.error-details,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.CDMA2000.LastScanTime,device.services.fap-service.{i}.rem.cdma2000.last-scan-time,Scalar-ReadOnly,dateTime
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.,device.services.fap-service.{i}.rem.cdma2000.one-x,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.MaxCellEntries,device.services.fap-service.{i}.rem.cdma2000.one-x.max-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.CellNumberOfEntries,device.services.fap-service.{i}.rem.cdma2000.one-x.cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.MaxChannelEntries,device.services.fap-service.{i}.rem.cdma2000.one-x.max-channel-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.ChannelNumberOfEntries,device.services.fap-service.{i}.rem.cdma2000.one-x.channel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.,device.services.fap-service.{i}.rem.cdma2000.one-x.channel.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Enable,device.services.fap-service.{i}.rem.cdma2000.one-x.channel.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Alias,device.services.fap-service.{i}.rem.cdma2000.one-x.channel.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingBandClass,device.services.fap-service.{i}.rem.cdma2000.one-x.channel.{i}.sniffing-band-class,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingChannelNumber,device.services.fap-service.{i}.rem.cdma2000.one-x.channel.{i}.sniffing-channel-number,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.PNList,device.services.fap-service.{i}.rem.cdma2000.one-x.channel.{i}.pn-list,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Band,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.band,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.RFCNFL,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.rfcnfl,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Io,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.io,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPN,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.p-ilot-pn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPNPhase,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.p-ilot-pn-phase,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcp,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.pilot-strength-ecp,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcpIo,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.pilot-strength-ecp-io,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.OverheadsAvailable,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.rf.overheads-available,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.SID,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.sid,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.NID,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.nid,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.REGZONE,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.regzone,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELAT,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.baselat,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELONG,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.baselong,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MCC,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.mcc,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MNCIMSI1112,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.mncimsi1112,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASEID,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.baseid,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APID,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.apid,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDMASK,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.apidmask,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDTEXT,device.services.fap-service.{i}.rem.cdma2000.one-x.cell.{i}.control-channel.apidtext,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.,device.services.fap-service.{i}.rem.cdma2000.hrpd,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.MaxCellEntries,device.services.fap-service.{i}.rem.cdma2000.hrpd.max-cell-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.CellNumberOfEntries,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.MaxChannelEntries,device.services.fap-service.{i}.rem.cdma2000.hrpd.max-channel-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.ChannelNumberOfEntries,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Enable,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Alias,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingBandClass,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel.{i}.sniffing-band-class,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingChannelNumber,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel.{i}.sniffing-channel-number,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.PNList,device.services.fap-service.{i}.rem.cdma2000.hrpd.channel.{i}.pn-list,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Band,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.band,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.RFCNFL,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.rfcnfl,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Io,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.io,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPN,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.p-ilot-pn,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPNPhase,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.p-ilot-pn-phase,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcp,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.pilot-strength-ecp,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcpIo,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.pilot-strength-ecp-io,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.OverheadsAvailable,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.rf.overheads-available,Scalar-ReadOnly,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.ColorCode,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel.color-code,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SectorID,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel.sector-id,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SubnetMask,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel.subnet-mask,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.CountryCode,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel.country-code,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Latitude,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel.latitude,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Longitude,device.services.fap-service.{i}.rem.cdma2000.hrpd.cell.{i}.control-channel.longitude,Scalar-ReadOnly,int
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.,device.services.fap-service.{i}.rem.cdma2000.macro-timing,ScalarObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.AdminState,device.services.fap-service.{i}.rem.cdma2000.macro-timing.admin-state,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingChannelNumber,device.services.fap-service.{i}.rem.cdma2000.macro-timing.tracking-channel-number,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingBandClass,device.services.fap-service.{i}.rem.cdma2000.macro-timing.tracking-band-class,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingPNOffset,device.services.fap-service.{i}.rem.cdma2000.macro-timing.tracking-pn-offset,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.TimingSource,device.services.fap-service.{i}.rem.cdma2000.macro-timing.timing-source,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.ChannelNumberOfEntries,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Enable,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Alias,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.alias,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.AirInterfaceType,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.air-interface-type,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.BandClass,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.band-class,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.ChannelNumber,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.channel-number,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Priority,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.priority,Tabular-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.PNList,device.services.fap-service.{i}.rem.cdma2000.macro-timing.channel.{i}.pn-list,Tabular-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.,device.services.fap-service.{i}.transport,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.SIP.,device.services.fap-service.{i}.transport.sip,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.SIP.Enable,device.services.fap-service.{i}.transport.sip.enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.Transport.SIP.FCS.,device.services.fap-service.{i}.transport.sip.fcs,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.SIP.FCS.FCSURI,device.services.fap-service.{i}.transport.sip.fcs.fcsuri,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.OutGoingProxyURI,device.services.fap-service.{i}.transport.sip.fcs.out-going-proxy-uri,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.PAccessNetInfoHeader,device.services.fap-service.{i}.transport.sip.fcs.p-access-net-info-header,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.Realm,device.services.fap-service.{i}.transport.sip.fcs.realm,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.IMPU,device.services.fap-service.{i}.transport.sip.fcs.impu,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.IMPI,device.services.fap-service.{i}.transport.sip.fcs.impi,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.SIPPassword,device.services.fap-service.{i}.transport.sip.fcs.sip-password,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability,device.services.fap-service.{i}.transport.sip.fcs.sip-auth-capability,Scalar-ReadOnly,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.SIPAuthMethod,device.services.fap-service.{i}.transport.sip.fcs.sip-auth-method,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.SIPLocalPort,device.services.fap-service.{i}.transport.sip.fcs.sip-local-port,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.RTPPortLowLimit,device.services.fap-service.{i}.transport.sip.fcs.rtp-port-low-limit,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.RTPPortHighLimit,device.services.fap-service.{i}.transport.sip.fcs.rtp-port-high-limit,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.SIPRegExpiry,device.services.fap-service.{i}.transport.sip.fcs.sip-reg-expiry,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.SIPSessionExpiry,device.services.fap-service.{i}.transport.sip.fcs.sip-session-expiry,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.EmergencyNumbersList,device.services.fap-service.{i}.transport.sip.fcs.emergency-numbers-list,Scalar-ReadWrite,string
+Device.Services.FAPService.{i}.Transport.SIP.FCS.TimerT1,device.services.fap-service.{i}.transport.sip.fcs.timer-t1,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.TimerT2,device.services.fap-service.{i}.transport.sip.fcs.timer-t2,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.TimerT4,device.services.fap-service.{i}.transport.sip.fcs.timer-t4,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SIP.FCS.T3210,device.services.fap-service.{i}.transport.sip.fcs.t3210,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.,device.services.fap-service.{i}.transport.sctp,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.SCTP.Enable,device.services.fap-service.{i}.transport.sctp.enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.Transport.SCTP.HBInterval,device.services.fap-service.{i}.transport.sctp.hb-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.MaxAssociationRetransmits,device.services.fap-service.{i}.transport.sctp.max-association-retransmits,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.MaxInitRetransmits,device.services.fap-service.{i}.transport.sctp.max-init-retransmits,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.MaxPathRetransmits,device.services.fap-service.{i}.transport.sctp.max-path-retransmits,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.RTOInitial,device.services.fap-service.{i}.transport.sctp.rto-initial,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.RTOMax,device.services.fap-service.{i}.transport.sctp.rto-max,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.RTOMin,device.services.fap-service.{i}.transport.sctp.rto-min,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.ValCookieLife,device.services.fap-service.{i}.transport.sctp.val-cookie-life,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.OutOfBlues,device.services.fap-service.{i}.transport.sctp.out-of-blues,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.ChecksumErrors,device.services.fap-service.{i}.transport.sctp.checksum-errors,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.OutCtrlChunks,device.services.fap-service.{i}.transport.sctp.out-ctrl-chunks,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.OutOrderChunks,device.services.fap-service.{i}.transport.sctp.out-order-chunks,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.OutUnorderChunks,device.services.fap-service.{i}.transport.sctp.out-unorder-chunks,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.InCtrlChunks,device.services.fap-service.{i}.transport.sctp.in-ctrl-chunks,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.InOrderChunks,device.services.fap-service.{i}.transport.sctp.in-order-chunks,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.InUnorderChunks,device.services.fap-service.{i}.transport.sctp.in-unorder-chunks,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.FragUsrMsgs,device.services.fap-service.{i}.transport.sctp.frag-usr-msgs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.ReasmUsrMsgs,device.services.fap-service.{i}.transport.sctp.reasm-usr-msgs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.OutSCTPPacks,device.services.fap-service.{i}.transport.sctp.out-sctp-packs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.InSCTPPacks,device.services.fap-service.{i}.transport.sctp.in-sctp-packs,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.Discontinuity,device.services.fap-service.{i}.transport.sctp.discontinuity,Scalar-ReadOnly,dateTime
+Device.Services.FAPService.{i}.Transport.SCTP.AssocNumberOfEntries,device.services.fap-service.{i}.transport.sctp.assoc-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.,device.services.fap-service.{i}.transport.sctp.assoc.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.Status,device.services.fap-service.{i}.transport.sctp.assoc.{i}.status,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.PrimaryPeerAddress,device.services.fap-service.{i}.transport.sctp.assoc.{i}.primary-peer-address,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.LocalPort,device.services.fap-service.{i}.transport.sctp.assoc.{i}.local-port,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.InStreams,device.services.fap-service.{i}.transport.sctp.assoc.{i}.in-streams,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.OutStreams,device.services.fap-service.{i}.transport.sctp.assoc.{i}.out-streams,Tabular-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.StartTime,device.services.fap-service.{i}.transport.sctp.assoc.{i}.start-time,Tabular-ReadOnly,dateTime
+Device.Services.FAPService.{i}.Transport.SCTP.Assoc.{i}.Discontinuity,device.services.fap-service.{i}.transport.sctp.assoc.{i}.discontinuity,Tabular-ReadOnly,dateTime
+Device.Services.FAPService.{i}.Transport.RealTime.,device.services.fap-service.{i}.transport.real-time,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.RealTime.RTCPEnable,device.services.fap-service.{i}.transport.real-time.rtcp-enable,Scalar-ReadWrite,boolean
+Device.Services.FAPService.{i}.Transport.RealTime.SentPackets,device.services.fap-service.{i}.transport.real-time.sent-packets,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.RcvPackets,device.services.fap-service.{i}.transport.real-time.rcv-packets,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.BytesSent,device.services.fap-service.{i}.transport.real-time.bytes-sent,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.BytesReceived,device.services.fap-service.{i}.transport.real-time.bytes-received,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.,device.services.fap-service.{i}.transport.real-time.perf,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.LostRcvPackets,device.services.fap-service.{i}.transport.real-time.perf.lost-rcv-packets,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.LostFarEndPackets,device.services.fap-service.{i}.transport.real-time.perf.lost-far-end-packets,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.Overruns,device.services.fap-service.{i}.transport.real-time.perf.overruns,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.Underruns,device.services.fap-service.{i}.transport.real-time.perf.underruns,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.MeanRTT,device.services.fap-service.{i}.transport.real-time.perf.mean-rtt,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.MaxRTT,device.services.fap-service.{i}.transport.real-time.perf.max-rtt,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.MeanReceiveJitter,device.services.fap-service.{i}.transport.real-time.perf.mean-receive-jitter,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.MaxReceiveJitter,device.services.fap-service.{i}.transport.real-time.perf.max-receive-jitter,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.MeanFarEndJitter,device.services.fap-service.{i}.transport.real-time.perf.mean-far-end-jitter,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.RealTime.Perf.MaxFarEndJitter,device.services.fap-service.{i}.transport.real-time.perf.max-far-end-jitter,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.Packet.,device.services.fap-service.{i}.transport.packet,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.Packet.EchoInterval,device.services.fap-service.{i}.transport.packet.echo-interval,Scalar-ReadWrite,unsignedInt
+Device.Services.FAPService.{i}.Transport.Packet.SentPackets,device.services.fap-service.{i}.transport.packet.sent-packets,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.Packet.RcvPackets,device.services.fap-service.{i}.transport.packet.rcv-packets,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.Security.,device.services.fap-service.{i}.transport.security,ScalarObject,object
+Device.Services.FAPService.{i}.Transport.Security.SecretNumberOfEntries,device.services.fap-service.{i}.transport.security.secret-number-of-entries,Scalar-ReadOnly,unsignedInt
+Device.Services.FAPService.{i}.Transport.Security.Secret.{i}.,device.services.fap-service.{i}.transport.security.secret.{i}.,TabularObject,object
+Device.Services.FAPService.{i}.Transport.Security.Secret.{i}.Enable,device.services.fap-service.{i}.transport.security.secret.{i}.enable,Tabular-ReadWrite,boolean
+Device.Services.FAPService.{i}.Transport.Security.Secret.{i}.Type,device.services.fap-service.{i}.transport.security.secret.{i}.type,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.Transport.Security.Secret.{i}.Status,device.services.fap-service.{i}.transport.security.secret.{i}.status,Tabular-ReadOnly,string
+Device.Services.FAPService.{i}.Transport.Security.Secret.{i}.UICCCardID,device.services.fap-service.{i}.transport.security.secret.{i}.uicc-card-id,Tabular-ReadOnly,string
diff --git a/mapper/onecell-mo-metadata.json b/mapper/onecell-mo-metadata.json
new file mode 100644 (file)
index 0000000..c780436
--- /dev/null
@@ -0,0 +1,182 @@
+{ \r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.RootSequenceIndex":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.DeviceInfo.ManufacturerOUI":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.EARFCNDLInUse":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":true\r
+   },\r
+   "Device.DeviceInfo.SerialNumber":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.Common.CellIdentity":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":false\r
+   },\r
+   "Device.DeviceInfo.UpTime":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":true\r
+   },\r
+   "Device.Time.LocalTimeZone":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.ULBandwidth":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.PMaxInUse":{ \r
+      "dataType":"int",\r
+      "readOnly":true\r
+   },\r
+   "Device.DeviceInfo.ProductClass":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.RootSequenceIndexInUse":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.FAPControl.LTE.OpState":{ \r
+      "dataType":"boolean",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkServerList":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.FAPControl.LTE.AdminState":{ \r
+      "dataType":"boolean",\r
+      "readOnly":false\r
+   },\r
+   "Device.DeviceInfo.SoftwareVersion":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.PhyCellIDInUse":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Alias":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.PhyCellID":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.TACInUse":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Enable":{ \r
+      "dataType":"boolean",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.TACList":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.FAPControl.LTE.RFTxStatus":{ \r
+      "dataType":"boolean",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.DLBandwidth":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer1":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.RSTxPowerInUse":{ \r
+      "dataType":"int",\r
+      "readOnly":true\r
+   },\r
+   "Device.DeviceInfo.Manufacturer":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNDL":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNUL":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.Services.FAPService.{i}.X_0005B9_LTE.PreambleRACHTxPwrInUse":{ \r
+      "dataType":"int",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.PLMNID":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.DeviceInfo.HardwareVersion":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.Services.FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.IsPrimary":{ \r
+      "dataType":"boolean",\r
+      "readOnly":false\r
+   },\r
+   "Device.IPsec.Enable":{ \r
+      "dataType":"boolean",\r
+      "readOnly":false\r
+   },\r
+   "Device.IPsec.Status":{ \r
+      "dataType":"string",\r
+      "readOnly":true\r
+   },\r
+   "Device.FAP.X_0005B9_RPLogManagement.TransferLogsToController":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.Password":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.ServerURL":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.Username":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.Enable":{ \r
+      "dataType":"boolean",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.IncludeRadioPointLog":{ \r
+      "dataType":"boolean",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.FileName":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.TransferWindowDuration":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.TransferWindowInterval":{ \r
+      "dataType":"unsignedInt",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.TransferWindowStartTime":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   },\r
+   "Device.FAP.X_0005B9_FileTransfer.FileDetails.{i}.LocationOnServer":{ \r
+      "dataType":"string",\r
+      "readOnly":false\r
+   }\r
+}
\ No newline at end of file
diff --git a/mapper/pom.xml b/mapper/pom.xml
new file mode 100644 (file)
index 0000000..e0fad64
--- /dev/null
@@ -0,0 +1,238 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter.mapper</groupId>\r
+   <artifactId>mapper</artifactId>\r
+   <name>TR069_Mapper</name>\r
+   <licenses>\r
+      <license>\r
+         <name>The Apache Software License, Version 2.0</name>\r
+         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
+      </license>\r
+   </licenses>\r
+   <repositories>\r
+      <repository>\r
+         <id>onap-releases</id>\r
+         <name>onap-releases</name>\r
+         <url>https://nexus.onap.org/content/repositories/releases/</url>\r
+      </repository>\r
+   </repositories>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-netconfig-mapper</docker.image.name>\r
+   </properties>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.lmax</groupId>\r
+         <artifactId>disruptor</artifactId>\r
+         <version>3.4.2</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-activemq</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.fasterxml.jackson.core</groupId>\r
+         <artifactId>jackson-databind</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>commons-io</groupId>\r
+         <artifactId>commons-io</artifactId>\r
+         <version>2.6</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit-dep</artifactId>\r
+         <version>4.11</version>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-jar-plugin</artifactId>\r
+            <executions>\r
+               <execution>\r
+                  <id>mapper-client</id>\r
+                  <goals>\r
+                     <goal>jar</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <finalName>mapper-client</finalName>\r
+                     <classifier>lib</classifier>\r
+                     <includes>\r
+                        <include>org/commscope/tr069adapter/mapper/model/*</include>\r
+                     </includes>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-maven-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format \r
+                               spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use \r
+                               mvn spotless:apply to rewrite source files use mvn spotless:check to validate \r
+                               source files -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-surefire-plugin</artifactId>\r
+            <version>2.17</version>\r
+            <configuration>\r
+               <skipTests>false</skipTests>\r
+            </configuration>\r
+         </plugin>\r
+         <plugin>\r
+            <artifactId>maven-failsafe-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/mapper/rpc_set_input.xml b/mapper/rpc_set_input.xml
new file mode 100644 (file)
index 0000000..aefdb1e
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\r
+    <target>\r
+       <candidate />\r
+    </target>\r
+    <config>\r
+       <device xmlns="urn:onf:otcc:wireless:yang:radio-access:commscope-onecell">\r
+               <services>\r
+                       <fap-service>\r
+                               <index>1</index>\r
+                               <cell-config>\r
+                                       <lte>\r
+                                               <epc xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"\r
+                                                       a:operation="replace">\r
+                                                       <plmn-list>\r
+                                                               <index>1</index>\r
+                                                               <plmnid>310767</plmnid>\r
+                                                               <is-primary>false</is-primary>\r
+                                                               <cell-reserved-for-operator-use>true</cell-reserved-for-operator-use>\r
+                                                               <alias>cpe-131</alias>\r
+                                                               <enable>true</enable>\r
+                                                       </plmn-list>\r
+                                               </epc>\r
+                                       </lte>\r
+                               </cell-config>\r
+                       </fap-service>\r
+               </services>\r
+       </device>\r
+    </config>\r
+</edit-config>
\ No newline at end of file
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/ErrorCodeMetaData.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/ErrorCodeMetaData.java
new file mode 100644 (file)
index 0000000..ca4fa66
--- /dev/null
@@ -0,0 +1,86 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import java.io.Serializable;\r
+\r
+public class ErrorCodeMetaData implements Serializable {\r
+\r
+  private static final long serialVersionUID = -2772256485667214776L;\r
+\r
+  private String errorMessage;\r
+\r
+  private String errorType;\r
+\r
+  private String errorTag;\r
+\r
+  private String errorSeverity;\r
+\r
+  public ErrorCodeMetaData() {\r
+\r
+  }\r
+\r
+  public ErrorCodeMetaData(String errorMessage, String errorType, String errorTag,\r
+      String errorSeverity) {\r
+    super();\r
+    this.errorMessage = errorMessage;\r
+    this.errorType = errorType;\r
+    this.errorTag = errorTag;\r
+    this.errorSeverity = errorSeverity;\r
+  }\r
+\r
+  public String getErrorMessage() {\r
+    return errorMessage;\r
+  }\r
+\r
+  public void setErrorMessage(String errorMessage) {\r
+    this.errorMessage = errorMessage;\r
+  }\r
+\r
+  public String getErrorType() {\r
+    return errorType;\r
+  }\r
+\r
+  public void setErrorType(String errorType) {\r
+    this.errorType = errorType;\r
+  }\r
+\r
+  public String getErrorTag() {\r
+    return errorTag;\r
+  }\r
+\r
+  public void setErrorTag(String errorTag) {\r
+    this.errorTag = errorTag;\r
+  }\r
+\r
+  public String getErrorSeverity() {\r
+    return errorSeverity;\r
+  }\r
+\r
+  public void setErrorSeverity(String errorSeverity) {\r
+    this.errorSeverity = errorSeverity;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "ErrorCodeMetaData [errorMessage=" + errorMessage + ", errorType=" + errorType\r
+        + ", errorTag=" + errorTag + ", errorSeverity=" + errorSeverity + "]";\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/MOMetaData.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/MOMetaData.java
new file mode 100644 (file)
index 0000000..f3b6700
--- /dev/null
@@ -0,0 +1,101 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import java.io.Serializable;\r
+\r
+public class MOMetaData implements Serializable {\r
+\r
+  private static final long serialVersionUID = -2772256485667214776L;\r
+\r
+  private String moName;\r
+  private String dataType;\r
+\r
+  private boolean isReadOnly;\r
+  private boolean isTabluar;\r
+  private boolean isTabluarObj;\r
+  private String uri;\r
+\r
+  public MOMetaData() {}\r
+\r
+  public MOMetaData(String moName, String dataType, boolean isReadOnly, boolean isTabluar,\r
+      boolean isTabluarObj) {\r
+    super();\r
+    this.moName = moName;\r
+    this.dataType = dataType;\r
+    this.isReadOnly = isReadOnly;\r
+    this.isTabluar = isTabluar;\r
+    this.isTabluarObj = isTabluarObj;\r
+  }\r
+\r
+  public String getMoName() {\r
+    return moName;\r
+  }\r
+\r
+  public void setMoName(String moName) {\r
+    this.moName = moName;\r
+  }\r
+\r
+  public String getDataType() {\r
+    return dataType;\r
+  }\r
+\r
+  public void setDataType(String dataType) {\r
+    this.dataType = dataType;\r
+  }\r
+\r
+  public boolean isReadOnly() {\r
+    return isReadOnly;\r
+  }\r
+\r
+  public void setReadOnly(boolean isReadOnly) {\r
+    this.isReadOnly = isReadOnly;\r
+  }\r
+\r
+  public boolean isTabluar() {\r
+    return isTabluar;\r
+  }\r
+\r
+  public void setTabluar(boolean isTabluar) {\r
+    this.isTabluar = isTabluar;\r
+  }\r
+\r
+  public boolean isTabluarObj() {\r
+    return isTabluarObj;\r
+  }\r
+\r
+  public void setTabluarObj(boolean isTabluarObj) {\r
+    this.isTabluarObj = isTabluarObj;\r
+  }\r
+\r
+  public String getURI() {\r
+    return uri;\r
+  }\r
+\r
+  public void setURI(String uRI) {\r
+    uri = uRI;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "MOMetaData [moName=" + moName + ", dataType=" + dataType + ", isReadOnly=" + isReadOnly\r
+        + ", isTabluar=" + isTabluar + "]";\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/MapperConfigProperties.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/MapperConfigProperties.java
new file mode 100644 (file)
index 0000000..c3f3a0a
--- /dev/null
@@ -0,0 +1,124 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import org.springframework.boot.context.properties.ConfigurationProperties;\r
+import org.springframework.context.annotation.Configuration;\r
+\r
+@Configuration\r
+@ConfigurationProperties(prefix = "config")\r
+public class MapperConfigProperties {\r
+\r
+  private String requesTimeout;\r
+\r
+  private String preConfigureOnPNP;\r
+\r
+  private String sbiUri;\r
+\r
+  private String configDBUri;\r
+\r
+  private String nbiNotificationUri;\r
+  private String nbiServerManagerUri;\r
+  private String vesUri;\r
+\r
+  private String netConfServerIP;\r
+  private String netConfServerPort;\r
+\r
+  private String alarmMORegex;\r
+\r
+  public String getRequesTimeout() {\r
+    return requesTimeout;\r
+  }\r
+\r
+  public void setRequesTimeout(String requesTimeout) {\r
+    this.requesTimeout = requesTimeout;\r
+  }\r
+\r
+  public String getPreConfigureOnPNP() {\r
+    return preConfigureOnPNP;\r
+  }\r
+\r
+  public void setPreConfigureOnPNP(String preConfigureOnPNP) {\r
+    this.preConfigureOnPNP = preConfigureOnPNP;\r
+  }\r
+\r
+  public String getSbiUri() {\r
+    return sbiUri;\r
+  }\r
+\r
+  public void setSbiUri(String sbiUri) {\r
+    this.sbiUri = sbiUri;\r
+  }\r
+\r
+  public String getConfigDBUri() {\r
+    return configDBUri;\r
+  }\r
+\r
+  public void setConfigDBUri(String configDBUri) {\r
+    this.configDBUri = configDBUri;\r
+  }\r
+\r
+  public String getNbiNotificationUri() {\r
+    return nbiNotificationUri;\r
+  }\r
+\r
+  public void setNbiNotificationUri(String nbiNotificationUri) {\r
+    this.nbiNotificationUri = nbiNotificationUri;\r
+  }\r
+\r
+  public String getNbiServerManagerUri() {\r
+    return nbiServerManagerUri;\r
+  }\r
+\r
+  public void setNbiServerManagerUri(String nbiServerManagerUri) {\r
+    this.nbiServerManagerUri = nbiServerManagerUri;\r
+  }\r
+\r
+  public String getVesUri() {\r
+    return vesUri;\r
+  }\r
+\r
+  public void setVesUri(String vesUri) {\r
+    this.vesUri = vesUri;\r
+  }\r
+\r
+  public String getNetConfServerIP() {\r
+    return netConfServerIP;\r
+  }\r
+\r
+  public void setNetConfServerIP(String netConfServerIP) {\r
+    this.netConfServerIP = netConfServerIP;\r
+  }\r
+\r
+  public String getNetConfServerPort() {\r
+    return netConfServerPort;\r
+  }\r
+\r
+  public void setNetConfServerPort(String netConfServerPort) {\r
+    this.netConfServerPort = netConfServerPort;\r
+  }\r
+\r
+  public String getAlarmMORegex() {\r
+    return alarmMORegex;\r
+  }\r
+\r
+  public void setAlarmMORegex(String alarmMORegex) {\r
+    this.alarmMORegex = alarmMORegex;\r
+  }\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/ACSNotificationHandler.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/ACSNotificationHandler.java
new file mode 100644 (file)
index 0000000..c0b1f5a
--- /dev/null
@@ -0,0 +1,30 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.acs;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+\r
+public interface ACSNotificationHandler {\r
+\r
+  public void handleOperationResponse(DeviceRPCResponse opResult);\r
+\r
+  public void handleNotification(DeviceInform notification);\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/ACSRequestSender.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/ACSRequestSender.java
new file mode 100644 (file)
index 0000000..01ed76a
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.acs;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class ACSRequestSender {\r
+\r
+  private RestTemplate restTemplate = new RestTemplate();\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  public Long sendRequest(DeviceRPCRequest deviceRPCRequest) {\r
+    String uri = getUri();\r
+    return restTemplate.postForObject(uri, deviceRPCRequest, Long.class);\r
+  }\r
+\r
+  private String getUri() {\r
+    return config.getSbiUri();\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/controller/ACSNotificationReceiver.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/controller/ACSNotificationReceiver.java
new file mode 100644 (file)
index 0000000..a4e15a0
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.acs.controller;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.mapper.acs.ACSNotificationHandler;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestBody;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping("/tr069MapperSBI")\r
+public class ACSNotificationReceiver {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(ACSNotificationReceiver.class);\r
+\r
+  @Autowired\r
+  ACSNotificationHandler handler;\r
+\r
+  @PostMapping("/opResult")\r
+  public void processOpResult(@RequestBody DeviceRPCResponse opResult) {\r
+    LOG.debug("Received Operation result : {}", opResult);\r
+    handler.handleOperationResponse(opResult);\r
+    LOG.debug("Processed Operation result for opId : {}", opResult.getOperationId());\r
+  }\r
+\r
+  @PostMapping("/notification")\r
+  public void processNotification(@RequestBody DeviceInform notification) {\r
+    LOG.debug("Received device notification : {}", notification);\r
+    handler.handleNotification(notification);\r
+    LOG.debug("Processed device notification : {}", notification.getInformType());\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/impl/ACSNotificationHandlerImpl.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/impl/ACSNotificationHandlerImpl.java
new file mode 100644 (file)
index 0000000..693f788
--- /dev/null
@@ -0,0 +1,266 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.acs.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.acs.common.inform.PeriodicInform;\r
+import org.commscope.tr069adapter.acs.common.inform.ValueChangeInform;\r
+import org.commscope.tr069adapter.mapper.MOMetaData;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.commscope.tr069adapter.mapper.acs.ACSNotificationHandler;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetconfServerManagementError;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfNotificationSender;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfServerManager;\r
+import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
+import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
+import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class ACSNotificationHandlerImpl implements ACSNotificationHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(ACSNotificationHandlerImpl.class);\r
+\r
+  @Autowired\r
+  SynchronizedRequestHandler syncHandler;\r
+\r
+  @Autowired\r
+  MOMetaDataUtil metaDataUtil;\r
+\r
+  @Autowired\r
+  PnPPreProvisioningHandler pnpPreProvisioningHandler;\r
+\r
+  @Autowired\r
+  VESNotificationSender vesnotiSender;\r
+\r
+  @Autowired\r
+  NetConfNotificationSender notiSender;\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  @Autowired\r
+  NetConfServerManager netconfManager;\r
+\r
+  @Override\r
+  public void handleOperationResponse(DeviceRPCResponse opResult) {\r
+    opResult.getOperationResponse().setParameterDTOs(\r
+        filterUnsupportedParameters(opResult.getOperationResponse().getParameterDTOs()));\r
+    syncHandler.notifyResult(opResult);\r
+  }\r
+\r
+  @Override\r
+  public void handleNotification(DeviceInform notification) {\r
+    boolean isAlarmVC = isAlarmVC(notification);\r
+\r
+    if (notification instanceof BootstrapInform) {\r
+      logger.info("BootStrap notification received");\r
+      BootstrapInform bootstrapNotification = (BootstrapInform) notification;\r
+      // send request to create the netconf server instance for the bootstrap device\r
+      // id\r
+      NetConfServerDetails serverInfo = createNtConfServer(bootstrapNotification);\r
+      if (serverInfo == null)\r
+        return;\r
+\r
+      vesnotiSender.sendNotification(bootstrapNotification, serverInfo);\r
+      BootstrapInform bsInform =\r
+          getDeviceBootStrapNotification(bootstrapNotification, TR069InformType.BOOTSTRAP);\r
+      if (bootstrapNotification.getValueChangeNotification() != null) {\r
+        logger.info("Bootstrap notification received along with VC");\r
+        ValueChangeInform vcInform =\r
+            getDeviceValueChangeNotification(bootstrapNotification, TR069InformType.VALUECHANGE);\r
+        processVCNotification(vcInform, isAlarmVC);\r
+      }\r
+      notiSender.sendNotification(bsInform);\r
+    } else if (notification instanceof BootInform) {\r
+      logger.info("Boot notification received");\r
+      BootInform bootNotification = (BootInform) notification;\r
+      BootInform bInform = getDeviceBootNotification(bootNotification, TR069InformType.BOOT);\r
+      if (bootNotification.getValueChangeNotification() != null) {\r
+        logger.info("Boot notification received along with VC");\r
+        ValueChangeInform vcInform =\r
+            getDeviceValueChangeNotification(bootNotification, TR069InformType.VALUECHANGE);\r
+        processVCNotification(vcInform, isAlarmVC);\r
+      }\r
+      notiSender.sendNotification(bInform);\r
+    } else if (notification instanceof PeriodicInform) {\r
+      PeriodicInform pINotificaiton = (PeriodicInform) notification;\r
+      vesnotiSender.sendNotification(pINotificaiton, null);\r
+      notiSender.sendNotification(pINotificaiton);\r
+      logger.info("VC notification received");\r
+    } else if (notification instanceof ValueChangeInform) {\r
+      ValueChangeInform valueChgNotificaiton = (ValueChangeInform) notification;\r
+      processVCNotification(valueChgNotificaiton, isAlarmVC);\r
+    }\r
+\r
+    pnpPreProvisioningHandler.onDeviceNotification(notification);\r
+  }\r
+\r
+  private NetConfServerDetails createNtConfServer(BootstrapInform bootstrapNotification) {\r
+    String eNodeBName = pnpPreProvisioningHandler\r
+        .getEnodeBName(bootstrapNotification.getDeviceDetails().getDeviceId());\r
+    if (eNodeBName == null)\r
+      eNodeBName = bootstrapNotification.getDeviceDetails().getDeviceId();\r
+    NetConfServerDetails serverInfo = netconfManager\r
+        .createNetconfServer(bootstrapNotification.getDeviceDetails().getDeviceId(), eNodeBName);\r
+    if (serverInfo != null && !NetconfServerManagementError.SUCCESS.equals(serverInfo.getError())) {\r
+      logger.error("Failed to handle bootstrap notification. Server INFO: {}", serverInfo);\r
+      logger.error("Failed to create the netconf server for device ID: {}  Error: {}",\r
+          bootstrapNotification.getDeviceDetails().getDeviceId(), serverInfo.getError());\r
+      return null;\r
+    } else if (serverInfo == null) {\r
+      logger.error(\r
+          "Failed to handle bootstrap notification. Failed to create netconf server. serverInfo is null");\r
+      return null;\r
+    }\r
+    return serverInfo;\r
+  }\r
+\r
+  private void processVCNotification(ValueChangeInform valueChgNotificaiton, boolean isAlarmVC) {\r
+    if (isAlarmVC) {\r
+      logger.debug("Alarm VC received forwarding to VES Collector");\r
+      vesnotiSender.sendNotification(valueChgNotificaiton, null);\r
+    } else {\r
+      logger.info("VC notification received");\r
+      notiSender.sendNotification(valueChgNotificaiton);\r
+    }\r
+  }\r
+\r
+  private boolean isAlarmVC(DeviceInform notification) {\r
+    if (null != notification && null != notification.getParameters()) {\r
+      for (ParameterDTO param : notification.getParameters()) {\r
+        if (param.getParamName().matches(config.getAlarmMORegex())) {\r
+          logger.debug("This VC contains alarm MOs");\r
+          return true;\r
+        }\r
+      }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  public List<ParameterDTO> filterUnsupportedParameters(List<ParameterDTO> parameters) {\r
+    List<ParameterDTO> result = new ArrayList<>();\r
+    if (null != parameters) {\r
+      for (ParameterDTO param : parameters) {\r
+        MOMetaData metaData = metaDataUtil.getMetaDataByTR69Name(param.getParamName());\r
+        if (null != metaData) {\r
+          result.add(param);\r
+        }\r
+      }\r
+    }\r
+    return result;\r
+  }\r
+\r
+  public static BootstrapInform getDeviceBootStrapNotification(DeviceInform devNotification,\r
+      TR069InformType notificationType) {\r
+    BootstrapInform bsInform = new BootstrapInform();\r
+    List<InformType> informTypeList = new ArrayList<>();\r
+    informTypeList.add(notificationType);\r
+    bsInform.setDeviceDetails(devNotification.getDeviceDetails());\r
+    bsInform.setInformTypeList(informTypeList);\r
+    List<ParameterDTO> paramList = new ArrayList<>();\r
+    for (ParameterDTO param : devNotification.getParameters()) {\r
+      paramList.add(new ParameterDTO(param.getParamName(), param.getParamValue()));\r
+    }\r
+    bsInform.setParameters(paramList);\r
+    return bsInform;\r
+  }\r
+\r
+  public static BootInform getDeviceBootNotification(DeviceInform devNotification,\r
+      TR069InformType notificationType) {\r
+    BootInform bInform = new BootInform();\r
+    List<InformType> informTypeList = new ArrayList<>();\r
+    informTypeList.add(notificationType);\r
+    bInform.setDeviceDetails(devNotification.getDeviceDetails());\r
+    bInform.setInformTypeList(informTypeList);\r
+    List<ParameterDTO> paramList = new ArrayList<>();\r
+    for (ParameterDTO param : devNotification.getParameters()) {\r
+      paramList.add(new ParameterDTO(param.getParamName(), param.getParamValue()));\r
+    }\r
+    bInform.setParameters(paramList);\r
+    return bInform;\r
+  }\r
+\r
+  public static ValueChangeInform getDeviceValueChangeNotification(DeviceInform devNotification,\r
+      TR069InformType notificationType) {\r
+    ValueChangeInform devValChangeNotif = new ValueChangeInform();\r
+    List<InformType> informTypeList = new ArrayList<>();\r
+    informTypeList.add(notificationType);\r
+    devValChangeNotif.setDeviceDetails(devNotification.getDeviceDetails());\r
+    devValChangeNotif.setInformTypeList(informTypeList);\r
+    List<ParameterDTO> paramList = new ArrayList<>();\r
+    for (ParameterDTO param : devNotification.getParameters()) {\r
+      paramList.add(new ParameterDTO(param.getParamName(), param.getParamValue()));\r
+    }\r
+    devValChangeNotif.setParameters(paramList);\r
+    devValChangeNotif.setExternalIPAddress(getExternalIPAddress(devNotification.getParameters()));\r
+    return devValChangeNotif;\r
+  }\r
+\r
+  private static String getExternalIPAddress(List<ParameterDTO> params) {\r
+    ParameterDTO[] nbiParam = params.toArray(new ParameterDTO[params.size()]);\r
+    String externalIpAddress = "";\r
+    boolean isIPv6 = isIPv6Enabled(nbiParam);\r
+\r
+    for (int index1 = 0; index1 < nbiParam.length; index1++) {\r
+\r
+      if (isIPv6) {\r
+        if (nbiParam[index1].getParamName().contains("IPv6Address")\r
+            || nbiParam[index1].getParamName().contains(".1.IPInterfaceIPAddress")) {\r
+          externalIpAddress = nbiParam[index1].getParamValue();\r
+          logger.debug("device communicating is with IPV6 address");\r
+        }\r
+      } else {\r
+        if (nbiParam[index1].getParamName().contains("IPv4Address")\r
+            || nbiParam[index1].getParamName().contains("ExternalIPAddress")\r
+            || nbiParam[index1].getParamName().contains(".1.IPInterfaceIPAddress")) {\r
+          externalIpAddress = nbiParam[index1].getParamValue();\r
+        }\r
+      }\r
+      if (externalIpAddress.trim().length() > 0)\r
+        break;\r
+    }\r
+    return externalIpAddress;\r
+  }\r
+\r
+  private static boolean isIPv6Enabled(ParameterDTO[] nbiParam) {\r
+    boolean isIPv6 = false;\r
+    for (int index1 = 0; index1 < nbiParam.length; index1++) {\r
+      if (nbiParam[index1].getParamName().contains("IPv6Enable")\r
+          && nbiParam[index1].getParamValue().equalsIgnoreCase("1")) {\r
+        isIPv6 = true;\r
+        break;\r
+      }\r
+    }\r
+    return isIPv6;\r
+  }\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/impl/PnPPreProvisioningHandler.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/acs/impl/PnPPreProvisioningHandler.java
new file mode 100644 (file)
index 0000000..b6327ec
--- /dev/null
@@ -0,0 +1,320 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.acs.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.mapper.MOMetaData;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
+import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.util.StringUtils;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class PnPPreProvisioningHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(PnPPreProvisioningHandler.class);\r
+\r
+  private static String clientString = "client";\r
+  private static final String ADMIN_STATE = "AdminState";\r
+  private static final String ENODEB_NAME = "X_0005B9_eNBName";\r
+\r
+  @Autowired\r
+  SynchronizedRequestHandler syncHandler;\r
+\r
+  @Autowired\r
+  MOMetaDataUtil moMetaDataUtil;\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  private RestTemplate restTemplate = new RestTemplate();\r
+\r
+  /**\r
+   * @param notification\r
+   */\r
+  public void onDeviceNotification(DeviceInform notification) {\r
+    String deviceId = null;\r
+    try {\r
+      if (notification instanceof BootstrapInform || notification instanceof BootInform) {\r
+        logger.debug("Checking whether the PnP pre-configuration is enabled");\r
+        if (isPreConfigureOnPnPEnabled()) {\r
+          logger.info(\r
+              "Pre-configuration during Bootstrap or Boot is enabled, hence the configuration imported in Config DB shall be provisioned to the device");\r
+        } else {\r
+          logger.debug("Pre-configuration on PnP is disabled!!!");\r
+          return;\r
+        }\r
+      }\r
+\r
+      if (notification instanceof BootstrapInform) {\r
+        BootstrapInform bootstrapNotification = (BootstrapInform) notification;\r
+        deviceId = bootstrapNotification.getDeviceDetails().getDeviceId();\r
+        MDC.put(clientString, deviceId);\r
+        logger.info("Bootstrap notification received");\r
+        performPreProvisioning(deviceId, false);\r
+\r
+      } else if (notification instanceof BootInform) {\r
+        BootInform bootNotification = (BootInform) notification;\r
+        deviceId = bootNotification.getDeviceDetails().getDeviceId();\r
+        MDC.put(clientString, deviceId);\r
+        logger.info("Boot notification received");\r
+\r
+        performPreProvisioning(deviceId, true);\r
+      }\r
+\r
+      logger.debug("Successfully completed provisioning of PnP mandatory parameters");\r
+    } finally {\r
+      MDC.remove(clientString);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param isBoot\r
+   */\r
+  private void performPreProvisioning(String deviceId, boolean isBoot) {\r
+    List<DeviceRPCRequest> deviceRPCRequestList =\r
+        prepareNBIDeviceOperationrequest(deviceId, isBoot);\r
+    if (deviceRPCRequestList.isEmpty()) {\r
+      logger.debug("No Operation requests exists to perform pre provision on the device");\r
+      return;\r
+    }\r
+\r
+    boolean isMandatoryProvFailed = false;\r
+    for (DeviceRPCRequest deviceRPCRequest : deviceRPCRequestList) {\r
+      logger.info("Performing PROVISION operation");\r
+      DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(deviceRPCRequest);\r
+      logger.debug("Received Provisioning Operation result");\r
+      if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
+        logger.error("Device operation failed, Reason: {}",\r
+            ((deviceRPCResponse == null) ? "Null Operation result"\r
+                : deviceRPCResponse.getFaultString()));\r
+        isMandatoryProvFailed = true;\r
+        break;\r
+      }\r
+\r
+      logger.debug("Provisioning is successful");\r
+    }\r
+\r
+    if (isMandatoryProvFailed) {\r
+      logger\r
+          .debug("Mandatory provisioning has failed, hence provisioning Admin down on the device");\r
+      provisionAdminDown(deviceRPCRequestList);\r
+      logger.debug("AdminDown Provisioning is successful");\r
+    }\r
+  }\r
+\r
+  private void provisionAdminDown(List<DeviceRPCRequest> deviceRPCRequestList) {\r
+    DeviceRPCRequest adminDownOpRequest = null;\r
+    for (DeviceRPCRequest nbiDeviceOperationRequest : deviceRPCRequestList) {\r
+      ParameterDTO param = nbiDeviceOperationRequest.getOpDetails().getParmeters().get(0);\r
+      if (param.getParamName().endsWith(ADMIN_STATE)) {\r
+        adminDownOpRequest = nbiDeviceOperationRequest;\r
+        break;\r
+      }\r
+    }\r
+    if (adminDownOpRequest != null) {\r
+      List<ParameterDTO> adminDownParams = adminDownOpRequest.getOpDetails().getParmeters();\r
+      for (ParameterDTO adminDownParam : adminDownParams) {\r
+        adminDownParam.setParamValue("0");\r
+      }\r
+      DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(adminDownOpRequest);\r
+      if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
+        logger.error("Device operation failed, Reason: {}",\r
+            ((deviceRPCResponse == null) ? "Null Operation result"\r
+                : deviceRPCResponse.getFaultString()));\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param isBoot\r
+   * @return\r
+   */\r
+  private List<DeviceRPCRequest> prepareNBIDeviceOperationrequest(String deviceId, boolean isBoot) {\r
+    logger.debug("Preparing the NBI Device Operation Request");\r
+    List<DeviceRPCRequest> deviceRPCRequestList = new ArrayList<>();\r
+\r
+    ConfigurationData configData = getDeviceConfigurationData(deviceId);\r
+    if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
+      logger.debug("No configuration exists for the device");\r
+      return deviceRPCRequestList;\r
+    }\r
+\r
+    List<ParameterDTO> configParams = new ArrayList<>();\r
+    List<ParameterDTO> adminStateParams = new ArrayList<>();\r
+    Map<String, String> paramNameValueMap = configData.getParameterMONameValueMap();\r
+    Iterator<String> iter = paramNameValueMap.keySet().iterator();\r
+    while (iter.hasNext()) {\r
+      String paramName = iter.next();\r
+      String paramValue = paramNameValueMap.get(paramName);\r
+      MOMetaData moMetaData = moMetaDataUtil.getMetaDataByTR69Name(paramName);\r
+      if ((isBoot && !paramName.endsWith(ADMIN_STATE)) || moMetaData == null)\r
+        continue;\r
+      ParameterDTO parameterDTO = getParameterDTO(paramName, paramValue, moMetaData);\r
+\r
+      if (paramName.endsWith(ADMIN_STATE)) {\r
+        adminStateParams.add(parameterDTO);\r
+      } else {\r
+        configParams.add(parameterDTO);\r
+      }\r
+      logger.debug("Param -> {} Param Value: {}", paramName, paramValue);\r
+    }\r
+\r
+    if (configParams.isEmpty() && adminStateParams.isEmpty()) {\r
+      logger.debug("Empty parameters list from config db, hence not performing pre-provision");\r
+      return deviceRPCRequestList;\r
+    }\r
+\r
+    if (!configParams.isEmpty()) {\r
+      deviceRPCRequestList.add(createNBIOperationRequest(deviceId, configParams));\r
+    }\r
+\r
+    if (!adminStateParams.isEmpty()) {\r
+      deviceRPCRequestList.add(createNBIOperationRequest(deviceId, adminStateParams));\r
+    }\r
+\r
+    return deviceRPCRequestList;\r
+  }\r
+\r
+  private ParameterDTO getParameterDTO(String paramName, String paramValue, MOMetaData moMetaData) {\r
+    String dataType = moMetaData.getDataType();\r
+    if (dataType.equals("boolean")) {\r
+      if (paramValue.equalsIgnoreCase("true")) {\r
+        paramValue = "1";\r
+      } else if (paramValue.equalsIgnoreCase("false")) {\r
+        paramValue = "0";\r
+      }\r
+    }\r
+    ParameterDTO parameterDTO = new ParameterDTO(paramName, paramValue);\r
+    parameterDTO.setDataType(dataType);\r
+\r
+    return parameterDTO;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @param params\r
+   * @return\r
+   */\r
+  private DeviceRPCRequest createNBIOperationRequest(String deviceId, List<ParameterDTO> params) {\r
+    TR069OperationDetails opDetails = new TR069OperationDetails();\r
+    opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
+    opDetails.setParmeters(params);\r
+\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+    tr069DeviceDetails.setDeviceId(deviceId);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(300l);\r
+    deviceRPCRequest.setOptions(options);\r
+\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  /**\r
+   * @param deviceId\r
+   * @return\r
+   */\r
+  private ConfigurationData getDeviceConfigurationData(String deviceId) {\r
+    String configDBURI = getConfigDBURI();\r
+    logger.debug("Device Configuration to be fetched from Config DB URI: {}", configDBURI);\r
+    ConfigurationData configData = null;\r
+    try {\r
+      configData = restTemplate.getForObject(configDBURI + deviceId, ConfigurationData.class);\r
+    } catch (Exception e) {\r
+      logger.error("An exception occurred to get the initial device configuration, Reason: {}",\r
+          e.getMessage());\r
+    }\r
+    return configData;\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  private boolean isPreConfigureOnPnPEnabled() {\r
+    boolean isEnabled = false;\r
+    String preConfigureOnPnP = config.getPreConfigureOnPNP();\r
+    if (preConfigureOnPnP != null && ("true".equalsIgnoreCase(preConfigureOnPnP)\r
+        || "false".equalsIgnoreCase(preConfigureOnPnP))) {\r
+      isEnabled = Boolean.valueOf(preConfigureOnPnP);\r
+    }\r
+\r
+    return isEnabled;\r
+  }\r
+\r
+  /**\r
+   * @return\r
+   */\r
+  private String getConfigDBURI() {\r
+    return config.getConfigDBUri();\r
+\r
+  }\r
+\r
+  /**\r
+   * it will return the eNodBName if the configuration is imported\r
+   * \r
+   * @return String\r
+   */\r
+  public String getEnodeBName(String deviceId) {\r
+    String eNodeBName = null;\r
+    if (isPreConfigureOnPnPEnabled()) {\r
+      ConfigurationData configData = getDeviceConfigurationData(deviceId);\r
+      if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
+        logger.debug("No configuration exists for the device");\r
+        return eNodeBName;\r
+      }\r
+\r
+      Map<String, String> paramNameValueMap = configData.getParameterMONameValueMap();\r
+      Iterator<String> iter = paramNameValueMap.keySet().iterator();\r
+      while (iter.hasNext()) {\r
+        String paramName = iter.next();\r
+        if (paramName.endsWith(ENODEB_NAME)) {\r
+          eNodeBName = paramNameValueMap.get(paramName);\r
+          break;\r
+        }\r
+      }\r
+    }\r
+    return eNodeBName;\r
+  }\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/boot/MapperServiceBooter.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/boot/MapperServiceBooter.java
new file mode 100644 (file)
index 0000000..e5f0452
--- /dev/null
@@ -0,0 +1,42 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.boot;\r
+\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+import org.springframework.boot.web.client.RestTemplateBuilder;\r
+import org.springframework.context.annotation.Bean;\r
+import org.springframework.context.annotation.ComponentScan;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@SpringBootApplication\r
+@ComponentScan({"org.commscope.tr069adapter.mapper", "org.commscope.tr069adapter.mapper.acs",\r
+    "org.commscope.tr069adapter.mapper.ves"})\r
+public class MapperServiceBooter {\r
+\r
+  public static void main(String[] args) {\r
+    SpringApplication.run(MapperServiceBooter.class, args);\r
+  }\r
+\r
+  @Bean\r
+  public RestTemplate restTemplate(RestTemplateBuilder builder) {\r
+    return builder.build();\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/ErrorCode.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/ErrorCode.java
new file mode 100644 (file)
index 0000000..d8ff29d
--- /dev/null
@@ -0,0 +1,25 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+public enum ErrorCode {\r
+\r
+  SUCCESS, FAILED;\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/ErrorCodeDetails.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/ErrorCodeDetails.java
new file mode 100644 (file)
index 0000000..148a366
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+import java.io.Serializable;\r
+\r
+public class ErrorCodeDetails implements Serializable {\r
+\r
+  private static final long serialVersionUID = -2772256485667214776L;\r
+\r
+  private String faultCode;\r
+\r
+  private String errorMessage;\r
+\r
+  private String errorType;\r
+\r
+  private String errorTag;\r
+\r
+  private String errorSeverity;\r
+\r
+  public ErrorCodeDetails() {\r
+\r
+  }\r
+\r
+  public ErrorCodeDetails(String errorMessage, String errorType, String errorTag,\r
+      String errorSeverity) {\r
+    super();\r
+    this.errorMessage = errorMessage;\r
+    this.errorType = errorType;\r
+    this.errorTag = errorTag;\r
+    this.errorSeverity = errorSeverity;\r
+  }\r
+\r
+  public String getErrorMessage() {\r
+    return errorMessage;\r
+  }\r
+\r
+  public void setErrorMessage(String errorMessage) {\r
+    this.errorMessage = errorMessage;\r
+  }\r
+\r
+  public String getErrorType() {\r
+    return errorType;\r
+  }\r
+\r
+  public void setErrorType(String errorType) {\r
+    this.errorType = errorType;\r
+  }\r
+\r
+  public String getErrorTag() {\r
+    return errorTag;\r
+  }\r
+\r
+  public void setErrorTag(String errorTag) {\r
+    this.errorTag = errorTag;\r
+  }\r
+\r
+  public String getErrorSeverity() {\r
+    return errorSeverity;\r
+  }\r
+\r
+  public void setErrorSeverity(String errorSeverity) {\r
+    this.errorSeverity = errorSeverity;\r
+  }\r
+\r
+  public String getFaultCode() {\r
+    return faultCode;\r
+  }\r
+\r
+  public void setFaultCode(String faultCode) {\r
+    this.faultCode = faultCode;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "ErrorCodeMetaData [errorMessage=" + errorMessage + ", errorType=" + errorType\r
+        + ", errorTag=" + errorTag + ", errorSeverity=" + errorSeverity + "]";\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfRequest.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfRequest.java
new file mode 100644 (file)
index 0000000..0ee2e22
--- /dev/null
@@ -0,0 +1,63 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+import java.io.Serializable;\r
+\r
+public class NetConfRequest implements Serializable {\r
+\r
+  private static final long serialVersionUID = -7593813981401577995L;\r
+\r
+  private String requestXml;\r
+\r
+  // operation status\r
+  private String deviceId;\r
+\r
+  public NetConfRequest() {\r
+    super();\r
+  }\r
+\r
+  public NetConfRequest(String requestXml, String deviceId) {\r
+    super();\r
+    this.requestXml = requestXml;\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public String getRequestXml() {\r
+    return requestXml;\r
+  }\r
+\r
+  public void setRequestXml(String requestXml) {\r
+    this.requestXml = requestXml;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "NetConfRequest [RequestXml=" + requestXml + ", deviceId=" + deviceId + "]";\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfResponse.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfResponse.java
new file mode 100644 (file)
index 0000000..c39f8e5
--- /dev/null
@@ -0,0 +1,65 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+import java.io.Serializable;\r
+\r
+public class NetConfResponse implements Serializable {\r
+\r
+  private static final long serialVersionUID = -7593813981401577995L;\r
+\r
+  // Netconf Response XML containing data xml element\r
+  private String netconfResponseXml;\r
+\r
+  // operation error code\r
+  private ErrorCodeDetails errorCode;\r
+\r
+  // Error Message\r
+  private String errorMessage;\r
+\r
+  public String getNetconfResponseXml() {\r
+    return netconfResponseXml;\r
+  }\r
+\r
+  public void setNetconfResponseXml(String netconfResponseXml) {\r
+    this.netconfResponseXml = netconfResponseXml;\r
+  }\r
+\r
+  public ErrorCodeDetails getErrorCode() {\r
+    return errorCode;\r
+  }\r
+\r
+  public void setErrorCode(ErrorCodeDetails errorCode) {\r
+    this.errorCode = errorCode;\r
+  }\r
+\r
+  public String getErrorMessage() {\r
+    return errorMessage;\r
+  }\r
+\r
+  public void setErrorMessage(String errorMessage) {\r
+    this.errorMessage = errorMessage;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "NetConfResponse [netconfResponseXml=" + netconfResponseXml + ", errorCode=" + errorCode\r
+        + ", errorMessage=" + errorMessage + "]";\r
+  }\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfServerDetails.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetConfServerDetails.java
new file mode 100644 (file)
index 0000000..4a470f6
--- /dev/null
@@ -0,0 +1,91 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+import java.io.Serializable;\r
+\r
+public class NetConfServerDetails implements Serializable {\r
+\r
+  private static final long serialVersionUID = -7594811982301577995L;\r
+\r
+  private String deviceId;\r
+  private String enodeBName;\r
+  private String listenAddress;\r
+  private String listenPort;\r
+\r
+  private NetconfServerManagementError error;\r
+\r
+  public NetConfServerDetails() {\r
+    super();\r
+  }\r
+\r
+  public NetConfServerDetails(String deviceId, String listenAddress, String listenPort) {\r
+    super();\r
+    this.deviceId = deviceId;\r
+    this.listenAddress = listenAddress;\r
+    this.listenPort = listenPort;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public String getListenAddress() {\r
+    return listenAddress;\r
+  }\r
+\r
+  public void setListenAddress(String listenAddress) {\r
+    this.listenAddress = listenAddress;\r
+  }\r
+\r
+  public String getListenPort() {\r
+    return listenPort;\r
+  }\r
+\r
+  public void setListenPort(String listenPort) {\r
+    this.listenPort = listenPort;\r
+  }\r
+\r
+  public NetconfServerManagementError getError() {\r
+    return error;\r
+  }\r
+\r
+  public void setError(NetconfServerManagementError error) {\r
+    this.error = error;\r
+  }\r
+\r
+  public String getEnodeBName() {\r
+    return enodeBName;\r
+  }\r
+\r
+  public void setEnodeBName(String enodeBName) {\r
+    this.enodeBName = enodeBName;\r
+  }\r
+\r
+  @Override\r
+  public String toString() {\r
+    return "NetConfServerDetails [deviceId=" + deviceId + ", enodeBName=" + enodeBName\r
+        + ", listenAddress=" + listenAddress + ", listenPort=" + listenPort + ", error=" + error\r
+        + "]";\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetconfServerManagementError.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/NetconfServerManagementError.java
new file mode 100644 (file)
index 0000000..a8bb4d8
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+public enum NetconfServerManagementError {\r
+\r
+  SUCCESS(""), PORT_IN_USE("Port is already in use."), PORT_NOT_AVAILBLE(\r
+      "None of ports are available."), INTERNAL_ERROR("Failed to create the server");\r
+\r
+  NetconfServerManagementError(String msg) {\r
+    this.errorMessage = msg;\r
+  }\r
+\r
+  private String errorMessage;\r
+\r
+  public String getErrorMessage() {\r
+    return errorMessage;\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/VESNotification.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/VESNotification.java
new file mode 100644 (file)
index 0000000..61a465d
--- /dev/null
@@ -0,0 +1,57 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonTypeInfo;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+\r
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")\r
+public class VESNotification implements Serializable {\r
+  private DeviceInform devnotification;\r
+  private NetConfServerDetails netconfDetails;\r
+  private String eNodeBName;\r
+\r
+  public DeviceInform getDevnotification() {\r
+    return devnotification;\r
+  }\r
+\r
+  public void setDevnotification(DeviceInform devnotification) {\r
+    this.devnotification = devnotification;\r
+  }\r
+\r
+  public NetConfServerDetails getNetconfDetails() {\r
+    return netconfDetails;\r
+  }\r
+\r
+  public void setNetconfDetails(NetConfServerDetails netconfDetails) {\r
+    this.netconfDetails = netconfDetails;\r
+  }\r
+\r
+  public String geteNodeBName() {\r
+    return eNodeBName;\r
+  }\r
+\r
+  public void seteNodeBName(String eNodeBName) {\r
+    this.eNodeBName = eNodeBName;\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/VESNotificationResponse.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/model/VESNotificationResponse.java
new file mode 100644 (file)
index 0000000..f6241d0
--- /dev/null
@@ -0,0 +1,53 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.model;\r
+\r
+import java.io.Serializable;\r
+\r
+public class VESNotificationResponse implements Serializable {\r
+  private int statusCode;\r
+  private String responseMsg;\r
+\r
+  public VESNotificationResponse() {\r
+    super();\r
+  }\r
+\r
+  public VESNotificationResponse(int statusCode, String responseMsg) {\r
+    super();\r
+    this.statusCode = statusCode;\r
+    this.responseMsg = responseMsg;\r
+  }\r
+\r
+  public int getStatusCode() {\r
+    return statusCode;\r
+  }\r
+\r
+  public void setStatusCode(int statusCode) {\r
+    this.statusCode = statusCode;\r
+  }\r
+\r
+  public String getResponseMsg() {\r
+    return responseMsg;\r
+  }\r
+\r
+  public void setResponseMsg(String responseMsg) {\r
+    this.responseMsg = responseMsg;\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfNotificationSender.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfNotificationSender.java
new file mode 100644 (file)
index 0000000..adb3267
--- /dev/null
@@ -0,0 +1,108 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.netconf;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.mapper.MOMetaData;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.ResponseEntity;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class NetConfNotificationSender {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfNotificationSender.class);\r
+  private static final String BOOLEAN_TRUE_VALUE = "1";\r
+  private static final String BOOLEAN_FALSE_VALUE = "0";\r
+  private static final String BOOLEAN_DATA_TYPE = "boolean";\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  @Autowired\r
+  MOMetaDataUtil metaDataUtil;\r
+\r
+  @Autowired\r
+  RestTemplate restTemplate;\r
+\r
+  public ResponseEntity sendNotification(DeviceInform deviceInform) {\r
+    ResponseEntity response = null;\r
+    final String uri = getUri();\r
+    LOG.debug("Posting notification to netconf server {}", uri);\r
+\r
+    try {\r
+      LOG.debug("deviceInform : {} {}", deviceInform.getInformTypeList(),\r
+          deviceInform.getParameters());\r
+      convertTR069ToNetConfParams(deviceInform);\r
+      LOG.debug("Posting notification to netconf server");\r
+      response = restTemplate.postForObject(uri, deviceInform, ResponseEntity.class);\r
+      LOG.debug("Posting notification to netconf server completed ");\r
+    } catch (Exception e) {\r
+      LOG.error("Exception while sending the notification.", e);\r
+    }\r
+    return response;\r
+  }\r
+\r
+  private void convertTR069ToNetConfParams(DeviceInform deviceInform) {\r
+    List<ParameterDTO> removeList = new ArrayList<>();\r
+    if (null != deviceInform) {\r
+      for (ParameterDTO param : deviceInform.getParameters()) {\r
+        if (param.getParamValue() == null || param.getParamValue().trim().length() <= 0) {\r
+          continue;\r
+        }\r
+        handleBooleanParameters(param);\r
+        if (null != param.getParamName()) {\r
+          String netConfMOName =\r
+              metaDataUtil.getNetconfNameByTR69NameWithIndexes(param.getParamName());\r
+          if (null != netConfMOName)\r
+            param.setParamName(netConfMOName);\r
+          else\r
+            removeList.add(param); // unknown parameter found.\r
+        }\r
+      }\r
+      deviceInform.getParameters().removeAll(removeList); // remove unknown\r
+      // parameters\r
+    }\r
+  }\r
+\r
+  private void handleBooleanParameters(ParameterDTO param) {\r
+    MOMetaData metaData = metaDataUtil.getMetaDataByTR69Name(param.getParamName());\r
+    if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
+      if (BOOLEAN_TRUE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
+        param.setParamValue(Boolean.TRUE.toString());\r
+      } else if (BOOLEAN_FALSE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
+        param.setParamValue(Boolean.FALSE.toString());\r
+      }\r
+    }\r
+  }\r
+\r
+  private String getUri() {\r
+    return config.getNbiNotificationUri();\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfRequestHandler.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfRequestHandler.java
new file mode 100644 (file)
index 0000000..7dbb5b0
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.netconf;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+\r
+public interface NetConfRequestHandler {\r
+\r
+  public NetConfResponse handleSetConfigRequest(NetConfRequest request);\r
+\r
+  public NetConfResponse handleGetRequest(NetConfRequest request);\r
+\r
+  public NetConfResponse handleGetConfigRequest(NetConfRequest request);\r
+\r
+  public NetConfResponse handleDelConfigRequest(NetConfRequest request);\r
+\r
+  public boolean handelRegisterEvent(NetConfServerDetails request);\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfServerManager.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/NetConfServerManager.java
new file mode 100644 (file)
index 0000000..675a3ee
--- /dev/null
@@ -0,0 +1,76 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.netconf;\r
+\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpEntity;\r
+import org.springframework.http.HttpHeaders;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.http.ResponseEntity;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.util.LinkedMultiValueMap;\r
+import org.springframework.util.MultiValueMap;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class NetConfServerManager {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfServerManager.class);\r
+\r
+  private static String createServerSVC = "createServer";\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  @Autowired\r
+  RestTemplate restTemplate;\r
+\r
+  public NetConfServerDetails createNetconfServer(String deviceID, String enodeBName) {\r
+\r
+    NetConfServerDetails result = null;\r
+    // handle exception\r
+    final String uri = getNetconfServerManagerRestUri() + "/" + createServerSVC;\r
+    LOG.debug("Sending create netconf server request for device id {}", deviceID);\r
+    try {\r
+      MultiValueMap<String, String> uriParams = new LinkedMultiValueMap<>();\r
+      uriParams.add("deviceId", deviceID);\r
+      uriParams.add("enodeBName", enodeBName);\r
+      HttpHeaders headers = new HttpHeaders();\r
+      headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);\r
+      final HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(uriParams, headers);\r
+      ResponseEntity<NetConfServerDetails> res =\r
+          restTemplate.postForEntity(uri, entity, NetConfServerDetails.class);\r
+      result = res.getBody();\r
+      LOG.debug("Successfully created netconf server for device id. {} , response= {}", deviceID,\r
+          result);\r
+    } catch (Exception e) {\r
+      LOG.error("Exception while creating netconf server request for device id {}", deviceID, e);\r
+    }\r
+    return result;\r
+  }\r
+\r
+  private String getNetconfServerManagerRestUri() {\r
+    return config.getNbiServerManagerUri();\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/controller/NetConfRequestReceiver.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/controller/NetConfRequestReceiver.java
new file mode 100644 (file)
index 0000000..ada3692
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.netconf.controller;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestBody;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping("/tr069MapperNBI")\r
+public class NetConfRequestReceiver {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfRequestReceiver.class);\r
+\r
+  @Autowired\r
+  NetConfRequestHandler handler;\r
+\r
+  @PostMapping("/setConfig")\r
+  public NetConfResponse setConfigRequest(@RequestBody NetConfRequest request) {\r
+    LOG.info("Received request for SET-CONFIG. Request : {}", request);\r
+    NetConfResponse response = handler.handleSetConfigRequest(request);\r
+    LOG.info("Processed SET-CONFIG request. Response : {}", response);\r
+    return response;\r
+  }\r
+\r
+  @PostMapping("/get")\r
+  public NetConfResponse getRequest(@RequestBody NetConfRequest request) {\r
+    LOG.info("Received request for GET. Request : {}", request);\r
+    NetConfResponse response = handler.handleGetRequest(request);\r
+    LOG.info("Processed GET request. Response : {}", response);\r
+    return response;\r
+  }\r
+\r
+  @PostMapping("/getConfig")\r
+  public NetConfResponse getConfigRequest(@RequestBody NetConfRequest request) {\r
+    LOG.info("Received request for GET-CONFIG. Request : {}", request);\r
+    NetConfResponse response = handler.handleGetConfigRequest(request);\r
+    LOG.info("Processed GET-CONFIG request. Response : {}", response);\r
+    return response;\r
+  }\r
+\r
+  @PostMapping("/delConfig")\r
+  public NetConfResponse delConfigRequest(@RequestBody NetConfRequest request) {\r
+    LOG.info("Received request for DEL-CONFIG. Request : {}", request);\r
+    NetConfResponse response = handler.handleDelConfigRequest(request);\r
+    LOG.info("Processed DEL-CONFIG request. Response : {}", response);\r
+    return response;\r
+  }\r
+\r
+  @PostMapping("/softwareDowload")\r
+  public NetConfResponse swDownloadRequest(@RequestBody NetConfRequest request) {\r
+    LOG.info("Received request for SW-DOWNLOAD. Request : {}", request);\r
+    LOG.info("Processed SW-DOWNLOAD request. Response : ");\r
+    return null;\r
+  }\r
+\r
+  @PostMapping("/softwareActivate")\r
+  public NetConfResponse swActivateRequest(@RequestBody NetConfRequest request) {\r
+    LOG.info("Received request for SW-ACTIVATE. Request : {}", request);\r
+    LOG.info("Processed SW-ACTIVATE request. Response : ");\r
+    return null;\r
+  }\r
+\r
+  @PostMapping("/registerNetconfServer")\r
+  public boolean handelRegisterEvent(@RequestBody NetConfServerDetails request) {\r
+    LOG.info("Received request for register event. Request : {}", request);\r
+    boolean result = handler.handelRegisterEvent(request);\r
+    LOG.info("Processed register event request. Response : {}", request);\r
+    return result;\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/impl/NetConfRequestHandlerImpl.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/netconf/impl/NetConfRequestHandlerImpl.java
new file mode 100644 (file)
index 0000000..834102e
--- /dev/null
@@ -0,0 +1,330 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.netconf.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.mapper.ErrorCodeMetaData;\r
+import org.commscope.tr069adapter.mapper.MOMetaData;\r
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;\r
+import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
+import org.commscope.tr069adapter.mapper.util.ErrorCodeUtil;\r
+import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
+import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;\r
+import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.util.StringUtils;\r
+import org.w3c.dom.Element;\r
+\r
+@Component\r
+public class NetConfRequestHandlerImpl implements NetConfRequestHandler {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfRequestHandlerImpl.class);\r
+  private static final String BOOLEAN_TRUE_VALUE = "1";\r
+  private static final String BOOLEAN_FALSE_VALUE = "0";\r
+  private static final String BOOLEAN_DATA_TYPE = "boolean";\r
+\r
+  @Autowired\r
+  SynchronizedRequestHandler syncHandler;\r
+\r
+  @Autowired\r
+  NetconfToTr069MapperUtil mapperUtil;\r
+\r
+  @Autowired\r
+  MOMetaDataUtil metaDataUtil;\r
+\r
+  @Autowired\r
+  private ErrorCodeUtil errorCodeUtil;\r
+\r
+  @Autowired\r
+  VESNotificationSender vesnotiSender;\r
+\r
+  @Override\r
+  public NetConfResponse handleSetConfigRequest(NetConfRequest netConfRequest) {\r
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
+    NetConfResponse response = null;\r
+    DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(\r
+        netConfRequest.getDeviceId(), el, "config", TR069OperationCode.SET_PARAMETER_VALUES);\r
+\r
+    if (deviceRPCRequest == null) {\r
+      LOG.debug("There are no supported device parameters found for edit-config.");\r
+      return getEmptyResponse();\r
+    }\r
+    List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();\r
+    List<ParameterDTO> filteredParams = new ArrayList<>();\r
+    if (null != requestParams) {\r
+      for (ParameterDTO param : requestParams) {\r
+        if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {\r
+          continue;\r
+        }\r
+        filteredParams.add(param);\r
+      }\r
+      deviceRPCRequest.getOpDetails().setParmeters(filteredParams);\r
+    }\r
+\r
+    if (deviceRPCRequest.getOpDetails() == null\r
+        || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {\r
+      LOG.debug("There are no device parameters found for edit-config.");\r
+      return getEmptyResponse();\r
+    } else if (deviceRPCRequest.getOpDetails() != null) {\r
+      deviceRPCRequest.getOpDetails()\r
+          .setParmeters(filteredSetParameters(deviceRPCRequest.getOpDetails().getParmeters()));\r
+      if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {\r
+        LOG.debug("There are no supported device parameters found for edit-config.");\r
+        return getEmptyResponse();\r
+      }\r
+    }\r
+\r
+    handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters());\r
+    LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);\r
+\r
+    DeviceRPCResponse deviceRPCResponse;\r
+    deviceRPCResponse = syncHandler.performDeviceOperation(deviceRPCRequest);\r
+    if (null == deviceRPCResponse) {\r
+      return getTimeOutResponse();\r
+    }\r
+    response = mapperUtil.getNetconfResponse(deviceRPCResponse);\r
+    return response;\r
+  }\r
+\r
+  @Override\r
+  public NetConfResponse handleDelConfigRequest(NetConfRequest netConfRequest) {\r
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
+    NetConfResponse response = null;\r
+    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
+        netConfRequest.getDeviceId(), el, "config", TR069OperationCode.DELETE_OBJECT);\r
+\r
+    if (request == null) {\r
+      LOG.debug("There are no supported device parameters found for delete-config.");\r
+      return getEmptyResponse();\r
+    }\r
+\r
+    List<ParameterDTO> requestParams = request.getOpDetails().getParmeters();\r
+    List<ParameterDTO> filteredParams = new ArrayList<>();\r
+    if (null != requestParams) {\r
+      for (ParameterDTO param : requestParams) {\r
+        filteredParams.add(param);\r
+      }\r
+      request.getOpDetails().setParmeters(filteredParams);\r
+    }\r
+\r
+    if (request.getOpDetails() == null || request.getOpDetails().getParmeters().isEmpty()) {\r
+      LOG.debug("There are no device parameters found for delete-config.");\r
+      return getEmptyResponse();\r
+    } else if (request.getOpDetails() != null) {\r
+      request.getOpDetails()\r
+          .setParmeters(filteredSetParameters(request.getOpDetails().getParmeters()));\r
+      if (request.getOpDetails().getParmeters().isEmpty()) {\r
+        LOG.debug("There are no supported device parameters found for delete-config.");\r
+        return getEmptyResponse();\r
+      }\r
+    }\r
+    LOG.debug("Prepared NBI request for delete-config {}", request);\r
+\r
+    DeviceRPCResponse opResult;\r
+    opResult = syncHandler.performDeviceOperation(request);\r
+    if (null == opResult) {\r
+      return getTimeOutResponse();\r
+    }\r
+    response = mapperUtil.getNetconfResponse(opResult);\r
+    return response;\r
+  }\r
+\r
+  @Override\r
+  public NetConfResponse handleGetRequest(NetConfRequest netConfRequest) {\r
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
+    NetConfResponse response = null;\r
+    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
+        netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
+\r
+    if (request == null || request.getOpDetails() == null\r
+        || request.getOpDetails().getParmeters().isEmpty()) {\r
+      LOG.debug("There are no device parameters found for get.");\r
+      return getEmptyResponse();\r
+    } else if (request.getOpDetails() != null) {\r
+\r
+      request.getOpDetails()\r
+          .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters()));\r
+\r
+      if (request.getOpDetails().getParmeters().isEmpty()) {\r
+        LOG.debug("There are no supported device parameters found for get.");\r
+        return getEmptyResponse();\r
+      }\r
+    }\r
+    LOG.debug("Prepared NBI request for get {}", request);\r
+\r
+    DeviceRPCResponse opResult;\r
+    opResult = syncHandler.performDeviceOperation(request);\r
+    if (null == opResult) {\r
+      return getTimeOutResponse();\r
+    }\r
+    response = mapperUtil.getNetconfResponse(opResult);\r
+    return response;\r
+  }\r
+\r
+  @Override\r
+  public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {\r
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
+    NetConfResponse response = null;\r
+    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
+        netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
+\r
+    if (request == null || request.getOpDetails() == null\r
+        || request.getOpDetails().getParmeters().isEmpty()) {\r
+      LOG.debug("There are no device parameters found for get-config.");\r
+      return getEmptyResponse();\r
+    } else if (request.getOpDetails() != null) {\r
+      request.getOpDetails()\r
+          .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters()));\r
+\r
+      if (request.getOpDetails().getParmeters().isEmpty()) {\r
+        LOG.debug("There are no supported device parameters found for get-config.");\r
+        return getEmptyResponse();\r
+      }\r
+    }\r
+    LOG.debug("Prepared NBI request for get-config {}", request);\r
+\r
+    DeviceRPCResponse opResult;\r
+    opResult = syncHandler.performDeviceOperation(request);\r
+    if (null == opResult) {\r
+      return getTimeOutResponse();\r
+    }\r
+    LOG.debug("Received GPV response : FaultKey = {} FaultString = {} Parameters : {}",\r
+        opResult.getFaultKey(), opResult.getFaultString(),\r
+        opResult.getOperationResponse().getParameterDTOs());\r
+    if (null != opResult.getOperationResponse().getParameterDTOs())\r
+      handleBooleanParameters(opResult.getOperationResponse().getParameterDTOs());\r
+    response = mapperUtil.getNetconfResponse(opResult);\r
+\r
+    if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {\r
+      // check for tabular\r
+      LOG.debug("Tabular Entry not exist in the device; we need to add it now");\r
+      MOMetaData data = metaDataUtil\r
+          .getMetaDataByTR69Name(request.getOpDetails().getParmeters().get(0).getParamName());\r
+      if (data.isTabluarObj()) {\r
+        return getEmptyResponse();\r
+      }\r
+    }\r
+\r
+    return response;\r
+  }\r
+\r
+  private void handleBooleanParameters(List<ParameterDTO> parameterDTOs) {\r
+\r
+    for (ParameterDTO param : parameterDTOs) {\r
+      MOMetaData metaData = metaDataUtil.getMetaDataByTR69Name(param.getParamName());\r
+      if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
+        if (BOOLEAN_TRUE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
+          param.setParamValue(Boolean.TRUE.toString());\r
+        } else if (BOOLEAN_FALSE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
+          param.setParamValue(Boolean.FALSE.toString());\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  private void handleBooleanParametersReverse(List<ParameterDTO> parameterDTOs) {\r
+\r
+    for (ParameterDTO param : parameterDTOs) {\r
+      MOMetaData metaData = metaDataUtil.getMetaDataByTR69Name(param.getParamName());\r
+      if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
+        if (Boolean.TRUE.toString().equalsIgnoreCase(param.getParamValue().trim())) {\r
+          param.setParamValue(BOOLEAN_TRUE_VALUE);\r
+        } else if (Boolean.FALSE.toString().equalsIgnoreCase(param.getParamValue().trim())) {\r
+          param.setParamValue(BOOLEAN_FALSE_VALUE);\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  private NetConfResponse getEmptyResponse() {\r
+    NetConfResponse response = new NetConfResponse();\r
+    ErrorCodeMetaData errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");\r
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
+    errorCode.setFaultCode("0");\r
+    errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
+    errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
+    errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
+    errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
+    response.setErrorCode(errorCode);\r
+    return response;\r
+  }\r
+\r
+  private NetConfResponse getTimeOutResponse() {\r
+    // prepare timeout error response\r
+    NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
+    ErrorCodeMetaData errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
+\r
+    errorCode.setFaultCode("8006");\r
+    errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
+    errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
+    errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
+    errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
+    timeOutErrorResponse.setErrorCode(errorCode);\r
+    timeOutErrorResponse.setErrorMessage("TR069 device request has been timed out.");\r
+    return timeOutErrorResponse;\r
+  }\r
+\r
+  public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters) {\r
+    List<ParameterDTO> result = new ArrayList<>();\r
+    for (ParameterDTO param : parameters) {\r
+      MOMetaData metaData = metaDataUtil.getMetaDataByNetConfName(param.getParamName());\r
+      if (null != metaData && !metaData.isReadOnly()) {\r
+        String tr069MoName =\r
+            MOMetaDataUtil.getTR69MOByReplacingIndexes(param.getParamName(), metaData.getMoName());\r
+        param.setDataType(metaData.getDataType());\r
+        param.setParamName(tr069MoName);\r
+        result.add(param);\r
+      }\r
+    }\r
+    return result;\r
+  }\r
+\r
+  private List<ParameterDTO> filteredGetParameters(List<ParameterDTO> parameters) {\r
+\r
+    return metaDataUtil.getSupportedChildParameters(parameters);\r
+  }\r
+\r
+  @Override\r
+  public boolean handelRegisterEvent(NetConfServerDetails request) {\r
+    LOG.debug("processing the handelRegisterEvent started");\r
+    boolean result = false;\r
+    try {\r
+      vesnotiSender.sendNotification(null, request);\r
+    } catch (Exception e) {\r
+      LOG.error("processing the handelRegisterEvent exception occurred");\r
+      result = false;\r
+    }\r
+    LOG.debug("processing the handelRegisterEvent completed");\r
+    return result;\r
+  }\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/sync/SynchronizedRequestHandler.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/sync/SynchronizedRequestHandler.java
new file mode 100644 (file)
index 0000000..6f86543
--- /dev/null
@@ -0,0 +1,100 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.sync;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.concurrent.Semaphore;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.commscope.tr069adapter.mapper.acs.ACSRequestSender;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class SynchronizedRequestHandler {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(SynchronizedRequestHandler.class);\r
+\r
+  private static Map<Long, DeviceRPCResponse> opResultMap = new HashMap<>();\r
+  private static Map<Long, Semaphore> semaphoreMap = new HashMap<>();\r
+\r
+  @Autowired\r
+  ACSRequestSender tr069RequestSender;\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  public DeviceRPCResponse performDeviceOperation(DeviceRPCRequest deviceRPCRequest) {\r
+    Long opId = tr069RequestSender.sendRequest(deviceRPCRequest);\r
+    if (null == opId) {\r
+      LOG.error("Request could not be sent. opId is null");\r
+      return null;\r
+    }\r
+    boolean isSuccess = false;\r
+    try {\r
+      isSuccess = waitForResult(opId);\r
+    } catch (InterruptedException e) {\r
+      LOG.debug(\r
+          "InterruptedException while waiting for tr069 operation result for operation request {}",\r
+          deviceRPCRequest);\r
+      LOG.error("Exception : {}", e.getMessage());\r
+      Thread.currentThread().interrupt();\r
+    }\r
+    DeviceRPCResponse result = null;\r
+    if (!isSuccess) {\r
+      LOG.error("Request got timed out.");\r
+    } else {\r
+      result = getOperationResult(opId);\r
+      LOG.debug("Received operation result for opId = {} GET-CONFIG : {}", opId, result);\r
+\r
+    }\r
+    return result;\r
+\r
+  }\r
+\r
+  public void notifyResult(DeviceRPCResponse opResult) {\r
+    opResultMap.put(opResult.getOperationId(), opResult);\r
+    Semaphore mutex = semaphoreMap.remove(opResult.getOperationId());\r
+    mutex.release();\r
+  }\r
+\r
+  private DeviceRPCResponse getOperationResult(long opId) {\r
+    return opResultMap.remove(opId);\r
+  }\r
+\r
+  private boolean waitForResult(long opId) throws InterruptedException {\r
+    LOG.debug("Waiting for operation result for opId : {}", opId);\r
+    Semaphore semaphore = new Semaphore(0);\r
+    semaphoreMap.put(opId, semaphore);\r
+    LOG.debug("Semaphore MAP size = {}", semaphoreMap.size());\r
+    LOG.debug("opResultMap MAP size = {}", opResultMap.size());\r
+    Integer timeout = 0;\r
+    if (null != config.getRequesTimeout()) {\r
+      timeout = Integer.valueOf(config.getRequesTimeout());\r
+    }\r
+    return semaphore.tryAcquire(timeout, TimeUnit.SECONDS);\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/util/ErrorCodeUtil.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/util/ErrorCodeUtil.java
new file mode 100644 (file)
index 0000000..13f9a6a
--- /dev/null
@@ -0,0 +1,83 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.util;\r
+\r
+import com.fasterxml.jackson.core.type.TypeReference;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.charset.StandardCharsets;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import javax.annotation.PostConstruct;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.commscope.tr069adapter.mapper.ErrorCodeMetaData;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class ErrorCodeUtil {\r
+\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(ErrorCodeUtil.class);\r
+\r
+  private static final String ERROR_CODE_FILE = "error-code-mapping.json";\r
+  private static Map<String, ErrorCodeMetaData> errorCodeMap;\r
+\r
+  @PostConstruct\r
+  public static void loadErrorCodeData() {\r
+    File file = new File(ERROR_CODE_FILE);\r
+    try {\r
+      errorCodeMap = getMetaDataAsMap(file);\r
+    } catch (IOException e) {\r
+      LOG.error("Exception : {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+  public void printErrorCodeMap() {\r
+    for (Entry<String, ErrorCodeMetaData> entry : errorCodeMap.entrySet()) {\r
+      LOG.debug("KEY= {}", entry.getKey());\r
+      LOG.debug("VALUE= {}", entry.getValue());\r
+    }\r
+  }\r
+\r
+  private static Map<String, ErrorCodeMetaData> getMetaDataAsMap(File file) throws IOException {\r
+\r
+    String json = FileUtils.readFileToString(file, StandardCharsets.UTF_8);\r
+\r
+    Map<String, ErrorCodeMetaData> result = null;\r
+    ObjectMapper mapper = new ObjectMapper();\r
+    try {\r
+      result = mapper.readValue(json, new TypeReference<Map<String, ErrorCodeMetaData>>() {});\r
+    } catch (IOException e) {\r
+      LOG.error("IOException while loading device model meta data {}", e.toString());\r
+      LOG.error("Exception : {}", e.getMessage());\r
+    }\r
+    return result;\r
+  }\r
+\r
+  public ErrorCodeMetaData getErrorCodeMetaData(String errorCode) {\r
+    return errorCodeMap.get(errorCode);\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/util/MOMetaDataUtil.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/util/MOMetaDataUtil.java
new file mode 100644 (file)
index 0000000..e2711c7
--- /dev/null
@@ -0,0 +1,214 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.util;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.charset.StandardCharsets;\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import javax.annotation.PostConstruct;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.mapper.MOMetaData;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class MOMetaDataUtil {\r
+\r
+  private static final String STRING_I = ".{i}.";\r
+  private static final Logger LOG = LoggerFactory.getLogger(MOMetaDataUtil.class);\r
+  private static final String GENERIC_INDEX_REGEX = "\\.\\{[i-l]\\}\\.";\r
+  private static final String INDEX_REGEX = "\\.[0-9]{1,}\\.";\r
+  private static final String MO_META_DATA_FILE_LOCATION = "mapper-schema";\r
+  private Map<String, MOMetaData> metaDataMap;\r
+  private Map<String, String> metaDataReverseMap;\r
+  public static final String ORAN_SW_MGMT_URI = "urn:o-ran:software-management:1.0";\r
+  private static HashMap<String, String> nameSpaces = new HashMap<>();\r
+\r
+  @PostConstruct\r
+  public void loadMetaData() {\r
+    try {\r
+      LOG.info("Loading mapper schema");\r
+      if (metaDataMap != null)\r
+        metaDataMap.clear();\r
+      if (metaDataReverseMap != null)\r
+        metaDataReverseMap.clear();\r
+      getMetaDataAsMap(MO_META_DATA_FILE_LOCATION);\r
+      LOG.info("Loading mapper schema successfully completed");\r
+    } catch (IOException e) {\r
+      LOG.error("Exception : {}", e.getMessage());\r
+    }\r
+  }\r
+\r
+  private void getMetaDataAsMap(String fileLocation) throws IOException {\r
+    metaDataMap = new HashMap<>();\r
+    metaDataReverseMap = new HashMap<>();\r
+    Collection<File> files = FileUtils.listFiles(new File(fileLocation), null, false);\r
+\r
+    for (File file : files) {\r
+      LOG.info("Loading mapper schema from {}", file.getName());\r
+      List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);\r
+      for (String line : lines) {\r
+        if (line != null && line.startsWith("#")) {\r
+          continue;\r
+        }\r
+        if (line != null && line.split(",").length >= 3) {\r
+          String[] split = line.split(",");\r
+          boolean isReadOnly = false;\r
+          boolean isTabluar = false;\r
+          boolean isTabObject = false;\r
+          String dataType = "";\r
+\r
+          if (split[2].contains("-")) {\r
+            String[] dataAttr = split[2].split("-");\r
+            if ("Tabular".equalsIgnoreCase(dataAttr[0]))\r
+              isTabluar = true;\r
+            if ("ReadOnly".equalsIgnoreCase(dataAttr[1]))\r
+              isReadOnly = true;\r
+          } else if ("TabularObject".equalsIgnoreCase(split[2])) {\r
+            isTabObject = true;\r
+          }\r
+          if (split.length > 3) {\r
+            dataType = split[3];\r
+          }\r
+          if (isTabObject) {\r
+            String logMessage = split[1].substring(0, split[1].length() - 5);\r
+            LOG.info("Adding Parent Objects {}", logMessage);\r
+            String substring = split[0].substring(0, split[0].length() - 4);\r
+            MOMetaData metaTabData =\r
+                new MOMetaData(substring, dataType, isReadOnly, isTabluar, isTabObject);\r
+            if ((split.length > 4 && split[4] != null) && split[4].trim().length() > 0) {\r
+              metaTabData.setURI(split[4]);\r
+            }\r
+            metaDataMap.put(logMessage, metaTabData);\r
+          }\r
+          MOMetaData metaData =\r
+              new MOMetaData(split[0], dataType, isReadOnly, isTabluar, isTabObject);\r
+          if ((split.length > 4 && split[4] != null) && split[4].trim().length() > 0) {\r
+            metaData.setURI(split[4]);\r
+          }\r
+          metaDataMap.put(split[1], metaData);\r
+          metaDataReverseMap.put(split[0], split[1]);\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  public MOMetaData getMetaDataByNetConfName(String moName) {\r
+    String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
+    return metaDataMap.get(moNameInGnrForm);\r
+  }\r
+\r
+  public MOMetaData getMetaDataByTR69Name(String moName) {\r
+    String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
+    String netconfMoName = metaDataReverseMap.get(moNameInGnrForm);\r
+    return metaDataMap.get(netconfMoName);\r
+  }\r
+\r
+  public String getNetconfNameByTR69Name(String moName) {\r
+    String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
+    return metaDataReverseMap.get(moNameInGnrForm);\r
+  }\r
+\r
+  public String getNetconfNameByTR69NameWithIndexes(String moName) {\r
+    String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
+    String netConfNMoName = metaDataReverseMap.get(moNameInGnrForm);\r
+    return netConfNMoName != null ? getNetConfMOByReplacingIndexes(netConfNMoName, moName)\r
+        : netConfNMoName;\r
+  }\r
+\r
+  public Set<String> getAllMONames() {\r
+    return metaDataMap.keySet();\r
+  }\r
+\r
+  public String getNameSpace(String nodeName) {\r
+    return nameSpaces.get(nodeName);\r
+  }\r
+\r
+  public List<ParameterDTO> getSupportedChildParameters(List<ParameterDTO> parameters) {\r
+    List<ParameterDTO> result = new ArrayList<>();\r
+    Set<MOMetaData> allMatchedChilds = new HashSet<>();\r
+    for (ParameterDTO param : parameters) {\r
+      String parentMONameInGnrc = param.getParamName().replaceAll(INDEX_REGEX, STRING_I);\r
+      MOMetaData moData = metaDataMap.get(parentMONameInGnrc);\r
+      if (moData != null) {\r
+        allMatchedChilds.add(new MOMetaData(\r
+            getTR69MOByReplacingIndexes(param.getParamName(), moData.getMoName()),\r
+            moData.getDataType(), moData.isReadOnly(), moData.isTabluar(), moData.isTabluarObj()));\r
+      }\r
+    }\r
+    for (MOMetaData metaData : allMatchedChilds) {\r
+      ParameterDTO param = new ParameterDTO();\r
+      String paramName = metaData.getMoName();\r
+\r
+      param.setParamName(paramName);\r
+      param.setDataType(metaData.getDataType());\r
+      result.add(param);\r
+    }\r
+    return result;\r
+  }\r
+\r
+  public List<ParameterDTO> getDeviceSupportedChildParameters() {\r
+    List<ParameterDTO> result = new ArrayList<>();\r
+\r
+    ParameterDTO param1 = new ParameterDTO();\r
+    param1.setParamName("Device.DeviceInfo.Description");\r
+    param1.setParamValue("Internal");\r
+    param1.setDataType("string");\r
+    result.add(param1);\r
+    return result;\r
+  }\r
+\r
+  public static String getTR69MOByReplacingIndexes(String netconfMo, String tr69Mo) {\r
+\r
+    String[] split = netconfMo.split("\\.");\r
+    for (int i = 0; i < split.length; i++) {\r
+      if (split[i].matches("[0-9]{1,}")) {\r
+        tr69Mo = tr69Mo.replaceFirst(GENERIC_INDEX_REGEX, "." + split[i] + ".");\r
+      }\r
+    }\r
+\r
+    return tr69Mo;\r
+\r
+  }\r
+\r
+  public static String getNetConfMOByReplacingIndexes(String netconfMo, String tr69Mo) {\r
+\r
+    String[] split = tr69Mo.split("\\.");\r
+    for (int i = 0; i < split.length; i++) {\r
+      if (split[i].matches("[0-9]{1,}")) {\r
+        netconfMo = netconfMo.replaceFirst(GENERIC_INDEX_REGEX, "." + split[i] + ".");\r
+      }\r
+    }\r
+\r
+    return netconfMo;\r
+\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/util/NetconfToTr069MapperUtil.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/util/NetconfToTr069MapperUtil.java
new file mode 100644 (file)
index 0000000..680495e
--- /dev/null
@@ -0,0 +1,430 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.util;\r
+\r
+import java.io.Serializable;\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.StringTokenizer;\r
+\r
+import javax.xml.XMLConstants;\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.parsers.ParserConfigurationException;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationOptions;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
+import org.commscope.tr069adapter.mapper.ErrorCodeMetaData;\r
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+import org.xml.sax.InputSource;\r
+\r
+@Component\r
+public class NetconfToTr069MapperUtil {\r
+\r
+  @Autowired\r
+  MOMetaDataUtil metaDataUtil;\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(NetconfToTr069MapperUtil.class);\r
+  private static final String INDEX_STR = "index";\r
+  private static final String INDEX_REGEX = "[0-9]{1,}";\r
+\r
+  @Autowired\r
+  private ErrorCodeUtil errorCodeUtil;\r
+\r
+  public static Element convertStringToDocument(String xmlStr) {\r
+    try {\r
+      Document doc = convertStringToDocumentXml(xmlStr);\r
+      if (null != doc)\r
+        return doc.getDocumentElement();\r
+    } catch (Exception e) {\r
+      logger.error("Error while converting String to element {}", e.getMessage());\r
+    }\r
+    return null;\r
+  }\r
+\r
+  public static Document convertStringToDocumentXml(String xmlStr) {\r
+    try {\r
+      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+      factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
+      DocumentBuilder builder;\r
+      builder = factory.newDocumentBuilder();\r
+      return builder.parse(new InputSource(new StringReader(xmlStr)));\r
+    } catch (Exception e) {\r
+      logger.error("Error while converting String to element {}", e.getMessage());\r
+    }\r
+    return null;\r
+  }\r
+\r
+  public static DeviceRPCRequest prepareTR069Request(String deviceId, Element operationElement,\r
+      String netconfTag, TR069OperationCode opCode) {\r
+    Node requestDataNode = getDeviceDataNode(operationElement, netconfTag);\r
+    if (requestDataNode == null) {\r
+      logger.debug("No matching device parameters found in the netconf request XML.");\r
+      return null;\r
+    }\r
+    Map<String, String> map = getParameterMapForNode(requestDataNode, -1);\r
+    List<ParameterDTO> params = new ArrayList<>();\r
+\r
+    for (java.util.Map.Entry<String, String> entry : map.entrySet()) {\r
+      if (!entry.getKey().equalsIgnoreCase("filter")) {\r
+        String moName = entry.getKey();\r
+        String value = entry.getValue();\r
+        if (moName.endsWith("." + INDEX_STR)\r
+            && (TR069OperationCode.GET_PARAMETER_VALUES.equals(opCode)\r
+                || TR069OperationCode.DELETE_OBJECT.equals(opCode))) {\r
+          logger.debug("Index node found : {}", moName);\r
+          moName = moName.replaceFirst("." + INDEX_STR, ".");\r
+          value = null;\r
+\r
+        }\r
+\r
+        ParameterDTO param = new ParameterDTO(moName, value);\r
+        params.add(param);\r
+      }\r
+    }\r
+\r
+    TR069OperationDetails opDetails = new TR069OperationDetails();\r
+    opDetails.setOpCode(opCode);\r
+    opDetails.setParmeters(params);\r
+\r
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
+    tr069DeviceDetails.setDeviceId(deviceId);\r
+    deviceRPCRequest.setOpDetails(opDetails);\r
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
+    OperationOptions options = new OperationOptions();\r
+    options.setExecutionTimeout(60l);\r
+    deviceRPCRequest.setOptions(options);\r
+    return deviceRPCRequest;\r
+  }\r
+\r
+  public NetConfResponse getNetconfResponse(DeviceRPCResponse opResult) {\r
+    NetConfResponse netConfResponse = new NetConfResponse();\r
+    ErrorCodeMetaData errorCodeMetaData =\r
+        errorCodeUtil.getErrorCodeMetaData(opResult.getFaultKey());\r
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
+    if (errorCodeMetaData != null) {\r
+      errorCode.setFaultCode(opResult.getFaultKey());\r
+      errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
+      errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
+      errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
+      errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
+      netConfResponse.setErrorCode(errorCode);\r
+      netConfResponse.setErrorMessage(opResult.getFaultString());\r
+    } else if (opResult.getFaultKey() != null && opResult.getFaultString() != null) {\r
+      errorCode.setFaultCode(opResult.getFaultKey());\r
+      errorCode.setErrorMessage(opResult.getFaultString());\r
+      errorCode.setErrorType("application");\r
+      errorCode.setErrorTag("operation-failed");\r
+      errorCode.setErrorSeverity("ERROR");\r
+      netConfResponse.setErrorCode(errorCode);\r
+      netConfResponse.setErrorMessage(opResult.getFaultString());\r
+    }\r
+    netConfResponse.setNetconfResponseXml(\r
+        getNetconfResponseXML(opResult.getOperationResponse().getParameterDTOs()));\r
+    return netConfResponse;\r
+  }\r
+\r
+  private String getNetconfResponseXML(List<ParameterDTO> parameters) {\r
+    if (null == parameters || parameters.isEmpty()) {\r
+\r
+      return null;\r
+    }\r
+    Collections.sort(parameters, new SortByParamterName());\r
+\r
+    String result = null;\r
+    try {\r
+      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();\r
+      docFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      docFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
+      DocumentBuilder docBuilder = docFactory.newDocumentBuilder();\r
+      Document doc = docBuilder.newDocument();\r
+\r
+      Map<String, Element> parentNodeMap = new HashMap<>();\r
+      Element dataNode = null; // root of all nodes\r
+\r
+      for (ParameterDTO paramDto : parameters) {\r
+        String paramName =\r
+            metaDataUtil.getNetconfNameByTR69NameWithIndexes(paramDto.getParamName());\r
+        String paramValue = paramDto.getParamValue();\r
+        if (paramValue == null || paramValue.trim().isEmpty()) {\r
+          logger.debug("Values is empty so skipping this parameter.");\r
+          continue;\r
+        }\r
+        StringTokenizer tokenizer = new StringTokenizer(paramName, ".");\r
+        String parentNodeName = null;\r
+        String parentNodeKey = null;\r
+        Element parentNode = null;\r
+        while (tokenizer.hasMoreElements()) {\r
+          String nodeName = (String) tokenizer.nextElement();\r
+          if (null == parentNodeName) { // construct first node or\r
+                                        // Device node\r
+            parentNodeName = nodeName;\r
+            parentNodeKey = nodeName;\r
+            // check if the node already exists in parentNodeMap\r
+            parentNode = parentNodeMap.get(parentNodeKey);\r
+            if (null == dataNode) {\r
+              dataNode = parentNode;\r
+            }\r
+\r
+          } else if (nodeName.matches(INDEX_REGEX)) { // construct\r
+                                                      // tabular and\r
+                                                      // index nodes\r
+\r
+            // get parent tabular node from parent MAP\r
+            StringBuilder bld = new StringBuilder(parentNodeKey);\r
+            bld.append(".");\r
+            bld.append(nodeName);\r
+            parentNodeKey = bld.toString();\r
+            Element node = parentNodeMap.get(parentNodeKey);\r
+\r
+            // create a tabular parent node if doesn't exit in MAP\r
+            if (null == node) {\r
+              if (metaDataUtil.getMetaDataByNetConfName(parentNodeKey + ".") != null\r
+                  && metaDataUtil.getMetaDataByNetConfName(parentNodeKey + ".").getURI() != null) {\r
+                node = doc.createElementNS(\r
+                    metaDataUtil.getMetaDataByNetConfName(parentNodeKey + ".").getURI(),\r
+                    parentNodeName);\r
+              } else {\r
+                node = doc.createElement(parentNodeName);\r
+              }\r
+              parentNodeMap.put(parentNodeKey, node);\r
+\r
+              // update current tabular parent node.\r
+              if (null != parentNode)\r
+                parentNode.appendChild(node);\r
+\r
+              // prepare and add index node to tabular parent node\r
+              Element indexNode = doc.createElement(INDEX_STR);\r
+              indexNode.setTextContent(nodeName);\r
+              node.appendChild(indexNode);\r
+            }\r
+            parentNode = node; // move parent to child\r
+            parentNodeName = nodeName;\r
+          } else if (parentNodeName.matches(INDEX_REGEX)) { // move to\r
+                                                            // next\r
+                                                            // node\r
+                                                            // if\r
+                                                            // tabular\r
+                                                            // attribute\r
+                                                            // is\r
+                                                            // found\r
+            StringBuilder bld = new StringBuilder(parentNodeName);\r
+            bld.append(".");\r
+            bld.append(nodeName);\r
+            parentNodeKey = bld.toString();\r
+            parentNodeName = nodeName;\r
+          } else {\r
+            // construct intermediate nodes\r
+            Element node = parentNodeMap.get(parentNodeKey);\r
+            if (null == node) {\r
+              if (metaDataUtil.getMetaDataByNetConfName(parentNodeKey) != null\r
+                  && metaDataUtil.getMetaDataByNetConfName(parentNodeKey).getURI() != null) {\r
+                node = doc.createElementNS(\r
+                    metaDataUtil.getMetaDataByNetConfName(parentNodeKey).getURI(), parentNodeName);\r
+                if (dataNode == null)\r
+                  dataNode = node;\r
+              } else {\r
+                node = doc.createElement(parentNodeName);\r
+              }\r
+              parentNodeMap.put(parentNodeKey, node);\r
+              if (null != parentNode)\r
+                parentNode.appendChild(node);\r
+\r
+            }\r
+            StringBuilder bld = new StringBuilder(parentNodeKey);\r
+            bld.append(".");\r
+            bld.append(nodeName);\r
+            parentNodeKey = bld.toString();\r
+            parentNodeName = nodeName;\r
+            parentNode = node;\r
+          }\r
+        }\r
+        // construct leaf node\r
+        Element leafNode = doc.createElement(parentNodeName);\r
+        leafNode.setTextContent(paramValue);\r
+        if (null != parentNode)\r
+          parentNode.appendChild(leafNode);\r
+      }\r
+\r
+      if (null != dataNode) {\r
+        result = NetconfToTr069MapperUtil.convertDocumentToString(dataNode);\r
+      }\r
+    } catch (ParserConfigurationException pce) {\r
+      logger.error("Exception : {}", pce.getMessage());\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+  public static String convertDocumentToString(Element element) {\r
+    String strxml = null;\r
+    try {\r
+      TransformerFactory transformerFactory = TransformerFactory.newInstance();\r
+      transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");\r
+      Transformer transformer = transformerFactory.newTransformer();\r
+      DOMSource source = new DOMSource(element);\r
+      StreamResult result = new StreamResult(new StringWriter());\r
+      transformer.transform(source, result);\r
+      strxml = result.getWriter().toString();\r
+    } catch (Exception e) {\r
+      logger.error("Error while converting Element to String {}", e.toString());\r
+    }\r
+    logger.debug("Converted XML is : {} ", strxml);\r
+    return strxml;\r
+  }\r
+\r
+  // TODO: Need to optimize the Node element logic for better performance\r
+  private static Map<String, String> getParameterMapForNode(Node moRNode, int numberOfChilds) {\r
+    Map<String, String> result = new HashMap<>();\r
+    if (moRNode.getNodeType() == Node.ELEMENT_NODE) {\r
+      NodeList childs = moRNode.getChildNodes();\r
+      boolean hasChildElements = false;\r
+      if (childs.getLength() > 0) {\r
+        int counter = 0;\r
+        for (int i = 0; i < childs.getLength(); i++) {\r
+          Node cNode = childs.item(i);\r
+          if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {\r
+            counter++;\r
+          }\r
+        }\r
+\r
+        for (int i = 0; i < childs.getLength(); i++) {\r
+          Node cNode = childs.item(i);\r
+          if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {\r
+            hasChildElements = true;\r
+            Map<String, String> subResult = getParameterMapForNode(cNode, counter);\r
+            result.putAll(subResult);\r
+          }\r
+        }\r
+      }\r
+      if (!hasChildElements) {\r
+        String moName = getMOName(moRNode);\r
+        if ((null != moName && !moName.endsWith("." + INDEX_STR))\r
+            || (null != moName && numberOfChilds == 1)) {\r
+          result.put(moName, moRNode.getTextContent());\r
+        }\r
+      }\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+  private static String getMOName(Node moRNode) {\r
+    String result = removeNS(moRNode.getNodeName());\r
+    Node pNode = moRNode;\r
+    while (true) {\r
+      pNode = pNode.getParentNode();\r
+      if (pNode == null || pNode.getNodeType() != Node.ELEMENT_NODE\r
+          || pNode.getNodeName().equals("edit-config") || pNode.getNodeName().equals("config")\r
+          || pNode.getNodeName().equals("get-config") || pNode.getNodeName().equals("filter")\r
+          || pNode.getNodeName().equals("get")) {\r
+        return result;\r
+      } else {\r
+        String indexStr = getMOIndex(pNode);\r
+        StringBuilder bld = new StringBuilder(removeNS(pNode.getNodeName()));\r
+        bld.append(".");\r
+        if (indexStr == null) {\r
+          bld.append(result);\r
+          result = bld.toString();\r
+        } else {\r
+          bld.append(indexStr);\r
+          bld.append(".");\r
+          bld.append(result);\r
+          result = bld.toString();\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  private static Node getDeviceDataNode(Element el, String filter) {\r
+    try {\r
+      NodeList nodeList = el.getElementsByTagName(filter);\r
+      if (nodeList.getLength() > 0) {\r
+        nodeList = nodeList.item(0).getChildNodes();\r
+        for (int i = 0; i < nodeList.getLength(); i++) {\r
+          Node node = nodeList.item(i);\r
+          if (node.getNodeType() == Node.ELEMENT_NODE) {\r
+            return node;\r
+          }\r
+        }\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("exception occured while parsing the request xml {}", e.getMessage());\r
+    }\r
+    return null;\r
+  }\r
+\r
+  private static String removeNS(String nodeName) {\r
+    // remove name space\r
+    int li = nodeName.lastIndexOf(':');\r
+    nodeName = nodeName.substring(li + 1);\r
+    return nodeName;\r
+  }\r
+\r
+  private static String getMOIndex(Node pNode) {\r
+    if (null != pNode) {\r
+      NodeList nodeList = pNode.getChildNodes();\r
+      for (int i = 0; i < nodeList.getLength(); i++) {\r
+        Node childNode = nodeList.item(i);\r
+        String nodeName = removeNS(childNode.getNodeName());\r
+        if (nodeName.equalsIgnoreCase(INDEX_STR)) {\r
+          return childNode.getTextContent();\r
+        }\r
+      }\r
+    }\r
+    return null;\r
+  }\r
+\r
+}\r
+\r
+\r
+class SortByParamterName implements Comparator<ParameterDTO>, Serializable {\r
+  private static final long serialVersionUID = 3010693349267067945L;\r
+\r
+  public int compare(ParameterDTO a, ParameterDTO b) {\r
+    return a.getParamName().compareTo(b.getParamName());\r
+  }\r
+}\r
diff --git a/mapper/src/main/java/org/commscope/tr069adapter/mapper/ves/VESNotificationSender.java b/mapper/src/main/java/org/commscope/tr069adapter/mapper/ves/VESNotificationSender.java
new file mode 100644 (file)
index 0000000..6ced95d
--- /dev/null
@@ -0,0 +1,72 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper.ves;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
+import org.commscope.tr069adapter.mapper.acs.impl.PnPPreProvisioningHandler;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.VESNotification;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class VESNotificationSender {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(VESNotificationSender.class);\r
+\r
+  @Autowired\r
+  MapperConfigProperties config;\r
+\r
+  @Autowired\r
+  PnPPreProvisioningHandler pnpPreProvisioningHandler;\r
+\r
+  @Autowired\r
+  VESNotificationSender vesnotiSender;\r
+\r
+  @Autowired\r
+  RestTemplate restTemplate;\r
+\r
+  public VESNotificationResponse sendNotification(DeviceInform deviceInform,\r
+      NetConfServerDetails serverInfo) {\r
+    final String uri = getUri();\r
+    LOG.debug("Posting ves event to ves notifier {}", uri);\r
+\r
+    VESNotification vesNotifi = new VESNotification();\r
+    if (deviceInform != null) {\r
+      vesNotifi.seteNodeBName(\r
+          pnpPreProvisioningHandler.getEnodeBName(deviceInform.getDeviceDetails().getDeviceId()));\r
+    } else {\r
+      vesNotifi.seteNodeBName(serverInfo.getEnodeBName());\r
+    }\r
+    vesNotifi.setNetconfDetails(serverInfo);\r
+    vesNotifi.setDevnotification(deviceInform);\r
+\r
+    return restTemplate.postForObject(uri, vesNotifi, VESNotificationResponse.class);\r
+  }\r
+\r
+  private String getUri() {\r
+    return config.getVesUri();\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/main/resources/application.properties b/mapper/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..0a5657e
--- /dev/null
@@ -0,0 +1,31 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# Spring boot application properties\r
+spring.application.name=tr069adapter-netconfig-mapper\r
+server.port=${MAPPER_REST_PORT}\r
+config.requesTimeout=${REQUEST_TIMEOUT}\r
+config.alarmMORegex=${ALARM_MO_REGEX}\r
+config.preConfigureOnPNP=${preConfigureOnPNP}\r
+config.sbiUri=http://${SBI_REST_HOST}:${SBI_REST_PORT}/MapperService/initiateDeviceOperation\r
+config.configDBUri=http://${CONFIG_DB_REST_HOST}:${CONFIG_DB_REST_PORT}/getConfig/\r
+config.nbiNotificationUri=http://${NBI_REST_HOST}:${NBI_REST_PORT}/netConfNotificationService/notification\r
+config.nbiServerManagerUri=http://${NBI_REST_HOST}:${NBI_REST_PORT}/netConfServerManagerService\r
+config.vesUri=http://${VES_REST_HOST}:${VES_REST_PORT}/vesagent/deviceEvent\r
+config.netConfServerIP=${netConfServerIP};\r
+config.netConfServerPort=${netConfServerPort};\r
diff --git a/mapper/src/main/resources/log4j2.xml b/mapper/src/main/resources/log4j2.xml
new file mode 100644 (file)
index 0000000..b12df3b
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<Configuration status="DEBUG" monitorInterval="30">\r
+    <Properties>\r
+        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %m%n</Property>\r
+        <Property name="APP_LOG_ROOT">/logs</Property>\r
+    </Properties>\r
+    <Appenders>\r
+       <Console name="console" target="SYSTEM_OUT" follow="true">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+        </Console>\r
+        \r
+        <RollingFile name="applicationLog"\r
+            fileName="${APP_LOG_ROOT}/debug/application-debug.log"\r
+            filePattern="${APP_LOG_ROOT}/debug/application-debug-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout>\r
+               <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%X{client}] [%.-40t] %-25.45c{1} %-5p: %m%n</pattern>\r
+               <header>Debug Log started at: $${date:yyyy-MM-dd HH:mm:ss}</header>\r
+            </PatternLayout>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/debug/" maxDepth="1">\r
+                    <IfFileName glob="application-debug-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+  \r
+               <RollingFile name="springLog" \r
+                       fileName="${APP_LOG_ROOT}/thirdparty/spring-framework.log"\r
+            filePattern="${APP_LOG_ROOT}/thirdparty/spring-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/thirdparty/" maxDepth="1">\r
+                    <IfFileName glob="spring-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+   \r
+       <RollingFile name="thirdPartyLog" \r
+                       fileName="${APP_LOG_ROOT}/thirdparty/third-party-framework.log"\r
+            filePattern="${APP_LOG_ROOT}/thirdparty/third-party-framework-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/thirdparty/" maxDepth="1">\r
+                    <IfFileName glob="third-party-framework*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+             \r
+    </Appenders>\r
+    \r
+    <Loggers>\r
+       <Logger name="org.commscope.tr069adapter" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+               <appender-ref ref="applicationLog"/>\r
+       </Logger>\r
+\r
+       <Logger name="org" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="thirdPartyLog" />\r
+        </Logger>\r
+       \r
+       <Logger name="org.springframework" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="springLog" />\r
+        </Logger>\r
+        \r
+        <Root level="DEBUG" additivity="false"/>\r
+    </Loggers>\r
+</Configuration>\r
diff --git a/mapper/src/test/java/org/commscope/tr069adapter/mapper/ACSNotificationHandlerImplTest.java b/mapper/src/test/java/org/commscope/tr069adapter/mapper/ACSNotificationHandlerImplTest.java
new file mode 100644 (file)
index 0000000..a2e91ec
--- /dev/null
@@ -0,0 +1,178 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertNull;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.acs.common.inform.ValueChangeInform;\r
+import org.commscope.tr069adapter.mapper.acs.impl.ACSNotificationHandlerImpl;\r
+import org.commscope.tr069adapter.mapper.boot.MapperServiceBooter;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetconfServerManagementError;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfServerManager;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mock;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+\r
+@SpringBootTest(classes = {MapperServiceBooter.class})\r
+@RunWith(SpringRunner.class)\r
+public class ACSNotificationHandlerImplTest {\r
+\r
+  @Autowired\r
+  ACSNotificationHandlerImpl aCSNotificationHandlerImpl;\r
+\r
+  @Mock\r
+  NetConfServerManager netConfServerManager;\r
+\r
+  @Test\r
+  public void testHandleBootStrapNotification() {\r
+\r
+    BootstrapInform notification = new BootstrapInform();\r
+    List<ParameterDTO> params = new ArrayList<ParameterDTO>();\r
+    ParameterDTO param = new ParameterDTO();\r
+    param.setParamName("ExpeditedEvent");\r
+    params.add(param);\r
+    notification.setDeviceDetails(getDeviceDetails());\r
+    notification.setParameters(params);\r
+    NetConfServerDetails serverInfo = new NetConfServerDetails();\r
+    serverInfo.setError(NetconfServerManagementError.SUCCESS);\r
+    Mockito.when(netConfServerManager.createNetconfServer(Mockito.anyString(), Mockito.anyString()))\r
+        .thenReturn(serverInfo);\r
+    /*\r
+     * String URI = "http://tr069adapter-netconf-server:8181/netConfServerManagerService";\r
+     * Mockito.when(netConfServerManager.getNetconfServerManagerRestUri()). thenReturn(value)\r
+     */\r
+    aCSNotificationHandlerImpl.handleNotification(notification);\r
+    assertNull(notification.getValueChangeNotification());\r
+  }\r
+\r
+  @Test\r
+  public void testHandleBootStrapNotificationNegativeScenario() {\r
+\r
+    BootstrapInform notification = new BootstrapInform();\r
+    List<ParameterDTO> params = new ArrayList<ParameterDTO>();\r
+    ParameterDTO param = new ParameterDTO();\r
+    param.setParamName("Test");\r
+    params.add(param);\r
+    notification.setDeviceDetails(getDeviceDetails());\r
+    notification.setParameters(params);\r
+    // Mockito.doReturn(null).when(netConfServerManager.createNetconfServer(Mockito.anyString(),\r
+    // Mockito.anyString()));\r
+    aCSNotificationHandlerImpl.handleNotification(notification);\r
+    assertNull(notification.getValueChangeNotification());\r
+  }\r
+\r
+  @Test\r
+  public void testHandleBootNotification() {\r
+\r
+    BootInform notification = new BootInform();\r
+    List<ParameterDTO> params = new ArrayList<ParameterDTO>();\r
+    ParameterDTO param = new ParameterDTO();\r
+    param.setParamName("Test");\r
+    params.add(param);\r
+    notification.setDeviceDetails(getDeviceDetails());\r
+    notification.setParameters(params);\r
+    aCSNotificationHandlerImpl.handleNotification(notification);\r
+    assertNull(notification.getValueChangeNotification());\r
+  }\r
+\r
+  @Test\r
+  public void testGetDeviceBootNotification() {\r
+    DeviceInform deviceInform = new DeviceInform();\r
+    deviceInform.setDeviceDetails(getDeviceDetails());\r
+    deviceInform.setParameters(getGeneralParams());\r
+\r
+    BootInform bInform =\r
+        ACSNotificationHandlerImpl.getDeviceBootNotification(deviceInform, TR069InformType.BOOT);\r
+    assertEquals("00005B9A1", bInform.getDeviceDetails().getDeviceId());\r
+    assertNotNull(bInform.getInformTypeList());\r
+    assertEquals(TR069InformType.BOOT, bInform.getInformTypeList().get(0));\r
+  }\r
+\r
+  @Test\r
+  public void testGetDeviceBooStraptNotification() {\r
+    DeviceInform deviceInform = new DeviceInform();\r
+    deviceInform.setDeviceDetails(getDeviceDetails());\r
+    deviceInform.setParameters(getGeneralParams());\r
+\r
+    BootstrapInform bsInform = ACSNotificationHandlerImpl\r
+        .getDeviceBootStrapNotification(deviceInform, TR069InformType.BOOTSTRAP);\r
+    assertEquals("00005B9A1", bsInform.getDeviceDetails().getDeviceId());\r
+    assertNotNull(bsInform.getInformTypeList());\r
+    assertEquals(TR069InformType.BOOTSTRAP, bsInform.getInformTypeList().get(0));\r
+  }\r
+\r
+  @Test\r
+  public void testGetDeviceValueChangeNotification() {\r
+    DeviceInform deviceInform = new DeviceInform();\r
+    deviceInform.setDeviceDetails(getDeviceDetails());\r
+    deviceInform.setParameters(getGeneralParams());\r
+\r
+    ValueChangeInform vInform = ACSNotificationHandlerImpl\r
+        .getDeviceValueChangeNotification(deviceInform, TR069InformType.VALUECHANGE);\r
+    assertEquals("00005B9A1", vInform.getDeviceDetails().getDeviceId());\r
+    assertNotNull(vInform.getInformTypeList());\r
+    assertEquals(TR069InformType.VALUECHANGE, vInform.getInformTypeList().get(0));\r
+  }\r
+\r
+  private DeviceDetails getDeviceDetails() {\r
+    DeviceDetails nf = new DeviceDetails();\r
+    nf.setDeviceId("00005B9A1");\r
+    nf.setDeviceTypeId(50);\r
+    nf.setOui("0005B9");\r
+    nf.setProductClass("LTE_Enterprise_C-RANSC_Cntrl");\r
+    return nf;\r
+  }\r
+\r
+  private DeviceDetails getDeviceDetailsNegativeCase() {\r
+    DeviceDetails nf = new DeviceDetails();\r
+    // nf.setDeviceId("00005B9A1");\r
+    nf.setDeviceTypeId(50);\r
+    nf.setOui("0005B9");\r
+    nf.setProductClass("LTE_Enterprise_C-RANSC_Cntrl");\r
+    return nf;\r
+  }\r
+\r
+  private ArrayList<ParameterDTO> getGeneralParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ManufacturerOUI", "0005B9"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ProductClass", "LTE_Enterprise_C-RANSC_Cntrl"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.HardwareVersion", "750742.00.04"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.SoftwareVersion", "4.3.00.231"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.Manufacturer", "ORAN"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.SerialNumber", "00005B9A1"));\r
+    params.add(new ParameterDTO("Device.IP.Interface.1.IPv4Address.1.IPAddress", "10.211.5.55"));\r
+    return params;\r
+  }\r
+}\r
diff --git a/mapper/src/test/java/org/commscope/tr069adapter/mapper/NetConfRequestReceiverTest.java b/mapper/src/test/java/org/commscope/tr069adapter/mapper/NetConfRequestReceiverTest.java
new file mode 100644 (file)
index 0000000..3561ec8
--- /dev/null
@@ -0,0 +1,278 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import static org.junit.Assert.assertFalse;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Map;\r
+import java.util.concurrent.Semaphore;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.mapper.acs.ACSRequestSender;\r
+import org.commscope.tr069adapter.mapper.boot.MapperServiceBooter;\r
+import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.netconf.controller.NetConfRequestReceiver;\r
+import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+\r
+@SpringBootTest(classes = {MapperServiceBooter.class})\r
+@RunWith(SpringRunner.class)\r
+public class NetConfRequestReceiverTest {\r
+\r
+  @Autowired\r
+  NetConfRequestReceiver receiver;\r
+\r
+  @MockBean\r
+  ACSRequestSender tr069RequestSender;\r
+\r
+  @MockBean\r
+  Semaphore semaphore;\r
+\r
+  @MockBean\r
+  SynchronizedRequestHandler sync;\r
+\r
+  @MockBean\r
+  Map<Long, DeviceRPCResponse> opResultMap;\r
+\r
+  @Test\r
+  public void getConfigRequestTest() {\r
+    Mockito.when(tr069RequestSender.sendRequest(Mockito.anyObject())).thenReturn(10001L);\r
+    Mockito.when(sync.performDeviceOperation(Mockito.anyObject()))\r
+        .thenReturn(prepareDeviceResponseSucess());\r
+\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc/></lte></cell-config></fap-service></services></device></filter></get-config>");\r
+    NetConfResponse nfres = receiver.getConfigRequest(req);\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertNotNull(nfres.getNetconfResponseXml());\r
+  }\r
+\r
+  @Test\r
+  public void getConfigRequestTestTimeOut() throws InterruptedException {\r
+    Mockito.when(tr069RequestSender.sendRequest(Mockito.anyObject())).thenReturn(10001L);\r
+    Mockito.when(semaphore.tryAcquire(Mockito.anyInt(), Mockito.anyObject())).thenReturn(true);\r
+    Mockito.when(opResultMap.remove(Mockito.anyLong())).thenReturn(prepareDeviceResponseSucess());\r
+\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc/></lte></cell-config></fap-service></services></device></filter></get-config>");\r
+    NetConfResponse nfres = receiver.getConfigRequest(req);\r
+    Assert.assertEquals("8006", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("Operation Timed out", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void getConfigRequestWithNoParamTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"></filter></get-config>");\r
+    NetConfResponse nfres = receiver.getConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+\r
+  }\r
+\r
+  @Test\r
+  public void getConfigRequestWithUnknownParamTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"><Intergateway xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc/></lte></cell-config></fap-service></services></Intergateway></filter></get-config>");\r
+    NetConfResponse nfres = receiver.getRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void getRequestTest() {\r
+    Mockito.when(tr069RequestSender.sendRequest(Mockito.anyObject())).thenReturn(10001L);\r
+    Mockito.when(sync.performDeviceOperation(Mockito.anyObject()))\r
+        .thenReturn(prepareDeviceResponseSucess());\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc/></lte></cell-config></fap-service></services></device></filter></get>");\r
+    NetConfResponse nfres = receiver.getRequest(req);\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertNotNull(nfres.getNetconfResponseXml());\r
+  }\r
+\r
+  @Test\r
+  public void getRequestWithNoParamTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"></filter></get>");\r
+    NetConfResponse nfres = receiver.getRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void getRequestWithUnknownParamTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"><Intergateway xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc/></lte></cell-config></fap-service></services></Intergateway></filter></get>");\r
+    NetConfResponse nfres = receiver.getRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void setConfigRequestTest() {\r
+    Mockito.when(tr069RequestSender.sendRequest(Mockito.anyObject())).thenReturn(10001L);\r
+    Mockito.when(sync.performDeviceOperation(Mockito.anyObject()))\r
+        .thenReturn(prepareSPVDeviceResponseSucess());\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><config><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc xmlns:a=\"urn:ietf:params:xml:ns:netconf:base:1.0\" a:operation=\"replace\"><plmn-list><index>1</index><plmnid>310767</plmnid><is-primary>false</is-primary><cell-reserved-for-operator-use>true</cell-reserved-for-operator-use><alias>cpe-131</alias><enable>true</enable></plmn-list></epc></lte></cell-config></fap-service></services></device></config></edit-config>");\r
+    NetConfResponse nfres = receiver.setConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void setConfigRequestWithErrorResTest() {\r
+    Mockito.when(tr069RequestSender.sendRequest(Mockito.anyObject())).thenReturn(10001L);\r
+    Mockito.when(sync.performDeviceOperation(Mockito.anyObject()))\r
+        .thenReturn(prepareDeviceResponseError());\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><config><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc xmlns:a=\"urn:ietf:params:xml:ns:netconf:base:1.0\" a:operation=\"replace\"><plmn-list><index>1</index><plmnid>310767</plmnid><is-primary>false</is-primary><cell-reserved-for-operator-use>true</cell-reserved-for-operator-use><alias>cpe-131</alias><enable>true</enable></plmn-list></epc></lte></cell-config></fap-service></services></device></config></edit-config>");\r
+    NetConfResponse nfres = receiver.setConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("9001", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Request denied", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void setConfigRequestWithNoParamTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><config></config></edit-config>");\r
+    NetConfResponse nfres = receiver.setConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void setConfigRequestWithUnknowParatmerTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><config><InternetGateway xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc xmlns:a=\"urn:ietf:params:xml:ns:netconf:base:1.0\" a:operation=\"replace\"><plmn-list><index>1</index><plmnid>310767</plmnid><is-primary>false</is-primary><cell-reserved-for-operator-use>true</cell-reserved-for-operator-use><alias>cpe-131</alias><enable>true</enable></plmn-list></epc></lte></cell-config></fap-service></services></InternetGateway></config></edit-config>");\r
+    NetConfResponse nfres = receiver.setConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void setConfigRequestInvalidRequestXMLTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><confg><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc xmlns:a=\"urn:ietf:params:xml:ns:netconf:base:1.0\" a:operation=\"replace\"><plmn-list><index>1</index><plmnid>310767</plmnid><is-primary>false<is-primary><cell-reserved-for-operator-use>true<cell-reserved-for-operator-use><name>cpe-131</name><trust>true</trust></plmn-list></epc></lte></cell-config></fap-service></services></device></config></edit-config>");\r
+    NetConfResponse nfres = receiver.setConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+  }\r
+\r
+  @Test\r
+  public void delConfigRequestTest() {\r
+    Mockito.when(tr069RequestSender.sendRequest(Mockito.anyObject())).thenReturn(10001L);\r
+    Mockito.when(sync.performDeviceOperation(Mockito.anyObject()))\r
+        .thenReturn(prepareSPVDeviceResponseSucess());\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><config><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc xmlns:a=\"urn:ietf:params:xml:ns:netconf:base:1.0\" a:operation=\"replace\"><plmn-list><index>1</index><plmnid>310767</plmnid><is-primary>false</is-primary><cell-reserved-for-operator-use>true</cell-reserved-for-operator-use><name>cpe-131</name><trust>true</trust></plmn-list></epc></lte></cell-config></fap-service></services></device></config></edit-config>");\r
+    NetConfResponse nfres = receiver.delConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void delConfigwithUnknownParamterRequestTest() {\r
+    NetConfRequest req = prepareNetConfRequest(\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><target><candidate/></target><config><InternetGateway xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc xmlns:a=\"urn:ietf:params:xml:ns:netconf:base:1.0\" a:operation=\"replace\"><plmn-list><index>1</index><plmnid>310767</plmnid><is-primary>false</is-primary><cell-reserved-for-operator-use>true</cell-reserved-for-operator-use><name>cpe-131</name><trust>true</trust></plmn-list></epc></lte></cell-config></fap-service></services></InternetGateway></config></edit-config>");\r
+    NetConfResponse nfres = receiver.delConfigRequest(req);\r
+    Assert.assertNull(nfres.getNetconfResponseXml());\r
+    Assert.assertEquals("0", nfres.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", nfres.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void handelRegisterEventTest() {\r
+    try {\r
+      assertFalse(receiver\r
+          .handelRegisterEvent(new NetConfServerDetails("00005BA1", "10.211.55.14", "17830")));\r
+    } catch (Exception e) {\r
+    }\r
+\r
+  }\r
+\r
+  private NetConfRequest prepareNetConfRequest(String requestXml) {\r
+    NetConfRequest req = new NetConfRequest();\r
+    req.setDeviceId("0005B9A1");\r
+    req.setRequestXml(requestXml);\r
+    return req;\r
+  }\r
+\r
+  private DeviceRPCResponse prepareDeviceResponseError() {\r
+    DeviceRPCResponse opResult = new DeviceRPCResponse();\r
+    opResult.setFaultKey("9001");\r
+    opResult.setFaultString("Request denied");\r
+    opResult.setDeviceDetails(new DeviceDetails());\r
+    OperationResponse opr = new OperationResponse();\r
+    // opr.setParameterDTOs(getGeneralParams());\r
+    opResult.setOperationResponse(opr);\r
+    return opResult;\r
+  }\r
+\r
+  private DeviceRPCResponse prepareDeviceResponseSucess() {\r
+    DeviceRPCResponse opResult = new DeviceRPCResponse();\r
+    opResult.setFaultKey("0");\r
+    opResult.setDeviceDetails(new DeviceDetails());\r
+    OperationResponse opr = new OperationResponse();\r
+    opr.setParameterDTOs(getGeneralParams());\r
+    opResult.setOperationResponse(opr);\r
+    return opResult;\r
+  }\r
+\r
+  private DeviceRPCResponse prepareSPVDeviceResponseSucess() {\r
+    DeviceRPCResponse opResult = new DeviceRPCResponse();\r
+    opResult.setFaultKey("0");\r
+    opResult.setDeviceDetails(new DeviceDetails());\r
+    OperationResponse opr = new OperationResponse();\r
+    opResult.setOperationResponse(opr);\r
+    return opResult;\r
+  }\r
+\r
+  private ArrayList<ParameterDTO> getGeneralParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ManufacturerOUI", "0005B9"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ProductClass", "LTE_Enterprise_C-RANSC_Cntrl"));\r
+    params.add(new ParameterDTO("Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.PLMNID",\r
+        "30324"));\r
+    return params;\r
+  }\r
+}\r
diff --git a/mapper/src/test/java/org/commscope/tr069adapter/mapper/NetConfServerManagerTest.java b/mapper/src/test/java/org/commscope/tr069adapter/mapper/NetConfServerManagerTest.java
new file mode 100644 (file)
index 0000000..fe258dd
--- /dev/null
@@ -0,0 +1,149 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.mapper.boot.MapperServiceBooter;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfNotificationSender;\r
+import org.commscope.tr069adapter.mapper.netconf.NetConfServerManager;\r
+import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.http.ResponseEntity;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@SpringBootTest(classes = {MapperServiceBooter.class})\r
+@RunWith(SpringRunner.class)\r
+public class NetConfServerManagerTest {\r
+\r
+  @Autowired\r
+  NetConfServerManager server;\r
+\r
+  @Autowired\r
+  NetConfNotificationSender nfSender;\r
+\r
+  @Autowired\r
+  VESNotificationSender vesSender;\r
+\r
+  @MockBean\r
+  RestTemplate restTemplate;\r
+\r
+  @Test\r
+  public void createServerTest() {\r
+    ResponseEntity<Object> res = new ResponseEntity<Object>(\r
+        new NetConfServerDetails("0005B9A1", "10.221.55.14", "17830"), HttpStatus.ACCEPTED);\r
+    Mockito.when(\r
+        restTemplate.postForEntity(Mockito.anyString(), Mockito.anyObject(), Mockito.anyObject()))\r
+        .thenReturn(res);\r
+    NetConfServerDetails nfDetails = server.createNetconfServer("0005B9A1", "EnodB1");\r
+\r
+    Assert.assertNotNull(nfDetails);\r
+    Assert.assertEquals("17830", nfDetails.getListenPort());\r
+  }\r
+\r
+  @Test\r
+  public void createServerFailureWithRestCallTest() {\r
+    NetConfServerDetails nfDetails = server.createNetconfServer("0005B9A1", "EnodB1");\r
+    Assert.assertNull(nfDetails);\r
+  }\r
+\r
+  @Test\r
+  public void sendNotificaionTest() {\r
+    ResponseEntity res = new ResponseEntity<>(HttpStatus.ACCEPTED);\r
+    Mockito.when(\r
+        restTemplate.postForObject(Mockito.anyString(), Mockito.anyObject(), Mockito.anyObject()))\r
+        .thenReturn(res);\r
+    DeviceInform inform = new BootstrapInform();\r
+    inform.setDeviceDetails(getDeviceDetails());\r
+    ArrayList<InformType> list = new ArrayList<>();\r
+    list.add(TR069InformType.BOOTSTRAP);\r
+    inform.setInformTypeList(list);\r
+    inform.setParameters(getGeneralParams());\r
+    ResponseEntity response = nfSender.sendNotification(inform);\r
+    Assert.assertNotNull(response);\r
+    Assert.assertEquals(HttpStatus.ACCEPTED, response.getStatusCode());\r
+  }\r
+\r
+  @Test\r
+  public void sendNotificaionInformNullTest() {\r
+    ResponseEntity res = new ResponseEntity<>(HttpStatus.ACCEPTED);\r
+    Mockito.when(\r
+        restTemplate.postForObject(Mockito.anyString(), Mockito.anyObject(), Mockito.anyObject()))\r
+        .thenReturn(res);\r
+    ResponseEntity response = nfSender.sendNotification(null);\r
+    Assert.assertNull(response);\r
+  }\r
+\r
+  @Test\r
+  public void sendVesEventTest() {\r
+\r
+    Mockito.when(\r
+        restTemplate.postForObject(Mockito.anyString(), Mockito.anyObject(), Mockito.anyObject()))\r
+        .thenReturn(new VESNotificationResponse(202, "sucess"));\r
+\r
+    DeviceInform inform = new BootstrapInform();\r
+    inform.setDeviceDetails(getDeviceDetails());\r
+    ArrayList<InformType> list = new ArrayList<InformType>();\r
+    list.add(TR069InformType.BOOTSTRAP);\r
+    inform.setInformTypeList(list);\r
+    inform.setParameters(getGeneralParams());\r
+    VESNotificationResponse response = vesSender.sendNotification(inform,\r
+        new NetConfServerDetails("0005B9A1", "10.221.55.14", "17830"));\r
+    Assert.assertNotNull(response);\r
+    Assert.assertEquals(202, response.getStatusCode());\r
+  }\r
+\r
+  private ArrayList<ParameterDTO> getGeneralParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ManufacturerOUI", "0005B9"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ProductClass", "LTE_Enterprise_C-RANSC_Cntrl"));\r
+    params.add(new ParameterDTO("Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.PLMNID",\r
+        "30324"));\r
+    params.add(new ParameterDTO(\r
+        "Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.IsPrimary", "1"));\r
+    params.add(\r
+        new ParameterDTO("Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.Enable", "0"));\r
+    return params;\r
+  }\r
+\r
+  private DeviceDetails getDeviceDetails() {\r
+    DeviceDetails nf = new DeviceDetails();\r
+    nf.setDeviceId("00005B9A1");\r
+    nf.setDeviceTypeId(50);\r
+    nf.setOui("0005B9");\r
+    nf.setProductClass("LTE_Enterprise_C-RANSC_Cntrl");\r
+    return nf;\r
+  }\r
+}\r
diff --git a/mapper/src/test/java/org/commscope/tr069adapter/mapper/NetconfToTr069MapperUtilTest.java b/mapper/src/test/java/org/commscope/tr069adapter/mapper/NetconfToTr069MapperUtilTest.java
new file mode 100644 (file)
index 0000000..5dbc344
--- /dev/null
@@ -0,0 +1,100 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationResponse;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.mapper.boot.MapperServiceBooter;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+\r
+@SpringBootTest(classes = {MapperServiceBooter.class})\r
+@RunWith(SpringRunner.class)\r
+public class NetconfToTr069MapperUtilTest {\r
+\r
+  @Autowired\r
+  NetconfToTr069MapperUtil mapUtil;\r
+\r
+  @Test\r
+  public void getNetconfResponseTest() {\r
+    DeviceRPCResponse opResult = new DeviceRPCResponse();\r
+    opResult.setFaultKey("0");\r
+    opResult.setDeviceDetails(new DeviceDetails());\r
+    OperationResponse opr = new OperationResponse();\r
+    opr.setParameterDTOs(getGeneralParams());\r
+    opResult.setOperationResponse(opr);\r
+    NetConfResponse netConfRes = mapUtil.getNetconfResponse(opResult);\r
+    Assert.assertNotNull(netConfRes);\r
+    Assert.assertEquals("0", netConfRes.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", netConfRes.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void getNetconfResponseErrorTest() {\r
+    DeviceRPCResponse opResult = new DeviceRPCResponse();\r
+    opResult.setFaultKey("9001");\r
+    opResult.setFaultString("Request denied");\r
+    opResult.setDeviceDetails(new DeviceDetails());\r
+    OperationResponse opr = new OperationResponse();\r
+    opr.setParameterDTOs(getGeneralParams());\r
+    opResult.setOperationResponse(opr);\r
+    NetConfResponse netConfRes = mapUtil.getNetconfResponse(opResult);\r
+    Assert.assertNotNull(netConfRes);\r
+    Assert.assertEquals("9001", netConfRes.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Request denied", netConfRes.getErrorCode().getErrorMessage());\r
+  }\r
+\r
+  @Test\r
+  public void getNetconfResponseWithoutParamtersTest() {\r
+    DeviceRPCResponse opResult = new DeviceRPCResponse();\r
+    opResult.setFaultKey("0");\r
+    opResult.setDeviceDetails(new DeviceDetails());\r
+    OperationResponse opr = new OperationResponse();\r
+    opResult.setOperationResponse(opr);\r
+    NetConfResponse netConfRes = mapUtil.getNetconfResponse(opResult);\r
+    Assert.assertNotNull(netConfRes);\r
+    Assert.assertEquals("0", netConfRes.getErrorCode().getFaultCode());\r
+    Assert.assertEquals("Success", netConfRes.getErrorCode().getErrorMessage());\r
+    Assert.assertNull(netConfRes.getNetconfResponseXml());\r
+  }\r
+\r
+  private ArrayList<ParameterDTO> getGeneralParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ManufacturerOUI", "0005B9"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ProductClass", "LTE_Enterprise_C-RANSC_Cntrl"));\r
+    params.add(new ParameterDTO("Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.PLMNID",\r
+        "30324"));\r
+    params.add(new ParameterDTO(\r
+        "Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.IsPrimary", "1"));\r
+    params.add(\r
+        new ParameterDTO("Device.Services.FAPService.1.CellConfig.LTE.EPC.PLMNList.1.Enable", "0"));\r
+\r
+    return params;\r
+  }\r
+}\r
diff --git a/mapper/src/test/java/org/commscope/tr069adapter/mapper/PnPPreProvisioningHandlerTest.java b/mapper/src/test/java/org/commscope/tr069adapter/mapper/PnPPreProvisioningHandlerTest.java
new file mode 100644 (file)
index 0000000..fff2f60
--- /dev/null
@@ -0,0 +1,101 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.mapper;\r
+\r
+import static org.junit.Assert.assertNull;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;\r
+import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.mapper.acs.impl.PnPPreProvisioningHandler;\r
+import org.commscope.tr069adapter.mapper.boot.MapperServiceBooter;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mock;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@SpringBootTest(classes = {MapperServiceBooter.class})\r
+@RunWith(SpringRunner.class)\r
+public class PnPPreProvisioningHandlerTest {\r
+\r
+  @Autowired\r
+  PnPPreProvisioningHandler pnPPreProvisioningHandler;\r
+\r
+  @Mock\r
+  RestTemplate restTemplate;\r
+\r
+  @Test\r
+  public void testGetEnodeBName() {\r
+    ConfigurationData configData = new ConfigurationData();\r
+    Map<String, String> paramMap = new HashMap<String, String>();\r
+    paramMap.put("X_0005B9_eNBName", "Enodb1");\r
+    configData.setParameterMONameValueMap(paramMap);\r
+    Mockito.when(restTemplate.getForObject(Mockito.anyString(), Mockito.any()))\r
+        .thenReturn(configData);\r
+    String eNodeBName = pnPPreProvisioningHandler.getEnodeBName("00005B9A1");\r
+    assertNull(eNodeBName);\r
+  }\r
+\r
+  @Test\r
+  public void testOnDeviceBootStrapNotification() {\r
+    BootstrapInform notification = new BootstrapInform();\r
+    List<ParameterDTO> params = new ArrayList<ParameterDTO>();\r
+    ParameterDTO param = new ParameterDTO();\r
+    param.setParamName("ExpeditedEvent");\r
+    params.add(param);\r
+    notification.setDeviceDetails(getDeviceDetails());\r
+    notification.setParameters(params);\r
+    pnPPreProvisioningHandler.onDeviceNotification(notification);\r
+    assertNull(notification.getValueChangeNotification());\r
+  }\r
+\r
+  @Test\r
+  public void testOnDeviceBootNotification() {\r
+    BootInform notification = new BootInform();\r
+    List<ParameterDTO> params = new ArrayList<ParameterDTO>();\r
+    ParameterDTO param = new ParameterDTO();\r
+    param.setParamName("ExpeditedEvent");\r
+    params.add(param);\r
+    notification.setDeviceDetails(getDeviceDetails());\r
+    notification.setParameters(params);\r
+    pnPPreProvisioningHandler.onDeviceNotification(notification);\r
+    assertNull(notification.getValueChangeNotification());\r
+  }\r
+\r
+  private DeviceDetails getDeviceDetails() {\r
+    DeviceDetails nf = new DeviceDetails();\r
+    nf.setDeviceId("00005B9A1");\r
+    nf.setDeviceTypeId(50);\r
+    nf.setOui("0005B9");\r
+    nf.setProductClass("LTE_Enterprise_C-RANSC_Cntrl");\r
+    return nf;\r
+  }\r
+\r
+}\r
diff --git a/mapper/src/test/resources/application.properties b/mapper/src/test/resources/application.properties
new file mode 100644 (file)
index 0000000..aaa7217
--- /dev/null
@@ -0,0 +1,31 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# Spring boot application properties\r
+spring.application.name=mapper \r
+server.port=${mapper}\r
+config.requesTimeout=30\r
+config.alarmMORegex=(.)*.FaultMgmt.ExpeditedEvent.(.)*\r
+config.preConfigureOnPNP=true\r
+config.sbiUri=http://tr069adapter-acs:9977/MapperService/initiateDeviceOperation\r
+config.configDBUri=http://tr069adapter-acs-initialpnpdb:9000/getConfig/\r
+config.nbiNotificationUri=http://tr069adapter-netconf-server:8181/netConfNotificationService/notification\r
+config.nbiServerManagerUri=http://tr069adapter-netconf-server:8181/netConfServerManagerService\r
+config.vesUri=http://tr069adapter-ves-notifier:9191/vesagent/deviceEvent\r
+config.netConfServerIP=10.211.5.55\r
+config.netConfServerPort=17830\r
diff --git a/netconf-server/Dockerfile b/netconf-server/Dockerfile
new file mode 100644 (file)
index 0000000..471ac19
--- /dev/null
@@ -0,0 +1,49 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM openjdk:8-alpine\r
+\r
+ARG JAR\r
+\r
+ENV NETCONF_REST_PORT=8181\r
+ENV MAPPER_REST_PORT=9999\r
+ENV NETCONFSRVS_START_PORT=17830\r
+ENV NETCONFSRVS_END_PORT=18030\r
+ENV NUM_SERVERS=200\r
+ENV MAPPER_REST_HOST=tr069adapter-netconfig-mapper\r
+ENV DB_SERVICE=tr069adapter-mariadb\r
+ENV DB_NAME=dmsdb\r
+ENV DB_USERNAME=root\r
+ENV DB_PASSWORD=root\r
+ENV netConfServerIP=localhost\r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD ./schemas ./schemas\r
+\r
+ADD ./docker-entrypoint.sh .\r
+\r
+RUN dos2unix docker-entrypoint.sh\r
+\r
+RUN chmod 777 docker-entrypoint.sh\r
+\r
+\r
+ADD target/${JAR} ./lib/netconf-server-1.0.0.jar\r
+\r
+EXPOSE ${VES_PORT}\r
+ENTRYPOINT ["./docker-entrypoint.sh"]\r
diff --git a/netconf-server/docker-entrypoint.sh b/netconf-server/docker-entrypoint.sh
new file mode 100644 (file)
index 0000000..e8cac12
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh\r
+## Warning!!! Please do not add any java arguments at the end of command. if need to add, addit before.\r
+\r
+java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=9876,server=y,suspend=n -jar ./lib/netconf-server-1.0.0.jar --schemas-dir /opt/CSAdapter/schemas/ --debug true --starting-port ${NETCONFSRVS_START_PORT} \r
+\r
diff --git a/netconf-server/jar-with-dependencies.xml b/netconf-server/jar-with-dependencies.xml
new file mode 100644 (file)
index 0000000..4983884
--- /dev/null
@@ -0,0 +1,40 @@
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">\r
+  <!-- TODO: a jarjar format would be better -->\r
+  <id>jar-with-dependencies</id>\r
+  <formats>\r
+    <format>jar</format>\r
+  </formats>\r
+  <includeBaseDirectory>false</includeBaseDirectory>\r
+  <dependencySets>\r
+    <dependencySet>\r
+      <outputDirectory>target</outputDirectory>\r
+      <useProjectArtifact>true</useProjectArtifact>\r
+      <unpack>true</unpack>\r
+      <scope>runtime</scope>\r
+    </dependencySet>\r
+  </dependencySets>\r
+</assembly>\r
diff --git a/netconf-server/pom.xml b/netconf-server/pom.xml
new file mode 100644 (file)
index 0000000..f355a95
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <groupId>org.commscope.tr069adapter.netconf.server</groupId>\r
+   <artifactId>netconf-server</artifactId>\r
+   <name>netconf-server</name>\r
+   <packaging>jar</packaging>\r
+   <licenses>\r
+      <license>\r
+         <name>The Apache Software License, Version 2.0</name>\r
+         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
+      </license>\r
+   </licenses>\r
+   <repositories>\r
+      <repository>\r
+         <id>onap-releases</id>\r
+         <name>onap-releases</name>\r
+         <url>https://nexus.onap.org/content/repositories/releases/</url>\r
+      </repository>\r
+   </repositories>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-netconf-server</docker.image.name>\r
+   </properties>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-activemq</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.fasterxml.jackson.core</groupId>\r
+         <artifactId>jackson-databind</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.opendaylight.netconf</groupId>\r
+         <artifactId>netconf-testtool</artifactId>\r
+         <version>1.7.0</version>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>ch.qos.logback</groupId>\r
+               <artifactId>logback-classic</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework</groupId>\r
+         <artifactId>spring-context</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.mapper</groupId>\r
+         <artifactId>mapper</artifactId>\r
+         <version>1.0.0</version>\r
+         <classifier>lib</classifier>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-actuator-autoconfigure</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.retry</groupId>\r
+         <artifactId>spring-retry</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework</groupId>\r
+         <artifactId>spring-aspects</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.mariadb.jdbc</groupId>\r
+         <artifactId>mariadb-java-client</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-data-jpa</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.mockito</groupId>\r
+         <artifactId>mockito-core</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit</artifactId>\r
+         <scope>test</scope>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>ch.qos.logback</groupId>\r
+               <artifactId>logback-classic</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit-dep</artifactId>\r
+         <version>4.11</version>\r
+         <scope>test</scope>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>ch.qos.logback</groupId>\r
+               <artifactId>logback-classic</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.h2database</groupId>\r
+         <artifactId>h2</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-maven-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-surefire-plugin</artifactId>\r
+            <configuration>\r
+               <skipTests>false</skipTests>\r
+            </configuration>\r
+         </plugin>\r
+         <plugin>\r
+            <artifactId>maven-failsafe-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/boot/NetConfServiceBooter.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/boot/NetConfServiceBooter.java
new file mode 100644 (file)
index 0000000..88b2771
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.boot;\r
+\r
+import org.commscope.tr069adapter.netconf.server.NetConfServerManagerImpl;\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+import org.springframework.boot.autoconfigure.domain.EntityScan;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.annotation.ComponentScan;\r
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;\r
+import org.springframework.retry.annotation.EnableRetry;\r
+\r
+@SpringBootApplication\r
+@ComponentScan({"org.commscope.tr069adapter.netconf", "org.opendaylight.netconf.test"})\r
+@EnableJpaRepositories("org.commscope.tr069adapter.netconf.dao")\r
+@EntityScan("org.commscope.tr069adapter.netconf.entity")\r
+@EnableRetry\r
+public class NetConfServiceBooter {\r
+\r
+  private static ApplicationContext appContext;\r
+\r
+  public static void main(String[] args) {\r
+    if (args != null)\r
+      appContext = SpringApplication.run(NetConfServiceBooter.class, args);\r
+    NetConfServerManagerImpl serverManager =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerManagerImpl.class);\r
+    serverManager.restartServers(); // restart all netconf servers during startup.\r
+  }\r
+\r
+  public static ApplicationContext getApplicationContext() {\r
+    return appContext;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/config/NetConfServerProperties.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/config/NetConfServerProperties.java
new file mode 100644 (file)
index 0000000..738f4a9
--- /dev/null
@@ -0,0 +1,120 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.config;\r
+\r
+import org.springframework.boot.context.properties.ConfigurationProperties;\r
+import org.springframework.context.annotation.Configuration;\r
+\r
+@Configuration\r
+@ConfigurationProperties(prefix = "config")\r
+public class NetConfServerProperties {\r
+\r
+  private Integer defaultNetconfStartPort = 17830;\r
+  private Integer defaultMaxServers = 200;\r
+\r
+  private String requestTimeOut;\r
+  private String mapperPath;\r
+  private String netconfServerRestPort;\r
+  private String netconfServersStartPort;\r
+  private String netconfServersEndPort;\r
+  private String maxNumOfNetconfServers;\r
+  private String netconfServerIP;\r
+  private String schemaDirPath;\r
+\r
+  public String getRequestTimeOut() {\r
+    return requestTimeOut;\r
+  }\r
+\r
+  public void setRequestTimeOut(String requestTimeOut) {\r
+    this.requestTimeOut = requestTimeOut;\r
+  }\r
+\r
+  public String getMapperPath() {\r
+    return mapperPath;\r
+  }\r
+\r
+  public void setMapperPath(String mapperPath) {\r
+    this.mapperPath = mapperPath;\r
+  }\r
+\r
+  public String getNetconfServerRestPort() {\r
+    return netconfServerRestPort;\r
+  }\r
+\r
+  public void setNetconfServerRestPort(String netconfServerRestPort) {\r
+    this.netconfServerRestPort = netconfServerRestPort;\r
+  }\r
+\r
+  public String getMaxNumOfNetconfServers() {\r
+    return maxNumOfNetconfServers;\r
+  }\r
+\r
+  public void setMaxNumOfNetconfServers(String maxNumOfNetconfServers) {\r
+    this.maxNumOfNetconfServers = maxNumOfNetconfServers;\r
+  }\r
+\r
+  public String getNetconfServersStartPort() {\r
+    return netconfServersStartPort;\r
+  }\r
+\r
+  public void setNetconfServersStartPort(String netconfServersStartPort) {\r
+    this.netconfServersStartPort = netconfServersStartPort;\r
+  }\r
+\r
+  public String getNetconfServersEndPort() {\r
+    return netconfServersEndPort;\r
+  }\r
+\r
+  public void setNetconfServersEndPort(String netconfServersEndPort) {\r
+    this.netconfServersEndPort = netconfServersEndPort;\r
+  }\r
+\r
+  public Integer getDefaultNetconfStartPort() {\r
+    return defaultNetconfStartPort;\r
+  }\r
+\r
+  public void setDefaultNetconfStartPort(Integer defaultPort) {\r
+    defaultNetconfStartPort = defaultPort;\r
+  }\r
+\r
+  public Integer getDefaultMaxServers() {\r
+    return defaultMaxServers;\r
+  }\r
+\r
+  public void setDefaultMaxServers(Integer maxServers) {\r
+    defaultMaxServers = maxServers;\r
+  }\r
+\r
+  public String getNetconfServerIP() {\r
+    return netconfServerIP;\r
+  }\r
+\r
+  public void setNetconfServerIP(String netconfServerIP) {\r
+    this.netconfServerIP = netconfServerIP;\r
+  }\r
+\r
+  public String getSchemaDirPath() {\r
+    return schemaDirPath;\r
+  }\r
+\r
+  public void setSchemaDirPath(String schemaDirPath) {\r
+    this.schemaDirPath = schemaDirPath;\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/dao/NetConfServerDetailsRepository.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/dao/NetConfServerDetailsRepository.java
new file mode 100644 (file)
index 0000000..b16224d
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.dao;\r
+\r
+import org.commscope.tr069adapter.netconf.entity.NetConfServerDetailsEntity;\r
+import org.springframework.data.repository.CrudRepository;\r
+import org.springframework.stereotype.Repository;\r
+\r
+@Repository\r
+public interface NetConfServerDetailsRepository\r
+    extends CrudRepository<NetConfServerDetailsEntity, Long> {\r
+\r
+  public NetConfServerDetailsEntity findByDeviceId(String deviceId);\r
+\r
+  public NetConfServerDetailsEntity findByEnodeBName(String enodeBName);\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/entity/NetConfServerDetailsEntity.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/entity/NetConfServerDetailsEntity.java
new file mode 100644 (file)
index 0000000..832d7fc
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.entity;\r
+\r
+import java.io.Serializable;\r
+\r
+import javax.persistence.Column;\r
+import javax.persistence.Entity;\r
+import javax.persistence.GeneratedValue;\r
+import javax.persistence.GenerationType;\r
+import javax.persistence.Id;\r
+import javax.persistence.Table;\r
+\r
+@Entity\r
+@Table(name = "netconf_server_details")\r
+public class NetConfServerDetailsEntity implements Serializable {\r
+\r
+  private static final long serialVersionUID = 3572178771247249366L;\r
+\r
+  @Id\r
+  @GeneratedValue(strategy = GenerationType.AUTO)\r
+  private Long id;\r
+\r
+  @Column(name = "DEVICE_ID", length = 30)\r
+  private String deviceId;\r
+\r
+  @Column(name = "ENODEB_NAME", length = 255)\r
+  private String enodeBName;\r
+\r
+  @Column(name = "PORT", length = 10)\r
+  private String listenPort;\r
+\r
+  public Long getId() {\r
+    return id;\r
+  }\r
+\r
+  public void setId(Long id) {\r
+    this.id = id;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public String getListenPort() {\r
+    return listenPort;\r
+  }\r
+\r
+  public void setListenPort(String listenPort) {\r
+    this.listenPort = listenPort;\r
+  }\r
+\r
+  public String getEnodeBName() {\r
+    return enodeBName;\r
+  }\r
+\r
+  public void setEnodeBName(String enodeBName) {\r
+    this.enodeBName = enodeBName;\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/error/RetryFailedException.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/error/RetryFailedException.java
new file mode 100644 (file)
index 0000000..b75a68a
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.error;\r
+\r
+public class RetryFailedException extends Exception {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = -4557393805847293859L;\r
+\r
+  public RetryFailedException() {\r
+    super();\r
+  }\r
+\r
+  public RetryFailedException(String message, Throwable cause, boolean enableSuppression,\r
+      boolean writableStackTrace) {\r
+    super(message, cause, enableSuppression, writableStackTrace);\r
+  }\r
+\r
+  public RetryFailedException(String message, Throwable cause) {\r
+    super(message, cause);\r
+  }\r
+\r
+  public RetryFailedException(String message) {\r
+    super(message);\r
+  }\r
+\r
+  public RetryFailedException(Throwable cause) {\r
+    super(cause);\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/error/ServerPortAllocationException.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/error/ServerPortAllocationException.java
new file mode 100644 (file)
index 0000000..35c5478
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.error;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetconfServerManagementError;\r
+\r
+public class ServerPortAllocationException extends Exception {\r
+\r
+  private static final long serialVersionUID = 711424677278436382L;\r
+  private final NetconfServerManagementError error;\r
+\r
+  public ServerPortAllocationException(NetconfServerManagementError error) {\r
+    super(error.getErrorMessage());\r
+    this.error = error;\r
+  }\r
+\r
+  public NetconfServerManagementError getError() {\r
+    return error;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/notification/NetConfSessionUtil.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/notification/NetConfSessionUtil.java
new file mode 100644 (file)
index 0000000..046db19
--- /dev/null
@@ -0,0 +1,214 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.notification;\r
+\r
+import java.io.IOException;\r
+import java.io.StringWriter;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.StringTokenizer;\r
+\r
+import javax.xml.XMLConstants;\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.parsers.ParserConfigurationException;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.netconf.rpc.CreateSubscription;\r
+import org.opendaylight.netconf.api.NetconfMessage;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.api.xml.XmlUtil;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.stereotype.Component;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.xml.sax.SAXException;\r
+\r
+@Component\r
+public class NetConfSessionUtil {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfSessionUtil.class);\r
+\r
+  private static final String INDEX_STR = "index";\r
+  private static final String INDEX_REGEX = "[0-9]{1,}";\r
+  private static final String NS_URI = "urn:onf:otcc:wireless:yang:tr069-notification";\r
+\r
+  public void sendNetConfNotification(DeviceInform notification) {\r
+    NetconfMessage netconfMessage = convertToNetConfMessage(notification);\r
+    LOG.debug("Notification converted to NetConf format {}", netconfMessage);\r
+    CreateSubscription.sendNotification(netconfMessage,\r
+        notification.getDeviceDetails().getDeviceId());\r
+  }\r
+\r
+  private NetconfMessage convertToNetConfMessage(DeviceInform notification) {\r
+    try {\r
+      String netConfXmlMsg = getNetconfResponseXML(notification);\r
+      if (netConfXmlMsg == null)\r
+        throw new IllegalArgumentException("There are no parameters found in the response");\r
+      return new NetconfMessage(XmlUtil.readXmlToDocument(netConfXmlMsg));\r
+    } catch (SAXException | IOException e) {\r
+      throw new IllegalArgumentException("Cannot parse notifications", e);\r
+    }\r
+  }\r
+\r
+  private static String getNetconfResponseXML(DeviceInform notification) {\r
+    if (notification == null || notification.getParameters().isEmpty()) {\r
+      LOG.debug("There are no parameters found in the response.");\r
+      return null;\r
+    }\r
+\r
+    List<ParameterDTO> parameters = notification.getParameters();\r
+\r
+    String result = null;\r
+    try {\r
+      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();\r
+      docFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      docFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
+      DocumentBuilder docBuilder = docFactory.newDocumentBuilder();\r
+      Document doc = docBuilder.newDocument();\r
+\r
+      Map<String, Element> parentNodeMap = new HashMap<>();\r
+      Element dataNode = null; // root of all nodes\r
+\r
+      for (ParameterDTO paramDto : parameters) {\r
+        String paramName = paramDto.getParamName();\r
+        String paramValue = paramDto.getParamValue();\r
+        StringTokenizer tokenizer = new StringTokenizer(paramName, ".");\r
+        String parentNodeName = null;\r
+        StringBuilder parentNodeKey = null;\r
+        Element parentNode = null;\r
+        while (tokenizer.hasMoreElements()) {\r
+          String nodeName = (String) tokenizer.nextElement();\r
+          if (null == parentNodeName) { // construct first node or\r
+                                        // Device node\r
+            parentNodeName = nodeName;\r
+            parentNodeKey = new StringBuilder(nodeName);\r
+            // check if the node already exists in parentNodeMap\r
+            parentNode = parentNodeMap.get(parentNodeKey.toString());\r
+            if (null == dataNode) {\r
+              dataNode = parentNode;\r
+            }\r
+          } else if (nodeName.matches(INDEX_REGEX)) { // construct\r
+                                                      // tabular and\r
+                                                      // index nodes\r
+\r
+            // get parent tabular node from parent MAP\r
+            parentNodeKey = parentNodeKey.append(".").append(nodeName);\r
+            Element node = parentNodeMap.get(parentNodeKey.toString());\r
+\r
+            // create a tabular parent node if doesn't exit in MAP\r
+            if (null == node) {\r
+              node = doc.createElement(parentNodeName);\r
+              parentNodeMap.put(parentNodeKey.toString(), node);\r
+\r
+              // update current tabular parent node.\r
+              if (null != parentNode)\r
+                parentNode.appendChild(node);\r
+\r
+              // prepare and add index node to tabular parent node\r
+              Element indexNode = doc.createElement(INDEX_STR);\r
+              indexNode.setTextContent(nodeName);\r
+              node.appendChild(indexNode);\r
+            }\r
+            parentNode = node; // move parent to child\r
+            parentNodeName = nodeName;\r
+          } else if (parentNodeName.matches(INDEX_REGEX)) { // move to\r
+                                                            // next\r
+                                                            // node\r
+                                                            // if\r
+                                                            // tabular\r
+                                                            // attribute\r
+                                                            // is\r
+                                                            // found\r
+            parentNodeKey = parentNodeKey.append(".").append(nodeName);\r
+            parentNodeName = nodeName;\r
+          } else {\r
+            // construct intermediate nodes\r
+            Element node = parentNodeMap.get(parentNodeKey.toString());\r
+            if (null == node) {\r
+              if (null == dataNode) {\r
+                node = doc.createElementNS(NS_URI, parentNodeName);\r
+                dataNode = node;\r
+              } else {\r
+                node = doc.createElement(parentNodeName);\r
+              }\r
+              parentNodeMap.put(parentNodeKey.toString(), node);\r
+              if (null != parentNode)\r
+                parentNode.appendChild(node);\r
+            }\r
+            parentNodeKey = parentNodeKey.append(".").append(nodeName);\r
+            parentNodeName = nodeName;\r
+            parentNode = node;\r
+          }\r
+        }\r
+        // construct leaf node\r
+        Element leafNode = doc.createElement(parentNodeName);\r
+        leafNode.setTextContent(paramValue);\r
+        if (null != parentNode)\r
+          parentNode.appendChild(leafNode);\r
+      }\r
+\r
+      if (null != dataNode) {\r
+        final Element element = doc.createElement(XmlNetconfConstants.NOTIFICATION_ELEMENT_NAME);\r
+        final Element eventTime = doc.createElement(XmlNetconfConstants.EVENT_TIME);\r
+        eventTime\r
+            .setTextContent(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(new Date()));\r
+\r
+        final Element evtTypeElement =\r
+            doc.createElementNS(NS_URI, notification.getInformTypeList().get(0).toString());\r
+        evtTypeElement.appendChild(dataNode);\r
+        element.appendChild(element.getOwnerDocument().importNode(eventTime, true));\r
+        element.appendChild(element.getOwnerDocument().importNode(evtTypeElement, true));\r
+        result = convertDocumentToString(element);\r
+      }\r
+    } catch (ParserConfigurationException pce) {\r
+      LOG.error("Error while getNetconfResponseXML {}", pce.toString());\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+  public static String convertDocumentToString(Element element) {\r
+    String strxml = null;\r
+    try {\r
+      TransformerFactory transformerFactory = TransformerFactory.newInstance();\r
+      transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");\r
+      Transformer transformer = transformerFactory.newTransformer();\r
+      DOMSource source = new DOMSource(element);\r
+      StreamResult result = new StreamResult(new StringWriter());\r
+      transformer.transform(source, result);\r
+      strxml = result.getWriter().toString();\r
+    } catch (Exception e) {\r
+      LOG.error("Error while converting Element to String {}", e.toString());\r
+    }\r
+    LOG.debug("Converted XML is : {}", strxml);\r
+    return strxml;\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/notification/NotificationHandler.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/notification/NotificationHandler.java
new file mode 100644 (file)
index 0000000..24192f2
--- /dev/null
@@ -0,0 +1,40 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.notification;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class NotificationHandler {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NotificationHandler.class);\r
+\r
+  @Autowired\r
+  NetConfSessionUtil netConfSessionUtil;\r
+\r
+  public void handleNetConfNotification(DeviceInform notification) {\r
+    LOG.debug("processing netconf notification {}", notification);\r
+    netConfSessionUtil.sendNetConfNotification(notification);\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/operations/CustomOperationsCreator.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/operations/CustomOperationsCreator.java
new file mode 100644 (file)
index 0000000..5323fd3
--- /dev/null
@@ -0,0 +1,102 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.operations;\r
+\r
+import com.google.common.collect.Sets;\r
+\r
+import java.util.Optional;\r
+import java.util.Set;\r
+\r
+import org.commscope.tr069adapter.netconf.rpc.CreateSubscription;\r
+import org.commscope.tr069adapter.netconf.rpc.DeleteConfigOperation;\r
+import org.commscope.tr069adapter.netconf.rpc.GetConfigOperation;\r
+import org.commscope.tr069adapter.netconf.rpc.GetOperation;\r
+import org.commscope.tr069adapter.netconf.rpc.OperationCommit;\r
+import org.commscope.tr069adapter.netconf.rpc.OperationLock;\r
+import org.commscope.tr069adapter.netconf.rpc.OperationUnLock;\r
+import org.commscope.tr069adapter.netconf.rpc.SetConfigOperation;\r
+import org.commscope.tr069adapter.netconf.rpc.SoftwareActivateOperation;\r
+import org.commscope.tr069adapter.netconf.rpc.SoftwareDownloadOperation;\r
+import org.opendaylight.netconf.api.capability.Capability;\r
+import org.opendaylight.netconf.impl.SessionIdProvider;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperation;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperationService;\r
+import org.opendaylight.netconf.test.tool.operations.OperationsCreator;\r
+import org.opendaylight.netconf.test.tool.rpc.DataList;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public final class CustomOperationsCreator implements OperationsCreator {\r
+  private static final Logger logger = LoggerFactory.getLogger(CustomOperationsCreator.class);\r
+\r
+  private String macID = null;\r
+\r
+  private OperationService operationService;\r
+\r
+  public CustomOperationsCreator(String macID) {\r
+    this.macID = macID;\r
+  }\r
+\r
+  @Override\r
+  public NetconfOperationService getNetconfOperationService(final Set<Capability> caps,\r
+      final SessionIdProvider idProvider, final String netconfSessionIdForReporting) {\r
+    if (null == operationService) {\r
+      operationService = new OperationService(idProvider.getCurrentSessionId(), macID);\r
+    }\r
+    return operationService;\r
+  }\r
+\r
+  static class OperationService implements NetconfOperationService {\r
+\r
+    private final long currentSessionId;\r
+    private String macID;\r
+\r
+    OperationService(final long currentSessionId, String macID) {\r
+      this.currentSessionId = currentSessionId;\r
+      this.macID = macID;\r
+    }\r
+\r
+    @Override\r
+    public Set<NetconfOperation> getNetconfOperations() {\r
+      final DataList storage = new DataList();\r
+      final GetOperation oGet = new GetOperation(String.valueOf(currentSessionId), storage, macID);\r
+      final GetConfigOperation oGetConfig =\r
+          new GetConfigOperation(String.valueOf(currentSessionId), Optional.empty(), macID);\r
+      final SetConfigOperation oSetConfig =\r
+          new SetConfigOperation(String.valueOf(currentSessionId), macID);\r
+      final DeleteConfigOperation oDelConfig =\r
+          new DeleteConfigOperation(String.valueOf(currentSessionId), storage, macID);\r
+      final OperationCommit oCommit = new OperationCommit(String.valueOf(currentSessionId));\r
+      final OperationLock oLock = new OperationLock(String.valueOf(currentSessionId));\r
+      final OperationUnLock oUnlock = new OperationUnLock(String.valueOf(currentSessionId));\r
+      final CreateSubscription sCreateSubs =\r
+          new CreateSubscription(String.valueOf(currentSessionId), Optional.empty(), macID);\r
+      SoftwareDownloadOperation swDownloadOperation = new SoftwareDownloadOperation(macID);\r
+      SoftwareActivateOperation swActivateOperation = new SoftwareActivateOperation(macID);\r
+      return Sets.newHashSet(oGet, oGetConfig, oSetConfig, oDelConfig, oCommit, oLock, oUnlock,\r
+          sCreateSubs, swDownloadOperation, swActivateOperation);\r
+    }\r
+\r
+    @Override\r
+    public void close() {\r
+      logger.debug("close called on CustomOperationsCreator");\r
+    }\r
+\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/restapi/NetConfServerManagerRestApi.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/restapi/NetConfServerManagerRestApi.java
new file mode 100644 (file)
index 0000000..c05e4ad
--- /dev/null
@@ -0,0 +1,72 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.restapi;\r
+\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.netconf.server.NetConfServerManagerImpl;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.web.bind.annotation.GetMapping;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RequestParam;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping("/netConfServerManagerService")\r
+public class NetConfServerManagerRestApi {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfServerManagerRestApi.class);\r
+\r
+  @Autowired\r
+  NetConfServerManagerImpl manager;\r
+\r
+  @PostMapping("/createServer")\r
+  public NetConfServerDetails createNetConfServerInstance(@RequestParam String deviceId,\r
+      @RequestParam String enodeBName) {\r
+    LOG.info("Received Create NetConf Server request for deviceID: {}, enodeBName: {}", deviceId,\r
+        enodeBName);\r
+    NetConfServerDetails serverDetails = manager.createServer(deviceId, enodeBName);\r
+    LOG.info("Successfully processed NetConf Server wit server details : {}", serverDetails);\r
+    return serverDetails;\r
+  }\r
+\r
+  @GetMapping("/listServers")\r
+  public List<NetConfServerDetails> listNetConfServersInfo() {\r
+    LOG.info("Received request to list all NetConf Servers information");\r
+    List<NetConfServerDetails> serverDetails = manager.getServersInfo();\r
+    LOG.info("Successfully processed request to list all NetConf Servers information");\r
+    return serverDetails;\r
+  }\r
+\r
+  @PostMapping("/unregisterServer")\r
+  public boolean unregisterNetConfServerInstance(@RequestParam String deviceId,\r
+      @RequestParam String enodeBName) {\r
+    LOG.info("Received request for Unregister NetConf Server for deviceID: {}, enodeBName: {}",\r
+        deviceId, enodeBName);\r
+    boolean status = manager.unregister(deviceId, enodeBName);\r
+    LOG.info("Unregister request is processed. NetConf Server for deviceID: {} , unregistered= {}",\r
+        deviceId, status);\r
+    return status;\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/restapi/NotificationReceiverService.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/restapi/NotificationReceiverService.java
new file mode 100644 (file)
index 0000000..47a794c
--- /dev/null
@@ -0,0 +1,47 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.restapi;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.netconf.notification.NotificationHandler;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestBody;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping("/netConfNotificationService")\r
+public class NotificationReceiverService {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NotificationReceiverService.class);\r
+\r
+  @Autowired\r
+  NotificationHandler handler;\r
+\r
+  @PostMapping("/notification")\r
+  public void processNotification(@RequestBody DeviceInform notification) {\r
+    LOG.debug("Received NetConf Notification : {}", notification);\r
+    handler.handleNetConfNotification(notification);\r
+    LOG.debug("Processed NetConf Notification for :{}", notification);\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/CreateSubscription.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/CreateSubscription.java
new file mode 100644 (file)
index 0000000..151fa5d
--- /dev/null
@@ -0,0 +1,227 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import com.google.common.base.Preconditions;\r
+import com.google.common.collect.Maps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Optional;\r
+import java.util.concurrent.Executors;\r
+import java.util.concurrent.ScheduledExecutorService;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import javax.xml.bind.JAXBContext;\r
+import javax.xml.bind.JAXBException;\r
+import javax.xml.bind.Unmarshaller;\r
+import javax.xml.bind.annotation.XmlRootElement;\r
+\r
+import org.opendaylight.netconf.api.NetconfMessage;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.api.xml.XmlUtil;\r
+import org.opendaylight.netconf.impl.NetconfServerSession;\r
+import org.opendaylight.netconf.impl.mapping.operations.DefaultNetconfOperation;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.xml.sax.SAXException;\r
+\r
+public class CreateSubscription extends AbstractLastNetconfOperation\r
+    implements DefaultNetconfOperation {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(CreateSubscription.class);\r
+  private final Map<Notification, NetconfMessage> notifications;\r
+  private NetconfServerSession session;\r
+  private ScheduledExecutorService scheduledExecutorService;\r
+  private static Map<String, NetconfServerSession> netconfServerSessionMap = new HashMap<>();\r
+  private String deviceID;\r
+\r
+  public CreateSubscription(final String id, final Optional<File> notificationsFile,\r
+      String deviceID) {\r
+\r
+    super(id);\r
+\r
+    logger.debug("CreateSubscription RPC is created with macID {}", deviceID);\r
+    this.deviceID = deviceID;\r
+\r
+    final Optional<Notifications> notifs;\r
+\r
+    if (notificationsFile.isPresent()) {\r
+      notifs = Optional.of(loadNotifications(notificationsFile.get()));\r
+      scheduledExecutorService = Executors.newScheduledThreadPool(1);\r
+    } else {\r
+      notifs = Optional.empty();\r
+    }\r
+\r
+    if (notifs.isPresent()) {\r
+      final Collection<Notification> toCopy = notifs.get().getNotificationList();\r
+      final Map<Notification, NetconfMessage> preparedMessages =\r
+          Maps.newHashMapWithExpectedSize(toCopy.size());\r
+      for (final Notification notification : toCopy) {\r
+        final NetconfMessage parsedNotification =\r
+            parseNetconfNotification(notification.getContent());\r
+        preparedMessages.put(notification, parsedNotification);\r
+      }\r
+      this.notifications = preparedMessages;\r
+    } else {\r
+      this.notifications = Collections.emptyMap();\r
+    }\r
+  }\r
+\r
+  private static Notifications loadNotifications(final File file) {\r
+    try {\r
+      final JAXBContext jaxbContext = JAXBContext.newInstance(Notifications.class);\r
+      final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();\r
+      return (Notifications) jaxbUnmarshaller.unmarshal(file);\r
+    } catch (final JAXBException e) {\r
+      throw new IllegalArgumentException("can not parse file " + file + " as a notifications file",\r
+          e);\r
+    }\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return "create-subscription";\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationNamespace() {\r
+    return "urn:ietf:params:xml:ns:netconf:notification:1.0";\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) {\r
+    long delayAggregator = 0;\r
+    for (final Map.Entry<Notification, NetconfMessage> notification : notifications.entrySet()) {\r
+      for (int i = 0; i <= notification.getKey().getTimes(); i++) {\r
+\r
+        delayAggregator += notification.getKey().getDelayInSeconds();\r
+\r
+        scheduledExecutorService.schedule(() -> {\r
+          Preconditions.checkState(session != null,\r
+              "Session is not set, cannot process notifications");\r
+          session.sendMessage(notification.getValue());\r
+        }, delayAggregator, TimeUnit.SECONDS);\r
+      }\r
+    }\r
+    return document.createElement(XmlNetconfConstants.OK);\r
+  }\r
+\r
+  private static NetconfMessage parseNetconfNotification(String content) {\r
+    final int startEventTime = content.indexOf("<eventTime>") + "<eventTime>".length();\r
+    final int endEventTime = content.indexOf("</eventTime>");\r
+    final String eventTime = content.substring(startEventTime, endEventTime);\r
+    if (eventTime.equals("XXXX")) {\r
+      content = content.replace(eventTime,\r
+          new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(new Date()));\r
+    }\r
+\r
+    try {\r
+      return new NetconfMessage(XmlUtil.readXmlToDocument(content));\r
+    } catch (SAXException | IOException e) {\r
+      throw new IllegalArgumentException("Cannot parse notifications", e);\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public void setNetconfSession(final NetconfServerSession newSession) {\r
+    logger.debug("Adding netconf session to notification server sessions map : {}", newSession);\r
+    logger.debug("This CreateSubscription is setup to support  macID= {}", deviceID);\r
+    this.session = newSession;\r
+    netconfServerSessionMap.put(deviceID, newSession);\r
+  }\r
+\r
+  public static void sendNotification(NetconfMessage netconfMessage, String deviceID) {\r
+    logger.debug("Request to send notification. NetConfMessage : {}", netconfMessage);\r
+    NetconfServerSession session = netconfServerSessionMap.get(deviceID);\r
+    if (session != null && session.isUp()) {\r
+      session.sendMessage(netconfMessage);\r
+      logger.debug("Successfully send notification for deviceID: {}", deviceID);\r
+    } else {\r
+      logger.debug("Failed to send notification. None of valid netconf session is available.");\r
+    }\r
+    logger.debug("Available netconf sessions : {}", netconfServerSessionMap);\r
+\r
+  }\r
+\r
+  @XmlRootElement(name = "notifications")\r
+  public static final class Notifications {\r
+\r
+    @javax.xml.bind.annotation.XmlElement(nillable = false, name = "notification", required = true)\r
+    private List<Notification> notificationList;\r
+\r
+    public List<Notification> getNotificationList() {\r
+      return notificationList;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+      final StringBuilder sb = new StringBuilder("Notifications{");\r
+      sb.append("notificationList=").append(notificationList);\r
+      sb.append('}');\r
+      return sb.toString();\r
+    }\r
+  }\r
+\r
+  public static final class Notification {\r
+\r
+    @javax.xml.bind.annotation.XmlElement(nillable = false, name = "delay")\r
+    private long delayInSeconds;\r
+\r
+    @javax.xml.bind.annotation.XmlElement(nillable = false, name = "times")\r
+    private long times;\r
+\r
+    @javax.xml.bind.annotation.XmlElement(nillable = false, name = "content", required = true)\r
+    private String content;\r
+\r
+    public long getDelayInSeconds() {\r
+      return delayInSeconds;\r
+    }\r
+\r
+    public long getTimes() {\r
+      return times;\r
+    }\r
+\r
+    public String getContent() {\r
+      return content;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+      final StringBuilder sb = new StringBuilder("Notification{");\r
+      sb.append("delayInSeconds=").append(delayInSeconds);\r
+      sb.append(", times=").append(times);\r
+      sb.append(", content='").append(content).append('\'');\r
+      sb.append('}');\r
+      return sb.toString();\r
+    }\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/DeleteConfigOperation.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/DeleteConfigOperation.java
new file mode 100644 (file)
index 0000000..6135c14
--- /dev/null
@@ -0,0 +1,114 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.opendaylight.netconf.api.DocumentedException;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorTag;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorType;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.test.tool.rpc.DataList;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Attr;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+\r
+public class DeleteConfigOperation extends AbstractLastNetconfOperation {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(DeleteConfigOperation.class);\r
+\r
+  private static final String DELETE_EDIT_CONFIG = "delete";\r
+  private static final String OPERATION = "operation";\r
+  private static final String REMOVE_EDIT_CONFIG = "remove";\r
+  private final DataList storage;\r
+  private String deviceID;\r
+\r
+  public DeleteConfigOperation(final String netconfSessionIdForReporting, final DataList storage,\r
+      String deviceID) {\r
+    super(netconfSessionIdForReporting);\r
+    this.storage = storage;\r
+    this.deviceID = deviceID;\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) throws DocumentedException {\r
+    final XmlElement configElementData =\r
+        operationElement.getOnlyChildElement(XmlNetconfConstants.CONFIG_KEY);\r
+    containsDelete(configElementData);\r
+    if (containsDelete(configElementData)) {\r
+      storage.resetConfigList();\r
+    } else {\r
+      storage.setConfigList(configElementData.getChildElements());\r
+    }\r
+\r
+    String requestXml = XmlUtility.convertDocumentToString(operationElement);\r
+    logger.debug("netconf request recevied : {}", requestXml);\r
+    NetConfServerProperties config =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
+\r
+    final String baseUrl = config.getMapperPath() + "/delConfig";\r
+    NetConfResponse restResponse = XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
+\r
+    if (restResponse != null) {\r
+      ErrorCodeDetails errorCode = restResponse.getErrorCode();\r
+\r
+      if (errorCode != null && errorCode.getFaultCode() != null\r
+          && !errorCode.getFaultCode().equalsIgnoreCase("0")) {\r
+        throw new DocumentedException(errorCode.getErrorMessage(),\r
+            ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),\r
+            ErrorSeverity.from(errorCode.getErrorSeverity()));\r
+      } else {\r
+        return document.createElement(XmlNetconfConstants.OK);\r
+      }\r
+    } else {\r
+      logger.error("received the null response from mapper ");\r
+      throw new DocumentedException("Unable to perform Operation", ErrorType.from("application"),\r
+          ErrorTag.from("operation-failed"), ErrorSeverity.from("ERROR"));\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return "delete-config";\r
+  }\r
+\r
+  private boolean containsDelete(final XmlElement element) {\r
+    for (final Attr o : element.getAttributes().values()) {\r
+      if (o.getLocalName().equals(OPERATION)\r
+          && (o.getValue().equals(DELETE_EDIT_CONFIG) || o.getValue().equals(REMOVE_EDIT_CONFIG))) {\r
+        return true;\r
+      }\r
+    }\r
+    for (final XmlElement xmlElement : element.getChildElements()) {\r
+      if (containsDelete(xmlElement)) {\r
+        return true;\r
+      }\r
+    }\r
+    return false;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/GetConfigOperation.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/GetConfigOperation.java
new file mode 100644 (file)
index 0000000..edbd799
--- /dev/null
@@ -0,0 +1,103 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.Optional;\r
+\r
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.opendaylight.netconf.api.DocumentedException;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorTag;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorType;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.api.xml.XmlUtil;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.xml.sax.SAXException;\r
+\r
+public class GetConfigOperation extends AbstractLastNetconfOperation {\r
+  private static final Logger logger = LoggerFactory.getLogger(GetConfigOperation.class);\r
+\r
+  private String deviceID;\r
+\r
+  public GetConfigOperation(final String netconfSessionIdForReporting,\r
+      final Optional<File> initialConfigXMLFile, String deviceID) {\r
+    super(netconfSessionIdForReporting);\r
+    this.deviceID = deviceID;\r
+    if (initialConfigXMLFile.isPresent()) {\r
+      logger.info("File is present: {}", initialConfigXMLFile.get().getName());\r
+    }\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) throws DocumentedException {\r
+    final Element element = document.createElement(XmlNetconfConstants.DATA_KEY);\r
+\r
+    String requestXml = XmlUtility.convertDocumentToString(operationElement);\r
+    logger.debug("netconf request recevied : {}", requestXml);\r
+    NetConfServerProperties config =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
+\r
+    final String baseUrl = config.getMapperPath() + "/getConfig";\r
+    NetConfResponse restResponse = XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
+\r
+    if (restResponse != null) {\r
+      ErrorCodeDetails errorCode = restResponse.getErrorCode();\r
+      if (errorCode != null && errorCode.getFaultCode() != null\r
+          && !errorCode.getFaultCode().equalsIgnoreCase("0")) {\r
+        logger.error("Error received : {} ", errorCode);\r
+        throw new DocumentedException(errorCode.getErrorMessage(),\r
+            ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),\r
+            ErrorSeverity.from(errorCode.getErrorSeverity()));\r
+      } else if (restResponse.getNetconfResponseXml() != null) {\r
+        Element element1 = null;\r
+        try {\r
+          logger.debug("Response received from mapper :{}", restResponse.getNetconfResponseXml());\r
+          element1 = XmlUtil.readXmlToElement(restResponse.getNetconfResponseXml());\r
+          XmlElement xmlElement = XmlElement.fromDomElement(element1);\r
+          Element domElement = xmlElement.getDomElement();\r
+          element.appendChild(element.getOwnerDocument().importNode(domElement, true));\r
+        } catch (SAXException | IOException e1) {\r
+          logger.error("Error while constructing the reponse {}", e1.toString());\r
+        }\r
+      }\r
+    } else {\r
+      logger.error("received the null response from mapper ");\r
+      throw new DocumentedException("Unable to perform Operation", ErrorType.from("application"),\r
+          ErrorTag.from("operation-failed"), ErrorSeverity.from("ERROR"));\r
+    }\r
+\r
+    return element;\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return XmlNetconfConstants.GET_CONFIG;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/GetOperation.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/GetOperation.java
new file mode 100644 (file)
index 0000000..491f069
--- /dev/null
@@ -0,0 +1,103 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import java.io.IOException;\r
+\r
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.opendaylight.netconf.api.DocumentedException;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorTag;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorType;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.api.xml.XmlUtil;\r
+import org.opendaylight.netconf.test.tool.rpc.DataList;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.xml.sax.SAXException;\r
+\r
+public class GetOperation extends AbstractLastNetconfOperation {\r
+  private static final Logger logger = LoggerFactory.getLogger(GetOperation.class);\r
+\r
+  private final DataList storage;\r
+  private String deviceID;\r
+\r
+  public GetOperation(final String netconfSessionIdForReporting, final DataList storage,\r
+      String deviceID) {\r
+    super(netconfSessionIdForReporting);\r
+    this.deviceID = deviceID;\r
+    this.storage = storage;\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) throws DocumentedException {\r
+    final Element element = document.createElement(XmlNetconfConstants.DATA_KEY);\r
+\r
+    for (final XmlElement e : storage.getConfigList()) {\r
+      final Element domElement = e.getDomElement();\r
+      element.appendChild(element.getOwnerDocument().importNode(domElement, true));\r
+    }\r
+\r
+    String requestXml = XmlUtility.convertDocumentToString(operationElement);\r
+    logger.debug("netconf request recevied : {}", requestXml);\r
+    NetConfServerProperties config =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
+\r
+    final String baseUrl = config.getMapperPath() + "/get";\r
+    NetConfResponse restResponse = XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
+\r
+    if (restResponse != null) {\r
+      ErrorCodeDetails errorCode = restResponse.getErrorCode();\r
+      if (errorCode != null && errorCode.getFaultCode() != null\r
+          && !errorCode.getFaultCode().equalsIgnoreCase("0")) {\r
+        throw new DocumentedException(errorCode.getErrorMessage(),\r
+            ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),\r
+            ErrorSeverity.from(errorCode.getErrorSeverity()));\r
+      } else if (restResponse.getNetconfResponseXml() != null) {\r
+        Element element1 = null;\r
+        try {\r
+          element1 = XmlUtil.readXmlToElement(restResponse.getNetconfResponseXml());\r
+          XmlElement xmlElement = XmlElement.fromDomElement(element1);\r
+          Element domElement = xmlElement.getDomElement();\r
+          element.appendChild(element.getOwnerDocument().importNode(domElement, true));\r
+        } catch (SAXException | IOException e1) {\r
+          logger.error("Error while constructing the reponse {}", e1.toString());\r
+        }\r
+      }\r
+    } else {\r
+      logger.error("received the null response from mapper ");\r
+      throw new DocumentedException("Unable to perform Operation", ErrorType.from("application"),\r
+          ErrorTag.from("operation-failed"), ErrorSeverity.from("ERROR"));\r
+    }\r
+    return element;\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return XmlNetconfConstants.GET;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationCommit.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationCommit.java
new file mode 100644 (file)
index 0000000..a6c43f7
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+\r
+public class OperationCommit extends AbstractLastNetconfOperation {\r
+\r
+  public OperationCommit(final String netconfSessionIdForReporting) {\r
+    super(netconfSessionIdForReporting);\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) {\r
+    return document.createElement(XmlNetconfConstants.OK);\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return XmlNetconfConstants.COMMIT;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationLock.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationLock.java
new file mode 100644 (file)
index 0000000..dc4e443
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+\r
+public class OperationLock extends AbstractLastNetconfOperation {\r
+\r
+  public OperationLock(final String netconfSessionIdForReporting) {\r
+    super(netconfSessionIdForReporting);\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) {\r
+    return document.createElement(XmlNetconfConstants.OK);\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return "lock";\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationUnLock.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/OperationUnLock.java
new file mode 100644 (file)
index 0000000..fd827ab
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+\r
+public class OperationUnLock extends AbstractLastNetconfOperation {\r
+\r
+  public OperationUnLock(final String netconfSessionIdForReporting) {\r
+    super(netconfSessionIdForReporting);\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) {\r
+    return document.createElement(XmlNetconfConstants.OK);\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return "unlock";\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SetConfigOperation.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SetConfigOperation.java
new file mode 100644 (file)
index 0000000..b61aea9
--- /dev/null
@@ -0,0 +1,114 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.opendaylight.netconf.api.DocumentedException;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorTag;\r
+import org.opendaylight.netconf.api.DocumentedException.ErrorType;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Attr;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+\r
+public class SetConfigOperation extends AbstractLastNetconfOperation {\r
+  private static final Logger logger = LoggerFactory.getLogger(SetConfigOperation.class);\r
+\r
+  private static final String DELETE_EDIT_CONFIG = "delete";\r
+  private static final String OPERATION = "operation";\r
+  private static final String REMOVE_EDIT_CONFIG = "remove";\r
+  private String deviceID;\r
+\r
+  public SetConfigOperation(final String netconfSessionIdForReporting, String deviceID) {\r
+    super(netconfSessionIdForReporting);\r
+    this.deviceID = deviceID;\r
+  }\r
+\r
+  @Override\r
+  protected Element handleWithNoSubsequentOperations(final Document document,\r
+      final XmlElement operationElement) throws DocumentedException {\r
+    final XmlElement configElementData =\r
+        operationElement.getOnlyChildElement(XmlNetconfConstants.CONFIG_KEY);\r
+    String delOrEditUrl = "setConfig";\r
+    if (containsDelete(configElementData)) {\r
+      delOrEditUrl = "delConfig";\r
+    }\r
+\r
+    String requestXml = XmlUtility.convertDocumentToString(operationElement);\r
+    logger.debug("netconf request recevied : {}", requestXml);\r
+    NetConfServerProperties config =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
+\r
+    final String baseUrl = config.getMapperPath() + "/" + delOrEditUrl;\r
+    NetConfResponse restResponse = XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
+\r
+    if (restResponse != null) {\r
+      ErrorCodeDetails errorCode = restResponse.getErrorCode();\r
+      if (errorCode != null) {\r
+        if (errorCode.getFaultCode() != null && errorCode.getFaultCode().equalsIgnoreCase("0")) {\r
+          return document.createElement(XmlNetconfConstants.OK);\r
+        } else {\r
+          logger.error("Error received : {}", errorCode);\r
+          throw new DocumentedException(errorCode.getErrorMessage(),\r
+              ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),\r
+              ErrorSeverity.from(errorCode.getErrorSeverity()));\r
+        }\r
+      } else {\r
+        return document.createElement(XmlNetconfConstants.OK);\r
+      }\r
+    } else {\r
+      logger.error("received the null response from mapper ");\r
+      throw new DocumentedException("Unable to perform Operation", ErrorType.from("application"),\r
+          ErrorTag.from("operation-failed"), ErrorSeverity.from("ERROR"));\r
+    }\r
+\r
+  }\r
+\r
+  @Override\r
+  protected String getOperationName() {\r
+    return "edit-config";\r
+  }\r
+\r
+  private boolean containsDelete(final XmlElement element) {\r
+    for (final Attr o : element.getAttributes().values()) {\r
+      if (o.getLocalName().equals(OPERATION)\r
+          && (o.getValue().equals(DELETE_EDIT_CONFIG) || o.getValue().equals(REMOVE_EDIT_CONFIG))) {\r
+        return true;\r
+      }\r
+\r
+    }\r
+\r
+    for (final XmlElement xmlElement : element.getChildElements()) {\r
+      if (containsDelete(xmlElement)) {\r
+        return true;\r
+      }\r
+\r
+    }\r
+\r
+    return false;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SoftwareActivateOperation.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SoftwareActivateOperation.java
new file mode 100644 (file)
index 0000000..ad0dac0
--- /dev/null
@@ -0,0 +1,108 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.opendaylight.netconf.api.DocumentedException;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.mapping.api.HandlingPriority;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperation;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Document;\r
+\r
+public class SoftwareActivateOperation implements NetconfOperation {\r
+  private static final Logger logger = LoggerFactory.getLogger(SoftwareActivateOperation.class);\r
+  public static final String SOFT_MGMT_NAMESPACE = "urn:o-ran:software-management:1.0";\r
+\r
+  private String deviceID;\r
+\r
+  public SoftwareActivateOperation(String deviceID) {\r
+    this.deviceID = deviceID;\r
+  }\r
+\r
+  @Override\r
+  public HandlingPriority canHandle(final Document message) throws DocumentedException {\r
+    OperationNameAndNamespace operationNameAndNamespace = null;\r
+    operationNameAndNamespace = new OperationNameAndNamespace(message);\r
+    return canHandle(operationNameAndNamespace.getOperationName(),\r
+        operationNameAndNamespace.getNamespace());\r
+  }\r
+\r
+  @Override\r
+  public Document handle(Document requestMessage,\r
+      NetconfOperationChainedExecution subsequentOperation) throws DocumentedException {\r
+\r
+    logger.debug("sw-activate rpc recevied in netconf server");\r
+    final XmlElement requestElement = XmlElement.fromDomDocument(requestMessage);\r
+\r
+    String requestXml = XmlUtility.convertDocumentToString(requestElement);\r
+    logger.debug("sw-activate rpc recevied requestXml = {}", requestXml);\r
+    NetConfServerProperties config =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
+\r
+    final String baseUrl = config.getMapperPath() + "/softwareActivate";\r
+    XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
+    return null;\r
+  }\r
+\r
+  protected HandlingPriority canHandle(final String operationName,\r
+      final String operationNamespace) {\r
+    return operationName.equals("software-activate")\r
+        && operationNamespace.equals(SOFT_MGMT_NAMESPACE)\r
+            ? HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY.increasePriority(1100)\r
+            : HandlingPriority.CANNOT_HANDLE;\r
+  }\r
+\r
+  public static final class OperationNameAndNamespace {\r
+    private final String operationName;\r
+    private final String namespace;\r
+\r
+    private final XmlElement operationElement;\r
+\r
+    public OperationNameAndNamespace(final Document message) throws DocumentedException {\r
+      XmlElement requestElement = null;\r
+      requestElement = getRequestElementWithCheck(message);\r
+      operationElement = requestElement.getOnlyChildElement();\r
+      operationName = operationElement.getName();\r
+      namespace = operationElement.getNamespace();\r
+    }\r
+\r
+    public String getOperationName() {\r
+      return operationName;\r
+    }\r
+\r
+    public String getNamespace() {\r
+      return namespace;\r
+    }\r
+\r
+    public XmlElement getOperationElement() {\r
+      return operationElement;\r
+    }\r
+  }\r
+\r
+  protected static XmlElement getRequestElementWithCheck(final Document message)\r
+      throws DocumentedException {\r
+    return XmlElement.fromDomElementWithExpected(message.getDocumentElement(),\r
+        XmlNetconfConstants.RPC_KEY, XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SoftwareDownloadOperation.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/SoftwareDownloadOperation.java
new file mode 100644 (file)
index 0000000..b6f4dc9
--- /dev/null
@@ -0,0 +1,110 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.opendaylight.netconf.api.DocumentedException;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
+import org.opendaylight.netconf.mapping.api.HandlingPriority;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperation;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.w3c.dom.Document;\r
+\r
+public class SoftwareDownloadOperation implements NetconfOperation {\r
+  private static final Logger logger = LoggerFactory.getLogger(SoftwareDownloadOperation.class);\r
+  public static final String SOFT_MGMT_NAMESPACE = "urn:o-ran:software-management:1.0";\r
+\r
+  private String deviceID;\r
+\r
+  public SoftwareDownloadOperation(String deviceID) {\r
+    this.deviceID = deviceID;\r
+  }\r
+\r
+  @Override\r
+  public HandlingPriority canHandle(final Document message) throws DocumentedException {\r
+    OperationNameAndNamespace operationNameAndNamespace = null;\r
+    operationNameAndNamespace = new OperationNameAndNamespace(message);\r
+    return canHandle(operationNameAndNamespace.getOperationName(),\r
+        operationNameAndNamespace.getNamespace());\r
+  }\r
+\r
+  @Override\r
+  public Document handle(Document requestMessage,\r
+      NetconfOperationChainedExecution subsequentOperation) throws DocumentedException {\r
+\r
+    logger.debug("sw-download rpc recevied in netconf server");\r
+    final XmlElement requestElement = XmlElement.fromDomDocument(requestMessage);\r
+\r
+    String requestXml = XmlUtility.convertDocumentToString(requestElement);\r
+    logger.debug("sw-download rpc recevied requestXml = {}", requestXml);\r
+    NetConfServerProperties config =\r
+        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
+\r
+    final String baseUrl = config.getMapperPath() + "/softwareDowload";\r
+    XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
+\r
+    return null;\r
+  }\r
+\r
+  protected HandlingPriority canHandle(final String operationName,\r
+      final String operationNamespace) {\r
+    return operationName.equals("software-download")\r
+        && operationNamespace.equals(SOFT_MGMT_NAMESPACE)\r
+            ? HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY.increasePriority(1100)\r
+            : HandlingPriority.CANNOT_HANDLE;\r
+  }\r
+\r
+  public static final class OperationNameAndNamespace {\r
+    private final String operationName;\r
+    private final String namespace;\r
+\r
+    private final XmlElement operationElement;\r
+\r
+    public OperationNameAndNamespace(final Document message) throws DocumentedException {\r
+      XmlElement requestElement = null;\r
+      requestElement = getRequestElementWithCheck(message);\r
+      operationElement = requestElement.getOnlyChildElement();\r
+      operationName = operationElement.getName();\r
+      namespace = operationElement.getNamespace();\r
+    }\r
+\r
+    public String getOperationName() {\r
+      return operationName;\r
+    }\r
+\r
+    public String getNamespace() {\r
+      return namespace;\r
+    }\r
+\r
+    public XmlElement getOperationElement() {\r
+      return operationElement;\r
+    }\r
+\r
+  }\r
+\r
+  protected static XmlElement getRequestElementWithCheck(final Document message)\r
+      throws DocumentedException {\r
+    return XmlElement.fromDomElementWithExpected(message.getDocumentElement(),\r
+        XmlNetconfConstants.RPC_KEY, XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/XmlUtility.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/rpc/XmlUtility.java
new file mode 100644 (file)
index 0000000..8432ee1
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.net.URI;\r
+import java.net.URISyntaxException;\r
+\r
+import javax.xml.XMLConstants;\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
+import org.opendaylight.netconf.api.xml.XmlElement;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.http.HttpEntity;\r
+import org.springframework.http.HttpHeaders;\r
+import org.springframework.web.client.RestTemplate;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.xml.sax.InputSource;\r
+\r
+public class XmlUtility {\r
+  private static final Logger logger = LoggerFactory.getLogger(XmlUtility.class);\r
+\r
+  private XmlUtility() {}\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(XmlUtility.class);\r
+\r
+  public static String convertDocumentToString(XmlElement element) {\r
+    return convertDocumentToString(element.getDomElement());\r
+  }\r
+\r
+  public static String convertDocumentToString(Element element) {\r
+    String strxml = null;\r
+    try {\r
+      TransformerFactory transformerFactory = TransformerFactory.newInstance();\r
+      transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+      transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");\r
+      Transformer transformer = transformerFactory.newTransformer();\r
+      DOMSource source = new DOMSource(element);\r
+      StreamResult result = new StreamResult(new StringWriter());\r
+      transformer.transform(source, result);\r
+      strxml = result.getWriter().toString();\r
+    } catch (Exception e) {\r
+      LOG.error("Error while converting Element to String {}", e.toString());\r
+    }\r
+\r
+    return strxml;\r
+  }\r
+\r
+  public static Element convertStringToDocument(String xmlStr) {\r
+    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+    factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
+    factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
+    DocumentBuilder builder;\r
+    try {\r
+      builder = factory.newDocumentBuilder();\r
+      Document doc = builder.parse(new InputSource(new StringReader(xmlStr)));\r
+      return doc.getDocumentElement();\r
+    } catch (Exception e) {\r
+      LOG.error("Error while converting String to element {}", e.toString());\r
+    }\r
+    return null;\r
+  }\r
+\r
+  public static NetConfResponse invokeMapperCall(String requestUrl, String requestXml,\r
+      String deviceID) {\r
+    URI uri = null;\r
+    try {\r
+      uri = new URI(requestUrl);\r
+    } catch (URISyntaxException e) {\r
+      logger.error("invalid URI {}", e.toString());\r
+    }\r
+\r
+    RestTemplate restTemplate = new RestTemplate();\r
+    HttpHeaders headers = new HttpHeaders();\r
+    NetConfRequest req = new NetConfRequest(requestXml, deviceID);\r
+\r
+    HttpEntity<NetConfRequest> entity = new HttpEntity<>(req, headers);\r
+    NetConfResponse restResponse = null;\r
+    if (uri != null) {\r
+      restResponse = restTemplate.postForObject(uri, entity, NetConfResponse.class);\r
+    }\r
+\r
+    return restResponse;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/NetConfServerManagerImpl.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/NetConfServerManagerImpl.java
new file mode 100644 (file)
index 0000000..eee8db6
--- /dev/null
@@ -0,0 +1,250 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.server;\r
+\r
+import java.net.URI;\r
+import java.net.URISyntaxException;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.NetconfServerManagementError;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.commscope.tr069adapter.netconf.dao.NetConfServerDetailsRepository;\r
+import org.commscope.tr069adapter.netconf.entity.NetConfServerDetailsEntity;\r
+import org.commscope.tr069adapter.netconf.error.RetryFailedException;\r
+import org.commscope.tr069adapter.netconf.error.ServerPortAllocationException;\r
+import org.commscope.tr069adapter.netconf.server.helper.ServerPortAllocationHelper;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpEntity;\r
+import org.springframework.http.HttpHeaders;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.web.client.RestTemplate;\r
+\r
+@Component\r
+public class NetConfServerManagerImpl {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfServerManagerImpl.class);\r
+\r
+  @Autowired\r
+  ServerPortAllocationHelper serverPortAllocator;\r
+\r
+  @Autowired\r
+  NetConfServerDetailsRepository netconfDAO;\r
+\r
+  @Autowired\r
+  NetConfServerProperties config;\r
+\r
+  @Autowired\r
+  NetconfServerStarter ncServerStarter;\r
+\r
+  @Autowired\r
+  RestartNetconfServerHandler restartServersHandler;\r
+\r
+  public void restartServers() {\r
+    LOG.debug("Restarting all netconf servers during startup...");\r
+    Iterable<NetConfServerDetailsEntity> entities = netconfDAO.findAll();\r
+    List<NetConfServerDetailsEntity> serverDetailsList = new ArrayList<>();\r
+    for (NetConfServerDetailsEntity entity : entities) {\r
+      serverDetailsList.add(entity);\r
+    }\r
+    restartServersOnStartup(serverDetailsList);\r
+\r
+    if (!serverDetailsList.isEmpty()) {\r
+      LOG.debug("Attempting to start failed netconf servers {}", serverDetailsList);\r
+      try {\r
+        restartServersHandler.restart(serverDetailsList);\r
+      } catch (RetryFailedException e) {\r
+        LOG.error("Failed to restart all netconf servers. {}", e.toString());\r
+      }\r
+    }\r
+    LOG.debug("Restarting netconf servers during startup is completed.");\r
+  }\r
+\r
+  public NetConfServerDetails createServer(String deviceId, String enodeBName) {\r
+    NetConfServerDetails result = new NetConfServerDetails();\r
+    NetConfServerDetailsEntity entity = null;\r
+    if (deviceId != null) {\r
+      entity = netconfDAO.findByDeviceId(deviceId);\r
+    } else if (enodeBName != null) {\r
+      entity = netconfDAO.findByEnodeBName(enodeBName);\r
+    } else {\r
+      // none is specified\r
+      LOG.error(\r
+          "Both deviceID and enodeBName are null. Hence failed to create the netconf server.");\r
+      return null;\r
+    }\r
+\r
+    if (null != entity) {\r
+      // found the entity. server is already running. double check and run\r
+      // if\r
+      // required. else return the details.\r
+\r
+      // update the ENB Name if Changed\r
+      entity.setEnodeBName(enodeBName);\r
+      netconfDAO.save(entity);\r
+      result = getNetConfServerDetails(deviceId, entity);\r
+      return result;\r
+    }\r
+\r
+    try {\r
+\r
+      String port = serverPortAllocator.reserveServerPort();\r
+      LOG.debug("Successfully reserved a port for deviceID={} ,port={}", deviceId, port);\r
+\r
+      // start the server\r
+      boolean isServerStarted = ncServerStarter.startServer(port, deviceId);\r
+      boolean isPortInUse = serverPortAllocator.isServerPortInUse(port);\r
+\r
+      if (!isServerStarted || !isPortInUse) {\r
+        LOG.error(\r
+            "Failed to start netconf server for deviceID: {}, at port:{} , isServerStarted={} ,isPortInUse={}",\r
+            deviceId, port, isServerStarted, isPortInUse);\r
+        return null;\r
+      }\r
+\r
+      // save the record in db\r
+      entity = new NetConfServerDetailsEntity();\r
+      entity.setDeviceId(deviceId);\r
+      entity.setListenPort(port);\r
+      entity.setEnodeBName(enodeBName);\r
+      netconfDAO.save(entity);\r
+\r
+      result = getNetConfServerDetails(deviceId, entity);\r
+      LOG.debug("Successfully started netconf server for deviceID= {}, port={}", deviceId, port);\r
+\r
+    } catch (ServerPortAllocationException e) {\r
+      LOG.error("Failed to allocate a port {}", e.toString());\r
+    }\r
+\r
+    if (entity != null) {\r
+      result.setDeviceId(deviceId);\r
+      result.setListenPort(entity.getListenPort());\r
+      String netconfListenAddress = getServiceHost();\r
+      if (netconfListenAddress == null) {\r
+        netconfListenAddress = config.getNetconfServerIP();\r
+      }\r
+      result.setListenAddress(netconfListenAddress);\r
+      result.setError(NetconfServerManagementError.SUCCESS);\r
+    }\r
+    return result;\r
+  }\r
+\r
+  public void restartServersOnStartup(List<NetConfServerDetailsEntity> serverDetailsList) {\r
+\r
+    List<NetConfServerDetailsEntity> startedServers = new ArrayList<>();\r
+    for (NetConfServerDetailsEntity entity : serverDetailsList) {\r
+\r
+      serverPortAllocator.checkAndReserveServerPort(entity.getListenPort());\r
+\r
+      serverPortAllocator.isServerPortInUse(entity.getListenPort());\r
+      boolean isServerStarted =\r
+          ncServerStarter.startServer(entity.getListenPort(), entity.getDeviceId());\r
+\r
+      if (isServerStarted) {\r
+        LOG.info("Successfully restarted NETCONF server {}  on port {}  upon application startup.",\r
+            entity.getDeviceId(), entity.getListenPort());\r
+        // we need to push the pnfEntry for IP updated\r
+        NetConfServerDetails details = getNetConfServerDetails(entity.getDeviceId(), entity);\r
+\r
+        final String baseUrl = config.getMapperPath() + "/registerNetconfServer";\r
+        URI uri = null;\r
+        try {\r
+          uri = new URI(baseUrl);\r
+        } catch (URISyntaxException e) {\r
+          LOG.error("error while contructing the URI {}", e.toString());\r
+        }\r
+        RestTemplate restTemplate = new RestTemplate();\r
+        HttpHeaders headers = new HttpHeaders();\r
+        HttpEntity<NetConfServerDetails> httpentity = new HttpEntity<>(details, headers);\r
+        boolean isSuccess = false;\r
+        if (uri != null) {\r
+          isSuccess = restTemplate.postForObject(uri, httpentity, Boolean.class);\r
+        }\r
+\r
+        if (!isSuccess) {\r
+          LOG.error("Netconf Register request is failed update the updated host details..");\r
+        } else {\r
+          LOG.debug("successfully started the server");\r
+        }\r
+        startedServers.add(entity);\r
+      } else {\r
+        LOG.error("Failed to restart NETCONF server {}  on port {}  upon application startup.",\r
+            entity.getDeviceId(), entity.getListenPort());\r
+      }\r
+    }\r
+    if (!serverDetailsList.isEmpty()) {\r
+      serverDetailsList.removeAll(startedServers);\r
+    }\r
+  }\r
+\r
+  private NetConfServerDetails getNetConfServerDetails(String deviceId,\r
+      NetConfServerDetailsEntity entity) {\r
+    NetConfServerDetails result = new NetConfServerDetails();\r
+    result.setDeviceId(deviceId);\r
+    result.setListenPort(entity.getListenPort());\r
+    result.setEnodeBName(entity.getEnodeBName());\r
+    String netconfListenAddress = getServiceHost();\r
+    if (netconfListenAddress == null) {\r
+      netconfListenAddress = config.getNetconfServerIP();\r
+    }\r
+    result.setListenAddress(netconfListenAddress);\r
+    result.setError(NetconfServerManagementError.SUCCESS);\r
+    return result;\r
+  }\r
+\r
+  public boolean unregister(String deviceId, String enodeBName) {\r
+    LOG.debug("Unregister is not yet supported deviceId={} enodeBName={}", deviceId, enodeBName);\r
+    return false;\r
+  }\r
+\r
+  public List<NetConfServerDetails> getServersInfo() {\r
+    Iterable<NetConfServerDetailsEntity> serverEntities = netconfDAO.findAll();\r
+    String netconfListenAddress = getServiceHost();\r
+    if (netconfListenAddress == null) {\r
+      netconfListenAddress = config.getNetconfServerIP();\r
+    }\r
+    List<NetConfServerDetails> result = new ArrayList<>();\r
+\r
+    for (NetConfServerDetailsEntity entity : serverEntities) {\r
+      NetConfServerDetails server = new NetConfServerDetails();\r
+      server.setDeviceId(entity.getDeviceId());\r
+      server.setEnodeBName(entity.getEnodeBName());\r
+      server.setError(NetconfServerManagementError.SUCCESS);\r
+      server.setListenAddress(netconfListenAddress);\r
+      server.setListenPort(entity.getListenPort());\r
+      result.add(server);\r
+    }\r
+    return result;\r
+  }\r
+\r
+  private String getServiceHost() {\r
+    Map<String, String> envs = System.getenv();\r
+    for (Entry<String, String> entry : envs.entrySet()) {\r
+      if (entry.getKey() != null && entry.getKey().endsWith("_NETCONF_SERVICE_SERVICE_HOST")) {\r
+        return entry.getValue();\r
+      }\r
+    }\r
+    return null;\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/NetconfServerStarter.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/NetconfServerStarter.java
new file mode 100644 (file)
index 0000000..39e4e3b
--- /dev/null
@@ -0,0 +1,182 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.server;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.File;\r
+import java.io.FileReader;\r
+import java.io.IOException;\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.concurrent.TimeUnit;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.commscope.tr069adapter.netconf.operations.CustomOperationsCreator;\r
+import org.opendaylight.netconf.test.tool.NetconfDeviceSimulator;\r
+import org.opendaylight.netconf.test.tool.config.Configuration;\r
+import org.opendaylight.netconf.test.tool.config.ConfigurationBuilder;\r
+import org.opendaylight.netconf.test.tool.operations.OperationsCreator;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.context.annotation.Scope;\r
+import org.springframework.stereotype.Component;\r
+import com.google.common.base.Preconditions;\r
+\r
+@Component\r
+@Scope("singleton")\r
+public class NetconfServerStarter {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(NetconfServerStarter.class);\r
+\r
+  @Autowired\r
+  NetConfServerProperties config;\r
+\r
+  public boolean startServer(String netConfPort, String macID) {\r
+\r
+    if (netConfPort == null) {\r
+      LOG.error("Invalid NETCONF port for deviceID: {}, port is null.", macID);\r
+      return false;\r
+    }\r
+\r
+    LOG.debug("Starting Netconf server for MACID :{}, on port :{}", macID, netConfPort);\r
+    boolean result = startServer(netConfPort, config.getSchemaDirPath(), macID);\r
+    LOG.debug("Completed starting Netconf server for MACID :{} , on port :{}, server status={}",\r
+        macID, netConfPort, result);\r
+\r
+    return result;\r
+  }\r
+\r
+  @SuppressWarnings({"resource", "deprecation"})\r
+  private boolean startServer(String portStr, String schemaDirPath, String macID) {\r
+\r
+    // creating configuration for the netconf instance\r
+    final Configuration configuration = new ConfigurationBuilder().build();\r
+    OperationsCreator operationsCreator = new CustomOperationsCreator(macID);\r
+    configuration.setOperationsCreator(operationsCreator);\r
+    configuration.setGenerateConfigsTimeout((int) TimeUnit.MINUTES.toMillis(30));\r
+    if (portStr != null) {\r
+      try {\r
+        int port = Integer.parseInt(portStr);\r
+        configuration.setStartingPort(port);\r
+      } catch (Exception e) {\r
+        LOG.error("Failed to get netconf service instance port for parameters {}", e.toString());\r
+        return false;\r
+      }\r
+    }\r
+    configuration.setDeviceCount(1);\r
+    configuration.setSsh(Boolean.TRUE);\r
+    File schemaDir = new File(schemaDirPath);\r
+    configuration.setSchemasDir(schemaDir);\r
+    configuration.setCapabilities(Configuration.DEFAULT_BASE_CAPABILITIES_EXI);\r
+    configuration.setIp("0.0.0.0");\r
+\r
+    boolean isSchemaLoaded = loadSchemas(schemaDir);\r
+    if (!isSchemaLoaded) {\r
+      LOG.debug("Failed to load schema for netconf server instance {}", macID);\r
+      return false;\r
+    }\r
+\r
+    try(final NetconfDevice netconfDevice = new NetconfDevice(configuration)){\r
+      final List<Integer> openDevices = netconfDevice.start();\r
+      if (openDevices.isEmpty()) {\r
+        LOG.debug("Failed to start netconf server instance {}", macID);\r
+        return false;\r
+      }\r
+      netconfDevice.setAutoClose(false);\r
+    } catch (RuntimeException e) {\r
+      LOG.error("Unhandled exception. Failed to start the server", e);\r
+      return false;\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+  private boolean loadSchemas(File schemasDir) {\r
+    if (schemasDir != null) {\r
+      if (!schemasDir.exists() || !schemasDir.isDirectory() || !schemasDir.canRead()) {\r
+        LOG.error("Failed to load schema. schema location is not valid.");\r
+        return false;\r
+      }\r
+\r
+      Pattern yangregex = Pattern.compile("(?<name>.*)@(?<revision>\\d{4}-\\d{2}-\\d{2})\\.yang");\r
+      Pattern revisionregex = Pattern.compile("revision\\s+\"?(\\d{4}-\\d{2}-\\d{2})\"?");\r
+\r
+      final File[] filesArray = schemasDir.listFiles();\r
+      final List<File> files =\r
+          filesArray != null ? Arrays.asList(filesArray) : Collections.emptyList();\r
+      for (final File file : files) {\r
+        final Matcher yangMatcher = yangregex.matcher(file.getName());\r
+        if (!yangMatcher.matches()) {\r
+          try (BufferedReader reader = new BufferedReader(new FileReader(file))) {\r
+            String line = reader.readLine();\r
+            while (line != null && !revisionregex.matcher(line).find()) {\r
+              line = reader.readLine();\r
+            }\r
+            loadSchemaPattren(line, file, revisionregex);\r
+          } catch (final IOException e) {\r
+            LOG.error("Unhandled exception. Failed to load the schema.{}", e.toString());\r
+            return false;\r
+          }\r
+        }\r
+      }\r
+    }\r
+    return true;\r
+  }\r
+\r
+  private void loadSchemaPattren(String line, File file, Pattern revisionregex) {\r
+    if (line != null) {\r
+      final Matcher m = revisionregex.matcher(line);\r
+      Preconditions.checkState(m.find());\r
+      String moduleName = file.getAbsolutePath();\r
+      if (file.getName().endsWith(".yang")) {\r
+        moduleName = moduleName.substring(0, moduleName.length() - 5);\r
+      }\r
+      final String revision = m.group(1);\r
+      final String correctName = moduleName + "@" + revision + ".yang";\r
+      final File correctNameFile = new File(correctName);\r
+      if (!file.renameTo(correctNameFile)) {\r
+        throw new IllegalStateException("Failed to rename '%s'." + file);\r
+      }\r
+    }\r
+  }\r
+\r
+}\r
+\r
+\r
+class NetconfDevice extends NetconfDeviceSimulator {\r
+  boolean autoClose = true;\r
+\r
+  public NetconfDevice(Configuration configuration) {\r
+    super(configuration);\r
+  }\r
+\r
+  @Override\r
+  public void close() {\r
+    if (autoClose)\r
+      super.close();\r
+  }\r
+\r
+  public void setAutoClose(boolean autoClose) {\r
+    this.autoClose = autoClose;\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/RestartNetconfServerHandler.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/RestartNetconfServerHandler.java
new file mode 100644 (file)
index 0000000..57e3602
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.server;\r
+\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.netconf.entity.NetConfServerDetailsEntity;\r
+import org.commscope.tr069adapter.netconf.error.RetryFailedException;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.retry.annotation.Backoff;\r
+import org.springframework.retry.annotation.Recover;\r
+import org.springframework.retry.annotation.Retryable;\r
+import org.springframework.stereotype.Service;\r
+\r
+@Service\r
+public class RestartNetconfServerHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(RestartNetconfServerHandler.class);\r
+\r
+  @Autowired\r
+  NetConfServerManagerImpl manager;\r
+\r
+  @Retryable(value = {RetryFailedException.class}, maxAttempts = 100,\r
+      backoff = @Backoff(delay = 15000))\r
+  public void restart(List<NetConfServerDetailsEntity> serverDetailsList)\r
+      throws RetryFailedException {\r
+    try {\r
+      // restart netconf servers\r
+      manager.restartServersOnStartup(serverDetailsList);\r
+    } catch (Exception e) {\r
+      logger.error("Retry to netconf servers has  is failed. {}", e.toString());\r
+      throw new RetryFailedException(e);\r
+    }\r
+\r
+    if (!serverDetailsList.isEmpty()) {\r
+      logger.error("Failed to start some of netconf servers. Retrying starting servers : {}",\r
+          serverDetailsList);\r
+      throw new RetryFailedException(\r
+          "Failed to start some of netconf servers. server list : " + serverDetailsList);\r
+    }\r
+    logger.debug("Successfully started all failed netconf servers.");\r
+  }\r
+\r
+  @Recover\r
+  public void recover(List<NetConfServerDetailsEntity> serverDetailsList) {\r
+    logger.debug("Retrying starting failed netconf servers.");\r
+    try {\r
+      restart(serverDetailsList);\r
+    } catch (RetryFailedException e) {\r
+      logger.error("Failed to start failed netconf servers. {}", e.toString());\r
+    }\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/helper/ServerPortAllocationHelper.java b/netconf-server/src/main/java/org/commscope/tr069adapter/netconf/server/helper/ServerPortAllocationHelper.java
new file mode 100644 (file)
index 0000000..a843e62
--- /dev/null
@@ -0,0 +1,142 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.server.helper;\r
+\r
+import java.io.IOException;\r
+import java.net.Socket;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.PriorityQueue;\r
+import java.util.concurrent.Semaphore;\r
+\r
+import javax.annotation.PostConstruct;\r
+\r
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
+import org.commscope.tr069adapter.netconf.error.ServerPortAllocationException;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class ServerPortAllocationHelper {\r
+\r
+  private static final Logger LOG = LoggerFactory.getLogger(ServerPortAllocationHelper.class);\r
+\r
+  private static Map<String, Semaphore> semaphoreMap = new HashMap<>();\r
+\r
+  private PriorityQueue<String> availablePorts = new PriorityQueue<>();\r
+\r
+  @Autowired\r
+  NetConfServerProperties config;\r
+\r
+  @PostConstruct\r
+  public void init() {\r
+    // read the port range and it the available ports.\r
+\r
+    Integer startPort = config.getDefaultNetconfStartPort();\r
+    Integer maxServers = config.getDefaultMaxServers();\r
+\r
+    try {\r
+      startPort = Integer.parseInt(config.getNetconfServersStartPort());\r
+    } catch (Exception e) {\r
+      LOG.warn(\r
+          "Failed to initialize the starting port from the environment {}. Hence using the default port range.",\r
+          config.getNetconfServersStartPort());\r
+    }\r
+\r
+    try {\r
+      maxServers = Integer.parseInt(config.getMaxNumOfNetconfServers());\r
+    } catch (Exception e) {\r
+      LOG.warn(\r
+          "Failed to initialize the max netconf server from the environment {} Hence using the default max servers.",\r
+          config.getMaxNumOfNetconfServers());\r
+    }\r
+\r
+    for (int i = startPort + maxServers - 1; i >= startPort; i--) {\r
+      semaphoreMap.put(String.valueOf(i), new Semaphore(1));\r
+      availablePorts.add(String.valueOf(i));\r
+    }\r
+    LOG.debug("Successfully populated available ports list.");\r
+  }\r
+\r
+  public String reserveServerPort() throws ServerPortAllocationException {\r
+\r
+    if (availablePorts.isEmpty()) {\r
+      LOG.debug(\r
+          "All ports are exhausted. Hence cannot allocate a port to start new netconf server.");\r
+    }\r
+\r
+    String port = availablePorts.peek();\r
+\r
+    LOG.debug("Trying to reserve port : {}", port);\r
+    if (isServerPortInUse(port)) {\r
+      LOG.debug("Port {} is already in use.", port);\r
+      return reserveServerPort(); // retry if current port is not available\r
+    }\r
+\r
+    Semaphore semaphore = semaphoreMap.get(port);\r
+    boolean isAcquired = semaphore.tryAcquire();\r
+    if (isAcquired) {\r
+      LOG.debug("Failed to acquire a lock for port :{}. Hence retrying...", port);\r
+      return reserveServerPort();\r
+    }\r
+\r
+    availablePorts.poll();\r
+    semaphore.release();\r
+    LOG.debug("Rserved port is {}", port);\r
+    return port;\r
+  }\r
+\r
+  public boolean checkAndReserveServerPort(String port) {\r
+\r
+    try {\r
+      Semaphore semaphore = semaphoreMap.get(port);\r
+      semaphore.acquire();\r
+      if (isServerPortInUse(port)) {\r
+        LOG.error("Port {}  already in use.", port);\r
+        semaphore.release();\r
+        return false;\r
+      }\r
+      availablePorts.remove(port);\r
+      semaphore.release();\r
+      LOG.error("Successfully reserved the port {} to start netconf server", port);\r
+    } catch (InterruptedException e) {\r
+      Thread.currentThread().interrupt();\r
+      LOG.error("Failed to lock the port {} : Exception :{}", port, e.toString());\r
+      return checkAndReserveServerPort(port); // retry acquiring the lock.\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+  public boolean isServerPortInUse(String port) {\r
+    return checkIfPortAvailable(port);\r
+  }\r
+\r
+  private static boolean checkIfPortAvailable(String portStr) {\r
+    Integer port = Integer.parseInt(portStr);\r
+    try (Socket ignored = new Socket("localhost", port)) {\r
+      return true;\r
+    } catch (IOException e) {\r
+      LOG.error("while checkIfPortAvailable {}", e.toString());\r
+      return false;\r
+    }\r
+  }\r
+}\r
diff --git a/netconf-server/src/main/resources/application.properties b/netconf-server/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..63c820a
--- /dev/null
@@ -0,0 +1,41 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# Spring boot application properties\r
+spring.application.name=tr069adapter-netconf-server\r
+server.port=${NETCONF_REST_PORT}\r
+config.requestTimeOut=30\r
+config.mapperPath=http://${MAPPER_REST_HOST}:${MAPPER_REST_PORT}/tr069MapperNBI\r
+config.netconfServerRestPort=${NETCONF_REST_PORT}\r
+config.netconfServersStartPort=${NETCONFSRVS_START_PORT}\r
+config.netconfServersEndPort=${NETCONFSRVS_END_PORT}\r
+config.maxNumOfNetconfServers=${NUM_SERVERS}\r
+config.netconfServerIP=${netConfServerIP}\r
+config.schemaDirPath=/opt/CSAdapter/schemas/\r
+\r
+\r
+## Datasource properties\r
+spring.datasource.platform=mariadb\r
+spring.datasource.initialization-mode=always\r
+spring.jpa.hibernate.ddl-auto=none\r
+spring.datasource.username=${DB_USERNAME}\r
+spring.datasource.password=${DB_PASSWORD}\r
+spring.datasource.url=jdbc:mariadb://${DB_SERVICE}:3306/${DB_NAME}\r
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver\r
+spring.jpa.show-sql=true\r
+\r
diff --git a/netconf-server/src/main/resources/log4j2.xml b/netconf-server/src/main/resources/log4j2.xml
new file mode 100644 (file)
index 0000000..32d995d
--- /dev/null
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<Configuration status="DEBUG" monitorInterval="30">\r
+    <Properties>\r
+        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %m%n</Property>\r
+        <Property name="APP_LOG_ROOT">/logs</Property>\r
+    </Properties>\r
+    <Appenders>\r
+       <Console name="console" target="SYSTEM_OUT" follow="true">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+        </Console>\r
+        \r
+        <RollingFile name="applicationLog"\r
+            fileName="${APP_LOG_ROOT}/debug/application-debug.log"\r
+            filePattern="${APP_LOG_ROOT}/debug/application-debug-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout>\r
+               <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%X{client}] [%.-40t] %-25.45c{1} %-5p: %m%n</pattern>\r
+               <header>Debug Log started at: $${date:yyyy-MM-dd HH:mm:ss}</header>\r
+            </PatternLayout>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy max="100" />\r
+        </RollingFile>\r
+  \r
+               <RollingFile name="springLog" \r
+                       fileName="${APP_LOG_ROOT}/thirdparty/spring-framework.log"\r
+            filePattern="${APP_LOG_ROOT}/thirdparty/spring-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="2MB" />\r
+            </Policies>\r
+            <DefaultRolloverStrategy max="100"/>\r
+        </RollingFile>\r
+   \r
+       <RollingFile name="thirdPartyLog" \r
+                       fileName="${APP_LOG_ROOT}/thirdparty/third-party-framework.log"\r
+            filePattern="${APP_LOG_ROOT}/thirdparty/spring-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="2MB" />\r
+            </Policies>\r
+            <DefaultRolloverStrategy max="100"/>\r
+        </RollingFile>\r
+             \r
+    </Appenders>\r
+    \r
+    <Loggers>\r
+       <Logger name="org.commscope.tr069adapter" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+               <appender-ref ref="applicationLog"/>\r
+       </Logger>\r
+       \r
+       <Logger name="org" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="thirdPartyLog" />\r
+        </Logger>\r
+       \r
+       <Logger name="org.springframework" level="error" additivity="false">\r
+            <AppenderRef ref="springLog" />\r
+        </Logger>\r
+        \r
+        <Root level="DEBUG" additivity="false"/>\r
+    </Loggers>\r
+</Configuration>\r
diff --git a/netconf-server/src/main/resources/schema-mariadb.sql b/netconf-server/src/main/resources/schema-mariadb.sql
new file mode 100644 (file)
index 0000000..09c6dcd
--- /dev/null
@@ -0,0 +1 @@
+CREATE TABLE IF NOT EXISTS netconf_server_details (ID int null,DEVICE_ID varchar(30),ENODEB_NAME varchar(255), PORT varchar(10));
\ No newline at end of file
diff --git a/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/error/ServerPortAllocationExceptionTest.java b/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/error/ServerPortAllocationExceptionTest.java
new file mode 100644 (file)
index 0000000..ede1054
--- /dev/null
@@ -0,0 +1,60 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.error;\r
+\r
+import static org.junit.jupiter.api.Assertions.*;\r
+\r
+import org.commscope.tr069adapter.mapper.model.NetconfServerManagementError;\r
+import org.junit.jupiter.api.Test;\r
+\r
+class ServerPortAllocationExceptionTest {\r
+\r
+  @Test\r
+  void testServerPortAllocationException() {\r
+    try {\r
+      throw new ServerPortAllocationException(NetconfServerManagementError.PORT_IN_USE);\r
+\r
+    } catch (ServerPortAllocationException e) {\r
+      assertTrue(true);\r
+    }\r
+  }\r
+\r
+  @Test\r
+  void testGetError() {\r
+    try {\r
+      throw new ServerPortAllocationException(NetconfServerManagementError.PORT_IN_USE);\r
+\r
+    } catch (ServerPortAllocationException e) {\r
+      assertTrue(e.getError().equals(NetconfServerManagementError.PORT_IN_USE));\r
+    }\r
+  }\r
+\r
+  @Test\r
+  void testSetError() {\r
+    try {\r
+      ServerPortAllocationException se =\r
+          new ServerPortAllocationException(NetconfServerManagementError.INTERNAL_ERROR);\r
+      throw se;\r
+\r
+    } catch (ServerPortAllocationException e) {\r
+      assertTrue(e.getError().equals(NetconfServerManagementError.INTERNAL_ERROR));\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/operations/CustomOperationsCreatorTest.java b/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/operations/CustomOperationsCreatorTest.java
new file mode 100644 (file)
index 0000000..961e6b7
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.operations;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.junit.jupiter.api.Test;\r
+import org.opendaylight.netconf.api.capability.Capability;\r
+import org.opendaylight.netconf.impl.SessionIdProvider;\r
+import org.opendaylight.netconf.mapping.api.NetconfOperation;\r
+\r
+class CustomOperationsCreatorTest {\r
+\r
+  @Test\r
+  void testCustomOperationsCreator() {\r
+    CustomOperationsCreator coc = getCustomOperationsCreator();\r
+    Set<Capability> capabilities = new HashSet<Capability>();\r
+    Set<NetconfOperation> opers =\r
+        coc.getNetconfOperationService(capabilities, new SessionIdProvider(), "1")\r
+            .getNetconfOperations();\r
+    assertTrue(opers != null);\r
+    assertTrue(!opers.isEmpty());\r
+  }\r
+\r
+  CustomOperationsCreator getCustomOperationsCreator() {\r
+    CustomOperationsCreator coc = new CustomOperationsCreator("0005B9AB1");\r
+    return coc;\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/restapi/NetConfServerManagerRestApiTest.java b/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/restapi/NetConfServerManagerRestApiTest.java
new file mode 100644 (file)
index 0000000..6834c3d
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.restapi;\r
+\r
+import static org.junit.jupiter.api.Assertions.assertEquals;\r
+\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.dao.NetConfServerDetailsRepository;\r
+import org.commscope.tr069adapter.netconf.entity.NetConfServerDetailsEntity;\r
+import org.commscope.tr069adapter.netconf.server.NetConfServerManagerImpl;\r
+import org.junit.FixMethodOrder;\r
+import org.junit.jupiter.api.Test;\r
+import org.junit.jupiter.api.extension.ExtendWith;\r
+import org.junit.runners.MethodSorters;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.mock.web.MockHttpServletResponse;\r
+import org.springframework.test.context.junit.jupiter.SpringExtension;\r
+import org.springframework.test.web.servlet.MockMvc;\r
+import org.springframework.test.web.servlet.MvcResult;\r
+import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;\r
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
+\r
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)\r
+@ExtendWith(SpringExtension.class)\r
+@SpringBootTest(classes = {NetConfServiceBooter.class},\r
+    args = "--schemas-dir test-schemas --debug true --starting-port 17830")\r
+@AutoConfigureMockMvc\r
+public class NetConfServerManagerRestApiTest {\r
+\r
+  @Autowired\r
+  private MockMvc mockMvc;\r
+\r
+  @MockBean\r
+  NetConfServerDetailsRepository netconfDAO;\r
+\r
+  @Autowired\r
+  NetConfServerManagerImpl manager;\r
+\r
+  @Test\r
+  public void createNetconfServer() throws Exception {\r
+\r
+    NetConfServerDetailsEntity entity = new NetConfServerDetailsEntity();\r
+    entity.setDeviceId("0005B9AB1");\r
+    entity.setEnodeBName("0005B9AB1");\r
+    entity.setId(1l);\r
+    entity.setListenPort("17830");\r
+\r
+    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders\r
+        .post("/netConfServerManagerService/createServer").param("deviceId", "0005B9AB1")\r
+        .param("enodeBName", "0005B9AB1").accept(MediaType.APPLICATION_JSON);\r
+    MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+\r
+    MockHttpServletResponse response = result.getResponse();\r
+\r
+    assertEquals(HttpStatus.OK.value(), response.getStatus());\r
+\r
+  }\r
+\r
+  @Test\r
+  public void listNetconfServers() throws Exception {\r
+\r
+    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders\r
+        .get("/netConfServerManagerService/listServers").accept(MediaType.APPLICATION_JSON);\r
+    MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
+    MockHttpServletResponse response = result.getResponse();\r
+\r
+    assertEquals(HttpStatus.OK.value(), response.getStatus());\r
+\r
+  }\r
+\r
+  @Test\r
+  public void restartServersOnStartup() {\r
+    boolean result = false;\r
+    try {\r
+      manager.restartServers();\r
+      result = true;\r
+    } catch (Exception e) {\r
+      assertEquals(false, result); // if no exception\r
+    }\r
+    assertEquals(true, result); // if no exception\r
+\r
+  }\r
+}\r
diff --git a/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/restapi/NotificationServerRestApiTest.java b/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/restapi/NotificationServerRestApiTest.java
new file mode 100644 (file)
index 0000000..3a865c5
--- /dev/null
@@ -0,0 +1,68 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.restapi;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.junit.FixMethodOrder;\r
+import org.junit.jupiter.api.Test;\r
+import org.junit.jupiter.api.extension.ExtendWith;\r
+import org.junit.runners.MethodSorters;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.test.context.junit.jupiter.SpringExtension;\r
+\r
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)\r
+@ExtendWith(SpringExtension.class)\r
+@SpringBootTest(classes = {NetConfServiceBooter.class},\r
+    args = "--schemas-dir test-schemas --debug true --starting-port 17830")\r
+@AutoConfigureMockMvc\r
+public class NotificationServerRestApiTest {\r
+\r
+  @Autowired\r
+  NotificationReceiverService service;\r
+\r
+  @Test\r
+  public void createNetconfServer() {\r
+\r
+    DeviceInform notification = new DeviceInform();\r
+\r
+    DeviceDetails deviceDetails = new TR069DeviceDetails();\r
+    notification.setDeviceDetails(deviceDetails);\r
+    List<InformType> notificationTypeList = new ArrayList<>();\r
+    InformType itype = TR069InformType.BOOTSTRAP;\r
+    notificationTypeList.add(itype);\r
+    notification.setInformTypeList(notificationTypeList);\r
+    List<ParameterDTO> parameters = new ArrayList<>();\r
+    ParameterDTO param1 = new ParameterDTO("Device.Info", "info-details");\r
+    parameters.add(param1);\r
+    notification.setParameters(parameters);\r
+    service.processNotification(notification);\r
+\r
+  }\r
+}\r
diff --git a/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/rpc/XmlUtilityTest.java b/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/rpc/XmlUtilityTest.java
new file mode 100644 (file)
index 0000000..91d420b
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.rpc;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import org.junit.jupiter.api.Test;\r
+import org.w3c.dom.Element;\r
+\r
+class XmlUtilityTest {\r
+\r
+  @Test\r
+  void testConvertDocumentToStringXmlElement() {\r
+\r
+    String xmlStr =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><source><running /></source><filter xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" ns0:type=\"subtree\"><device xmlns=\"urn:onf:otcc:wireless:yang:radio-access-186\"><services><fap-service xmlns=\"urn:onf:otcc:wireless:yang:radio-access\"><index>1</index><cell-config><lte><epc/></lte></cell-config></fap-service></services></device></filter></get-config>";\r
+    try {\r
+      Element el = XmlUtility.convertStringToDocument(xmlStr);\r
+      String result = XmlUtility.convertDocumentToString(el);\r
+      assertTrue(result != null);\r
+    } catch (Exception e) {\r
+      fail("Failed to convert string into document.");\r
+    }\r
+  }\r
+\r
+  @Test\r
+  void testConvertStringToDocument() {\r
+    String xmlStr =\r
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rpc-reply xmlns=\"URN\" xmlns:junos=\"URL\"><data/></rpc-reply>";\r
+    try {\r
+      XmlUtility.convertStringToDocument(xmlStr);\r
+    } catch (Exception e) {\r
+      fail("Failed to convert string into document.");\r
+    }\r
+    assertTrue(true);\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/server/RestartNetconfServerHandlerTest.java b/netconf-server/src/test/java/org/commscope/tr069adapter/netconf/server/RestartNetconfServerHandlerTest.java
new file mode 100644 (file)
index 0000000..97f4ed2
--- /dev/null
@@ -0,0 +1,72 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.netconf.server;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
+import org.commscope.tr069adapter.netconf.entity.NetConfServerDetailsEntity;\r
+import org.commscope.tr069adapter.netconf.error.RetryFailedException;\r
+import org.junit.FixMethodOrder;\r
+import org.junit.jupiter.api.Test;\r
+import org.junit.jupiter.api.extension.ExtendWith;\r
+import org.junit.runners.MethodSorters;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.test.context.junit.jupiter.SpringExtension;\r
+\r
+\r
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)\r
+@ExtendWith(SpringExtension.class)\r
+@SpringBootTest(classes = {NetConfServiceBooter.class},\r
+    args = "--schemas-dir test-schemas --debug true --starting-port 17830")\r
+@AutoConfigureMockMvc\r
+class RestartNetconfServerHandlerTest {\r
+\r
+  @MockBean\r
+  NetConfServerManagerImpl manager;\r
+\r
+  @Autowired\r
+  RestartNetconfServerHandler restartHandler;\r
+\r
+  @Test\r
+  void testRestart() {\r
+    List<NetConfServerDetailsEntity> sList = new ArrayList<NetConfServerDetailsEntity>();\r
+    try {\r
+      restartHandler.restart(sList);\r
+    } catch (RetryFailedException e) {\r
+      fail("Exception while retry.");\r
+    }\r
+    assertTrue(true);\r
+  }\r
+\r
+  @Test\r
+  void testRecover() {\r
+    List<NetConfServerDetailsEntity> sList = new ArrayList<NetConfServerDetailsEntity>();\r
+    restartHandler.recover(sList);\r
+    assertTrue(true);\r
+  }\r
+\r
+}\r
diff --git a/netconf-server/src/test/resources/application.properties b/netconf-server/src/test/resources/application.properties
new file mode 100644 (file)
index 0000000..7f3a318
--- /dev/null
@@ -0,0 +1,38 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# Spring boot application properties\r
+spring.application.name=tr069adapter-netconf-server\r
+server.port=8181\r
+config.RequestTimeOut=30\r
+config.MapperPath=http://localhost:8181/tr069MapperNBI\r
+config.netconfServerRestPort=7878\r
+config.netconfServersStartPort=17830\r
+config.netconfServersEndPort=18830\r
+config.maxNumOfNetconfServers=200\r
+config.netconfServerIP=localhost\r
+config.schemaDirPath=test-schemas\r
+\r
+## Datasource properties\r
+spring.datasource.driver-class-name=org.h2.Driver\r
+spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1\r
+spring.datasource.username=sa\r
+spring.datasource.password=sa\r
+spring.jpa.show-sql=true\r
+spring.jpa.hibernate.ddl-auto=create\r
+\r
diff --git a/pom.xml b/pom.xml
new file mode 100644 (file)
index 0000000..8ba365d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <parent>\r
+      <groupId>org.springframework.boot</groupId>\r
+      <artifactId>spring-boot-starter-parent</artifactId>\r
+      <version>2.2.1.RELEASE</version>\r
+   </parent>\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter</groupId>\r
+   <artifactId>tr069adapter</artifactId>\r
+   <version>1.0.0</version>\r
+   <packaging>pom</packaging>\r
+   <name>tr069adapter</name>\r
+   <properties>\r
+      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\r
+      <build.version>1.12.0</build.version>\r
+      <jdk.version>1.7</jdk.version>\r
+      <java.version>1.8</java.version>\r
+      <org.apache.axis.version>1.4</org.apache.axis.version>\r
+      <junit.version>4.12</junit.version>\r
+      <junit.scope>test</junit.scope>\r
+      <jta.version>1.1</jta.version>\r
+      <jaxb-api.version>2.1</jaxb-api.version>\r
+      <org.mockito.version>1.8.4</org.mockito.version>\r
+      <maven-clean-plugin.version>2.4.1</maven-clean-plugin.version>\r
+      <maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>\r
+      <maven-surefire-plugin.version>2.22.0</maven-surefire-plugin.version>\r
+      <maven-assembly-plugin.version>2.2</maven-assembly-plugin.version>\r
+      <maven-deploy-plugin.version>2.7</maven-deploy-plugin.version>\r
+      <log4j.extras>1.2.17</log4j.extras>\r
+      <docker-maven-plugin>0.30.0</docker-maven-plugin>\r
+      <sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>\r
+      <jacoco-maven-plugin.version>0.8.5</jacoco-maven-plugin.version>\r
+      <spotless-maven-plugin.version>1.18.0</spotless-maven-plugin.version>\r
+      <formatter-maven-plugin.version>2.8.1</formatter-maven-plugin.version>\r
+   </properties>\r
+   <modules>\r
+      <module>common</module>\r
+      <module>db</module>\r
+      <module>factory</module>\r
+      <module>acs</module>\r
+      <module>mapper</module>\r
+      <module>netconf-server</module>\r
+      <module>ves-agent</module>\r
+      <module>config-data</module>\r
+   </modules>\r
+</project>
\ No newline at end of file
diff --git a/tox.ini b/tox.ini
new file mode 100644 (file)
index 0000000..5cc8396
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,35 @@
+# This work is licensed under a Creative Commons Attribution 4.0 International License.
+# SPDX-License-Identifier: CC-BY-4.0
+# Copyright (C) 2019 AT&T Intellectual Property
+# documentation only
+
+[tox]
+minversion = 2.0
+envlist =
+    docs,
+    docs-linkcheck,
+skipsdist = true
+
+[testenv:docs]
+basepython = python3
+deps =
+    sphinx
+    sphinx-rtd-theme
+    sphinxcontrib-httpdomain
+    recommonmark
+    lfdocs-conf
+
+commands =
+    sphinx-build -W -b html -n -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/html
+    echo "Generated docs available in {toxinidir}/docs/_build/html"
+whitelist_externals = echo
+
+[testenv:docs-linkcheck]
+basepython = python3
+deps = sphinx
+       sphinx-rtd-theme
+       sphinxcontrib-httpdomain
+       recommonmark
+       lfdocs-conf
+commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/linkcheck
+
diff --git a/ves-agent/Dockerfile b/ves-agent/Dockerfile
new file mode 100644 (file)
index 0000000..c92a4c4
--- /dev/null
@@ -0,0 +1,42 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+FROM openjdk:8-alpine\r
+\r
+ARG JAR\r
+\r
+ENV VES_REST_PORT=8383\r
+ENV CONFIG_NAME_SPACE=default\r
+ENV CONFIG_MAP_NAME=tr069adapter-ves-notifier\r
+ENV CONFIG_RELOAD_TIME=6000000\r
+ENV faultvesCollectorHost=localhost\r
+ENV faultvesCollectorPort=30235\r
+ENV pnfregvesCollectorHost=localhost\r
+ENV pnfregvesCollectorPort=30235\r
+ENV vendorName=CommScope\r
+ENV faultEventType=CommScope_RAN_Alarms\r
+ENV pnfRegEventType=CommScope_RAN_pnfRegistration\r
+ENV unitFamily=OneCell\r
+ENV unitType=BasebandController\r
+ENV faultEventSourcePrefix=OneCell\r
+\r
+WORKDIR /opt/CSAdapter/\r
+\r
+ADD target/${JAR} ./lib/ves-agent.jar\r
+EXPOSE ${VES_REST_PORT}\r
+ENTRYPOINT ["java", "-jar", "./lib/ves-agent.jar"]\r
diff --git a/ves-agent/pom.xml b/ves-agent/pom.xml
new file mode 100644 (file)
index 0000000..30c9fdc
--- /dev/null
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+   <parent>\r
+      <groupId>org.commscope.tr069adapter</groupId>\r
+      <artifactId>tr069adapter</artifactId>\r
+      <version>1.0.0</version>\r
+   </parent>\r
+   <modelVersion>4.0.0</modelVersion>\r
+   <groupId>org.commscope.tr069adapter.ves.agent</groupId>\r
+   <artifactId>ves-agent</artifactId>\r
+   <packaging>jar</packaging>\r
+   <name>ves-agent</name>\r
+   <licenses>\r
+      <license>\r
+         <name>The Apache Software License, Version 2.0</name>\r
+         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
+      </license>\r
+   </licenses>\r
+   <repositories>\r
+      <repository>\r
+         <id>onap-releases</id>\r
+         <name>onap-releases</name>\r
+         <url>https://nexus.onap.org/content/repositories/releases/</url>\r
+      </repository>\r
+   </repositories>\r
+   <properties>\r
+      <docker.image.name>tr069adapter-ves-notifier</docker.image.name>\r
+   </properties>\r
+   <dependencies>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-web</artifactId>\r
+         <exclusions>\r
+            <exclusion>\r
+               <groupId>org.springframework.boot</groupId>\r
+               <artifactId>spring-boot-starter-logging</artifactId>\r
+            </exclusion>\r
+         </exclusions>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-log4j2</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>com.google.code.gson</groupId>\r
+         <artifactId>gson</artifactId>\r
+         <scope>compile</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.mockito</groupId>\r
+         <artifactId>mockito-core</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-starter-test</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit</artifactId>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>junit</groupId>\r
+         <artifactId>junit-dep</artifactId>\r
+         <version>4.11</version>\r
+         <scope>test</scope>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.cloud</groupId>\r
+         <artifactId>spring-cloud-starter-kubernetes-config</artifactId>\r
+         <version>1.1.0.RELEASE</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.springframework.boot</groupId>\r
+         <artifactId>spring-boot-actuator-autoconfigure</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.apache.httpcomponents</groupId>\r
+         <artifactId>httpclient</artifactId>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.acs.common</groupId>\r
+         <artifactId>acs-common</artifactId>\r
+         <version>1.0.0</version>\r
+      </dependency>\r
+      <dependency>\r
+         <groupId>org.commscope.tr069adapter.mapper</groupId>\r
+         <artifactId>mapper</artifactId>\r
+         <version>1.0.0</version>\r
+         <classifier>lib</classifier>\r
+      </dependency>\r
+   </dependencies>\r
+   <build>\r
+      <plugins>\r
+         <plugin>\r
+            <groupId>org.springframework.boot</groupId>\r
+            <artifactId>spring-boot-maven-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>net.revelc.code.formatter</groupId>\r
+            <artifactId>formatter-maven-plugin</artifactId>\r
+            <version>${formatter-maven-plugin.version}</version>\r
+            <configuration>\r
+               <configFile>${project.parent.basedir}/eclipse-formatter.xml</configFile>\r
+            </configuration>\r
+            <!-- https://code.revelc.net/formatter-maven-plugin/ use mvn formatter:format\r
+                                        spotless:apply process-sources -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>com.diffplug.spotless</groupId>\r
+            <artifactId>spotless-maven-plugin</artifactId>\r
+            <version>${spotless-maven-plugin.version}</version>\r
+            <configuration>\r
+               <java>\r
+                  <removeUnusedImports />\r
+                  <importOrder>\r
+                     <order>com,java,javax,org</order>\r
+                  </importOrder>\r
+               </java>\r
+            </configuration>\r
+            <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven use\r
+                                        mvn spotless:apply to rewrite source files use mvn spotless:check to validate\r
+                                        source files -->\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-surefire-plugin</artifactId>\r
+             <version>2.17</version>\r
+            <configuration>\r
+               <skipTests>false</skipTests>\r
+            </configuration>\r
+         </plugin>\r
+         <plugin>\r
+            <artifactId>maven-failsafe-plugin</artifactId>\r
+         </plugin>\r
+         <plugin>\r
+            <groupId>io.fabric8</groupId>\r
+            <artifactId>docker-maven-plugin</artifactId>\r
+            <version>${docker-maven-plugin}</version>\r
+            <inherited>false</inherited>\r
+            <executions>\r
+               <execution>\r
+                  <id>generate-policy-agent-image</id>\r
+                  <phase>package</phase>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                                <goal>save</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}</name>\r
+                           <build>\r
+                              <cleanup>try</cleanup>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>${project.version}</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+               <execution>\r
+                  <id>push-policy-agent-image</id>\r
+                  <goals>\r
+                     <goal>build</goal>\r
+                     <goal>push</goal>\r
+                  </goals>\r
+                  <configuration>\r
+                     <pullRegistry>${env.CONTAINER_PULL_REGISTRY}</pullRegistry>\r
+                     <pushRegistry>${env.CONTAINER_PUSH_REGISTRY}</pushRegistry>\r
+                     <images>\r
+                        <image>\r
+                           <name>${docker.image.name}:${project.version}</name>\r
+                           <build>\r
+                              <contextDir>${basedir}</contextDir>\r
+                              <dockerFile>Dockerfile</dockerFile>\r
+                              <args>\r
+                                 <JAR>${project.build.finalName}.jar</JAR>\r
+                              </args>\r
+                              <tags>\r
+                                 <tag>latest</tag>\r
+                              </tags>\r
+                           </build>\r
+                        </image>\r
+                     </images>\r
+                  </configuration>\r
+               </execution>\r
+            </executions>\r
+         </plugin>\r
+         <!-- support sonar in multi-module project -->\r
+         <plugin>\r
+            <groupId>org.sonarsource.scanner.maven</groupId>\r
+            <artifactId>sonar-maven-plugin</artifactId>\r
+            <version>${sonar-maven-plugin.version}</version>\r
+         </plugin>\r
+      </plugins>\r
+   </build>\r
+   <issueManagement>\r
+      <system>JIRA</system>\r
+      <url>https://jira.o-ran-sc.org/</url>\r
+   </issueManagement>\r
+</project>
\ No newline at end of file
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/InformEventData.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/InformEventData.java
new file mode 100644 (file)
index 0000000..4101d85
--- /dev/null
@@ -0,0 +1,63 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.vesagent;\r
+\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;\r
+\r
+public class InformEventData {\r
+\r
+  public static final String MANUFACTURER = "Manufacturer";\r
+  public static final String SERIALNUMBER = "SerialNumber";\r
+  public static final String SOFTWAREVERSION = "SoftwareVersion";\r
+  public static final String MANUFACTUREROUI = "ManufacturerOUI";\r
+  public static final String PRODUCTCLASS = "ProductClass";\r
+  public static final String IPV6ADDRESS = "IPv6Address";\r
+  public static final String IPADDRESS = "IPAddress";\r
+  private PnfRegEventFields feilds = new PnfRegEventFields();\r
+\r
+  public void parse(ParameterDTO parameter, String tempEEParam) {\r
+    if (null == parameter.getParamValue()) {\r
+      return;\r
+    }\r
+    if (tempEEParam.endsWith(MANUFACTURER)) {\r
+      feilds.setVendorName(parameter.getParamValue());\r
+    } else if (tempEEParam.endsWith(SERIALNUMBER)) {\r
+      feilds.setSerialNumber(parameter.getParamValue());\r
+      feilds.setMacAddress(parameter.getParamValue());\r
+    } else if (tempEEParam.endsWith(SOFTWAREVERSION)) {\r
+      feilds.setSoftwareVersion(parameter.getParamValue());\r
+    } else if (tempEEParam.endsWith(MANUFACTUREROUI)) {\r
+      feilds.setUnitType(parameter.getParamValue());\r
+    } else if (tempEEParam.endsWith(PRODUCTCLASS)) {\r
+      feilds.setUnitFamily(parameter.getParamValue());\r
+    } else if (tempEEParam.contains(IPV6ADDRESS)) {\r
+      feilds.setOamV6IpAddress(parameter.getParamValue());\r
+    } else if (tempEEParam.contains(IPADDRESS)) {\r
+      feilds.setOamV4IpAddress(parameter.getParamValue());\r
+    }\r
+  }\r
+\r
+  public PnfRegEventFields getFeilds() {\r
+    return feilds;\r
+  }\r
+\r
+  public void setFeilds(PnfRegEventFields feilds) {\r
+    this.feilds = feilds;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/VesConfiguration.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/VesConfiguration.java
new file mode 100644 (file)
index 0000000..7ec6b66
--- /dev/null
@@ -0,0 +1,164 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent;\r
+\r
+import org.springframework.boot.context.properties.ConfigurationProperties;\r
+import org.springframework.context.annotation.Configuration;\r
+\r
+@Configuration\r
+@ConfigurationProperties(prefix = "config")\r
+public class VesConfiguration {\r
+\r
+  private String faultvesCollectorHost;\r
+  private String faultvesCollectorPort;\r
+  private String pnfregvesCollectorHost;\r
+  private String pnfregvesCollectorPort;\r
+  private String vendorName;\r
+  private String vesVersion;\r
+  private String eventVersion;\r
+  private String faultEventType;\r
+  private String pnfRegEventType;\r
+  private String faultFeildVersion;\r
+  private String pnfFeildVersion;\r
+  private String unitFamily;\r
+  private String unitType;\r
+  private String faultEventSourcePrefix;\r
+\r
+  public String getFaultvesCollectorHost() {\r
+    return faultvesCollectorHost;\r
+  }\r
+\r
+  public void setFaultvesCollectorHost(String faultvesCollectorHost) {\r
+    this.faultvesCollectorHost = faultvesCollectorHost;\r
+  }\r
+\r
+  public String getFaultvesCollectorPort() {\r
+    return faultvesCollectorPort;\r
+  }\r
+\r
+  public void setFaultvesCollectorPort(String faultvesCollectorPort) {\r
+    this.faultvesCollectorPort = faultvesCollectorPort;\r
+  }\r
+\r
+  public String getPnfregvesCollectorHost() {\r
+    return pnfregvesCollectorHost;\r
+  }\r
+\r
+  public void setPnfregvesCollectorHost(String pnfregvesCollectorHost) {\r
+    this.pnfregvesCollectorHost = pnfregvesCollectorHost;\r
+  }\r
+\r
+  public String getPnfregvesCollectorPort() {\r
+    return pnfregvesCollectorPort;\r
+  }\r
+\r
+  public void setPnfregvesCollectorPort(String pnfregvesCollectorPort) {\r
+    this.pnfregvesCollectorPort = pnfregvesCollectorPort;\r
+  }\r
+\r
+  public String getVendorName() {\r
+    return vendorName;\r
+  }\r
+\r
+  public void setVendorName(String vendorName) {\r
+    this.vendorName = vendorName;\r
+  }\r
+\r
+  public String getVesVersion() {\r
+    return vesVersion;\r
+  }\r
+\r
+  public void setVesVersion(String vesVersion) {\r
+    this.vesVersion = vesVersion;\r
+  }\r
+\r
+  public String getEventVersion() {\r
+    return eventVersion;\r
+  }\r
+\r
+  public void setEventVersion(String eventVersion) {\r
+    this.eventVersion = eventVersion;\r
+  }\r
+\r
+  public String getFaultEventType() {\r
+    return faultEventType;\r
+  }\r
+\r
+  public void setFaultEventType(String faultEventType) {\r
+    this.faultEventType = faultEventType;\r
+  }\r
+\r
+  public String getFaultFeildVersion() {\r
+    return faultFeildVersion;\r
+  }\r
+\r
+  public void setFaultFeildVersion(String faultFeildVersion) {\r
+    this.faultFeildVersion = faultFeildVersion;\r
+  }\r
+\r
+  public String getPnfFeildVersion() {\r
+    return pnfFeildVersion;\r
+  }\r
+\r
+  public void setPnfFeildVersion(String pnfFeildVersion) {\r
+    this.pnfFeildVersion = pnfFeildVersion;\r
+  }\r
+\r
+  public String getFaultVesUrl() {\r
+    return "http://" + getFaultvesCollectorHost() + ":" + getFaultvesCollectorPort()\r
+        + "/eventListener/v7";\r
+  }\r
+\r
+  public String getPnfRegVesUrl() {\r
+    return "http://" + getPnfregvesCollectorHost() + ":" + getPnfregvesCollectorPort()\r
+        + "/eventListener/v7";\r
+  }\r
+\r
+  public String getUnitFamily() {\r
+    return unitFamily;\r
+  }\r
+\r
+  public void setUnitFamily(String unitFamily) {\r
+    this.unitFamily = unitFamily;\r
+  }\r
+\r
+  public String getUnitType() {\r
+    return unitType;\r
+  }\r
+\r
+  public void setUnitType(String unitType) {\r
+    this.unitType = unitType;\r
+  }\r
+\r
+  public String getFaultEventSourcePrefix() {\r
+    return faultEventSourcePrefix;\r
+  }\r
+\r
+  public void setFaultEventSourcePrefix(String faultEventSourcePrefix) {\r
+    this.faultEventSourcePrefix = faultEventSourcePrefix;\r
+  }\r
+\r
+  public String getPnfRegEventType() {\r
+    return pnfRegEventType;\r
+  }\r
+\r
+  public void setPnfRegEventType(String pnfRegEventType) {\r
+    this.pnfRegEventType = pnfRegEventType;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/boot/VESAgentServiceBooter.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/boot/VESAgentServiceBooter.java
new file mode 100644 (file)
index 0000000..ee86898
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.boot;\r
+\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+import org.springframework.context.annotation.ComponentScan;\r
+\r
+@SpringBootApplication\r
+@ComponentScan({"org.commscope.tr069adapter.vesagent"})\r
+public class VESAgentServiceBooter {\r
+\r
+  public static void main(String[] args) {\r
+    SpringApplication.run(VESAgentServiceBooter.class, args);\r
+  }\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/AlarmMappingHandler.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/AlarmMappingHandler.java
new file mode 100644 (file)
index 0000000..02addc1
--- /dev/null
@@ -0,0 +1,215 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.vesagent.controller;\r
+\r
+import com.fasterxml.jackson.core.JsonProcessingException;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.mapper.model.VESNotification;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
+import org.commscope.tr069adapter.vesagent.exception.InvalidFaultOperationException;\r
+import org.commscope.tr069adapter.vesagent.fault.AlarmFrameWorkSeverityEnum;\r
+import org.commscope.tr069adapter.vesagent.fault.ExpeditedEvent;\r
+import org.commscope.tr069adapter.vesagent.fault.Parser;\r
+import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;\r
+import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;\r
+import org.commscope.tr069adapter.vesagent.model.Event;\r
+import org.commscope.tr069adapter.vesagent.model.EventMessage;\r
+import org.commscope.tr069adapter.vesagent.model.FaultFields;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class AlarmMappingHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(AlarmMappingHandler.class);\r
+\r
+  @Autowired\r
+  VesConfiguration config;\r
+\r
+  @Autowired\r
+  HttpRequestSender sender;\r
+\r
+  public VESNotificationResponse handleAlarmNotification(VESNotification notification)\r
+      throws InvalidFaultOperationException, JsonProcessingException {\r
+    List<Event> events = convertNotificationToVESEvent(notification.getDevnotification(),\r
+        notification.geteNodeBName());\r
+\r
+    for (Iterator<Event> iterator = events.iterator(); iterator.hasNext();) {\r
+      Event event = iterator.next();\r
+      EventMessage evMsg = new EventMessage();\r
+      evMsg.setEvent(event);\r
+\r
+      ObjectMapper mapper = new ObjectMapper();\r
+\r
+      String requestBody = mapper.writeValueAsString(evMsg);\r
+      if (requestBody.isEmpty()) {\r
+        logger.debug("Alarm Event body is empty");\r
+      }\r
+\r
+      String url = config.getFaultVesUrl();\r
+      VESNotificationResponse response = sender.postRequest(url, requestBody);\r
+      if (response.getStatusCode() == HttpStatus.INTERNAL_SERVER_ERROR.value()) {\r
+        logger.debug(\r
+            "Error received while posting alarms; skiiping this alarm in the fault event and continue for remaining");\r
+      }\r
+    }\r
+\r
+    return new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "No Alarms in the request");\r
+  }\r
+\r
+  List<Event> convertNotificationToVESEvent(DeviceInform notification, String eNodeBName)\r
+      throws InvalidFaultOperationException {\r
+    logger.debug("Converting Notification to VES fault event started");\r
+    ArrayList<Event> mlist = new ArrayList<>();\r
+\r
+    List<ParameterDTO> parameter = notification.getParameters();\r
+    Map<String, ExpeditedEvent> hmAlarmParameters = null;\r
+    Parser parser = new Parser();\r
+    hmAlarmParameters = parser.parseFaultParams(parameter);\r
+\r
+    for (Iterator<String> iterator = hmAlarmParameters.keySet().iterator(); iterator.hasNext();) {\r
+      ExpeditedEvent event = hmAlarmParameters.get(iterator.next());\r
+\r
+      if (event.getAdditionalInformation() != null\r
+          && event.getAdditionalInformation().contains("-")) {\r
+        String eNBName = event.getAdditionalInformation().split("-")[0].trim();\r
+        eNodeBName = eNBName;\r
+      }\r
+\r
+      Event faultEvent = new Event();\r
+      CommonEventHeader eventHeader = new CommonEventHeader();\r
+      eventHeader.setDomain("fault");\r
+      eventHeader.setEventId(event.getAlarmIdentifier());\r
+      eventHeader.setEventName("Fault_" + notification.getDeviceDetails().getProductClass() + "-"\r
+          + config.getVendorName() + "_" + event.getProbableCause().replace(" ", ""));\r
+      eventHeader.setEventType(config.getFaultEventType());\r
+      eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
+      eventHeader.setTimeZoneOffset(extractTimeZoneOffSet(event.getAdditionalInformation()));\r
+      eventHeader.setPriority(extractPriority(event.getPerceivedSeverity()));\r
+\r
+      if (eNodeBName == null) {\r
+        eventHeader.setReportingEntityName(notification.getDeviceDetails().getDeviceId());\r
+        eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+        eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+        eventHeader.setSourceName(notification.getDeviceDetails().getDeviceId());\r
+      } else {\r
+        eventHeader.setReportingEntityName(eNodeBName);\r
+        eventHeader.setSourceName(eNodeBName);\r
+\r
+        eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+        eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+      }\r
+\r
+      eventHeader.setSequence(1);\r
+      eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+      eventHeader.setVersion(config.getEventVersion());\r
+      if (eNodeBName != null && eNodeBName.length() > 3)\r
+        eventHeader.setNfNamingCode(eNodeBName.substring(0, 3));\r
+      else\r
+        eventHeader.setNfNamingCode("");\r
+      eventHeader.setNfcNamingCode("");\r
+      eventHeader.setNfVendorName(config.getVendorName());\r
+      eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
+      faultEvent.setCommonEventHeader(eventHeader);\r
+\r
+      FaultFields faultfields = new FaultFields();\r
+      faultfields.setAlarmCondition(event.getProbableCause().replace(" ", ""));\r
+\r
+      faultfields.setEventSeverity(event.getPerceivedSeverity().toString());\r
+      if (event.getPerceivedSeverity() == AlarmFrameWorkSeverityEnum.CLEAR\r
+          || event.getPerceivedSeverity() == AlarmFrameWorkSeverityEnum.CLEARED) {\r
+        faultfields.setEventSeverity("NORMAL");\r
+      }\r
+\r
+      faultfields.setEventSourceType(config.getFaultEventSourcePrefix() + "_"\r
+          + notification.getDeviceDetails().getProductClass());\r
+      faultfields.setFaultFieldsVersion(config.getFaultFeildVersion());\r
+      faultfields.setSpecificProblem(event.getSpecificProblem());\r
+      faultfields.setVfStatus("Active");\r
+      faultfields.setEventCategory(event.getEventType());\r
+      faultfields.setAlarmInterfaceA(event.getManagedObjectInstance());\r
+      Map<String, String> addition = new HashMap<>();\r
+      addition.put("eventTime",\r
+          new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.s'Z'").format(new Date()));\r
+      addition.put("AdditionalText", event.getAdditionalText());\r
+      addition.put("AdditionalInformation", event.getAdditionalInformation());\r
+      faultfields.setAlarmAdditionalInformation(addition);\r
+\r
+      faultEvent.setFaultFields(faultfields);\r
+      mlist.add(faultEvent);\r
+\r
+    }\r
+    logger.debug("Converting Notification to VES fault event completed :{}", mlist);\r
+    return mlist;\r
+  }\r
+\r
+  private String extractTimeZoneOffSet(String additionalInformation) {\r
+    String[] additionalInfoArray = null;\r
+    String[] timeZoneOffset = null;\r
+    String timeOffset = "UTC+00.00";\r
+\r
+    if (additionalInformation != null && additionalInformation.contains("|")) {\r
+      additionalInfoArray = additionalInformation.split("\\|");\r
+\r
+      int index = -1;\r
+      for (int i = 0; i < additionalInfoArray.length; i++) {\r
+        if (additionalInfoArray[i].contains("TZD=")) {\r
+          index = i;\r
+        }\r
+      }\r
+      if (index >= 0) {\r
+        timeZoneOffset = additionalInfoArray[index].split("=");\r
+        timeOffset = timeZoneOffset[timeZoneOffset.length - 1];\r
+      }\r
+    } else if (additionalInformation != null && additionalInformation.contains("TZD=")) {\r
+      timeZoneOffset = additionalInformation.split("=");\r
+      timeOffset = timeZoneOffset[timeZoneOffset.length - 1];\r
+    }\r
+\r
+    return timeOffset;\r
+  }\r
+\r
+  private String extractPriority(AlarmFrameWorkSeverityEnum severity) {\r
+    String priority;\r
+    if (severity == AlarmFrameWorkSeverityEnum.CRITICAL\r
+        || severity == AlarmFrameWorkSeverityEnum.MAJOR) {\r
+      priority = "High";\r
+    } else if (severity == AlarmFrameWorkSeverityEnum.MINOR) {\r
+      priority = "Medium";\r
+    } else {\r
+      priority = "Low";\r
+    }\r
+\r
+    return priority;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java
new file mode 100644 (file)
index 0000000..be253c3
--- /dev/null
@@ -0,0 +1,109 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+package org.commscope.tr069adapter.vesagent.controller;\r
+\r
+import com.fasterxml.jackson.core.JsonProcessingException;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.mapper.model.VESNotification;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
+import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;\r
+import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;\r
+import org.commscope.tr069adapter.vesagent.model.Event;\r
+import org.commscope.tr069adapter.vesagent.model.EventMessage;\r
+import org.commscope.tr069adapter.vesagent.model.HeartbeatFields;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class HeartBeatMessageHandler {\r
+\r
+  private static final Logger logger = LoggerFactory.getLogger(HeartBeatMessageHandler.class);\r
+\r
+  @Autowired\r
+  VesConfiguration config;\r
+\r
+  @Autowired\r
+  HttpRequestSender sender;\r
+\r
+  public VESNotificationResponse handlePINotification(VESNotification vesNoti)\r
+      throws JsonProcessingException {\r
+    Event event =\r
+        convertNotificationToVESEvent(vesNoti.getDevnotification(), vesNoti.geteNodeBName());\r
+\r
+    EventMessage evMsg = new EventMessage();\r
+    evMsg.setEvent(event);\r
+\r
+    ObjectMapper mapper = new ObjectMapper();\r
+\r
+    String requestBody = mapper.writeValueAsString(evMsg);\r
+    if (requestBody.isEmpty()) {\r
+      logger.debug("VES Event body is empty");\r
+    }\r
+\r
+    String url = config.getPnfRegVesUrl();\r
+    return sender.postRequest(url, requestBody);\r
+  }\r
+\r
+  Event convertNotificationToVESEvent(DeviceInform notification, String eNodeBName) {\r
+    Event hbEvent = new Event();\r
+    CommonEventHeader eventHeader = new CommonEventHeader();\r
+\r
+    eventHeader.setDomain("heartbeat");\r
+    eventHeader.setEventId(\r
+        "Heartbeat_" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());\r
+    eventHeader.setEventName("Heartbeat_" + notification.getDeviceDetails().getProductClass() + "-"\r
+        + config.getVendorName());\r
+    eventHeader.setEventType("CommScope_RAN_Vnf");\r
+    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
+\r
+    eventHeader.setPriority("Normal");\r
+    eventHeader.setSequence(0);\r
+\r
+    if (eNodeBName == null) {\r
+      eventHeader.setReportingEntityName(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceName(notification.getDeviceDetails().getDeviceId());\r
+    } else {\r
+      eventHeader.setReportingEntityName(eNodeBName);\r
+      eventHeader.setSourceName(eNodeBName);\r
+      eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+    }\r
+\r
+    eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+    eventHeader.setVersion(config.getEventVersion());\r
+    eventHeader.setNfNamingCode("");\r
+    eventHeader.setNfcNamingCode("");\r
+    eventHeader.setNfVendorName(config.getVendorName());\r
+    eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
+    hbEvent.setCommonEventHeader(eventHeader);\r
+\r
+    HeartbeatFields heartbeatFields = new HeartbeatFields();\r
+    heartbeatFields.setHeartbeatFieldsVersion("3.0");\r
+    heartbeatFields.setHeartbeatInterval(60);\r
+    hbEvent.setHeartbeatFields(heartbeatFields);\r
+\r
+    return hbEvent;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/PnfRegMappingHandler.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/PnfRegMappingHandler.java
new file mode 100644 (file)
index 0000000..d449d0b
--- /dev/null
@@ -0,0 +1,231 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.controller;\r
+\r
+import com.fasterxml.jackson.core.JsonProcessingException;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.VESNotification;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
+import org.commscope.tr069adapter.vesagent.fault.Parser;\r
+import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;\r
+import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;\r
+import org.commscope.tr069adapter.vesagent.model.Event;\r
+import org.commscope.tr069adapter.vesagent.model.EventMessage;\r
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventAdditionalFeilds;\r
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class PnfRegMappingHandler {\r
+  private static final Logger logger = LoggerFactory.getLogger(PnfRegMappingHandler.class);\r
+  public static final String SSH_USERNAME = "netconf";\r
+  public static final String SSH_PSSWORD = "netconf";\r
+\r
+  @Autowired\r
+  VesConfiguration config;\r
+\r
+  @Autowired\r
+  HttpRequestSender sender;\r
+\r
+  public VESNotificationResponse handlePnfRegNotification(VESNotification vesNoti)\r
+      throws JsonProcessingException {\r
+    Event event = convertNotificationToVESEvent(vesNoti.getDevnotification(),\r
+        vesNoti.getNetconfDetails(), vesNoti.geteNodeBName());\r
+    if (null != event) {\r
+      EventMessage evMsg = new EventMessage();\r
+      evMsg.setEvent(event);\r
+\r
+      ObjectMapper mapper = new ObjectMapper();\r
+\r
+      String requestBody = mapper.writeValueAsString(evMsg);\r
+      if (requestBody.isEmpty()) {\r
+        logger.debug("VES Event body is empty");\r
+      }\r
+\r
+      String url = config.getPnfRegVesUrl();\r
+      return sender.postRequest(url, requestBody);\r
+    } else {\r
+      return new VESNotificationResponse(-1,\r
+          "unable to prepare ves event due to insufficient data");\r
+    }\r
+  }\r
+\r
+  public VESNotificationResponse handlePnfRegNotificationOnRestart(VESNotification vesNoti)\r
+      throws JsonProcessingException {\r
+    Event event = convertNotificationToVESEventOnRestart(vesNoti.getNetconfDetails());\r
+\r
+    EventMessage evMsg = new EventMessage();\r
+    evMsg.setEvent(event);\r
+\r
+    ObjectMapper mapper = new ObjectMapper();\r
+\r
+    String requestBody = mapper.writeValueAsString(evMsg);\r
+    if (requestBody.isEmpty()) {\r
+      logger.debug("VES Event body is empty");\r
+    }\r
+\r
+    String url = config.getPnfRegVesUrl();\r
+    return sender.postRequest(url, requestBody);\r
+  }\r
+\r
+  Event convertNotificationToVESEvent(DeviceInform notification,\r
+      NetConfServerDetails netconfServerDetails, String eNodeBName) {\r
+    logger.debug("Converting Notification to VES pnfevent started");\r
+    Parser parser = new Parser();\r
+\r
+\r
+    Event regEvent = new Event();\r
+    CommonEventHeader eventHeader = new CommonEventHeader();\r
+\r
+    eventHeader.setDomain("pnfRegistration");\r
+    eventHeader.setEventId(\r
+        "PnfReg" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());\r
+    eventHeader.setEventName("pnfReg_" + notification.getDeviceDetails().getProductClass() + "-"\r
+        + config.getVendorName());\r
+    eventHeader.setEventType(config.getPnfRegEventType());\r
+    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
+\r
+    eventHeader.setPriority("High");\r
+    eventHeader.setSequence(0);\r
+\r
+    if (eNodeBName == null) {\r
+      eventHeader.setReportingEntityName(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceName(notification.getDeviceDetails().getDeviceId());\r
+    } else {\r
+      eventHeader.setReportingEntityName(eNodeBName);\r
+      eventHeader.setSourceName(eNodeBName);\r
+\r
+      eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+    }\r
+\r
+    eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+    eventHeader.setVersion(config.getEventVersion());\r
+    eventHeader.setNfNamingCode("");\r
+    eventHeader.setNfcNamingCode("");\r
+    eventHeader.setNfVendorName(config.getVendorName());\r
+    eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
+    regEvent.setCommonEventHeader(eventHeader);\r
+\r
+    PnfRegEventFields pnfRegistrationFields =\r
+        parser.parseNotificationParams(notification.getParameters());\r
+    populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields);\r
+    pnfRegistrationFields.setModelNumber(notification.getDeviceDetails().getProductClass());\r
+\r
+    regEvent.setPnfRegistrationFields(pnfRegistrationFields);\r
+    logger.debug("Converting Notification to VES pnfevent completed");\r
+    return regEvent;\r
+  }\r
+\r
+  Event convertNotificationToVESEventOnRestart(NetConfServerDetails netconfServerDetails) {\r
+    logger.debug("Converting Notification to VES pnfevent started");\r
+\r
+    Event regEvent = new Event();\r
+    CommonEventHeader eventHeader = new CommonEventHeader();\r
+\r
+    if (null == netconfServerDetails) {\r
+      logger.error("netconf server details as received as null {}", netconfServerDetails);\r
+      return null;\r
+    }\r
+    eventHeader.setDomain("pnfRegistration");\r
+    eventHeader\r
+        .setEventId("PnfReg" + netconfServerDetails.getDeviceId() + System.currentTimeMillis());\r
+    eventHeader.setEventName(\r
+        "pnfReg_" + netconfServerDetails.getDeviceId() + "-" + config.getVendorName());\r
+    eventHeader.setEventType(config.getPnfRegEventType());\r
+    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
+\r
+    eventHeader.setPriority("High");\r
+    eventHeader.setSequence(0);\r
+\r
+    if (netconfServerDetails.getEnodeBName() == null) {\r
+      eventHeader.setReportingEntityName(netconfServerDetails.getDeviceId());\r
+      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());\r
+      eventHeader.setSourceId(netconfServerDetails.getDeviceId());\r
+      eventHeader.setSourceName(netconfServerDetails.getDeviceId());\r
+    } else {\r
+      eventHeader.setReportingEntityName(netconfServerDetails.getEnodeBName());\r
+      eventHeader.setSourceName(netconfServerDetails.getEnodeBName());\r
+\r
+      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());\r
+      eventHeader.setSourceId(netconfServerDetails.getDeviceId());\r
+    }\r
+\r
+    eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+    eventHeader.setVersion(config.getEventVersion());\r
+    eventHeader.setNfNamingCode("");\r
+    eventHeader.setNfcNamingCode("");\r
+    eventHeader.setNfVendorName(config.getVendorName());\r
+    eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
+    regEvent.setCommonEventHeader(eventHeader);\r
+    PnfRegEventFields pnfRegistrationFields = new PnfRegEventFields();\r
+    regEvent.setPnfRegistrationFields(\r
+        populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields));\r
+    logger.debug("Converting Notification to VES pnfevent completed");\r
+    return regEvent;\r
+  }\r
+\r
+  private PnfRegEventFields populatePnfRegFeilds(NetConfServerDetails netconfServerDetails,\r
+      PnfRegEventFields pnfRegistrationFields) {\r
+\r
+    pnfRegistrationFields.setSerialNumber(netconfServerDetails.getDeviceId());\r
+    pnfRegistrationFields.setPnfRegistrationFieldsVersion(config.getPnfFeildVersion());\r
+    pnfRegistrationFields.setMacAddress(netconfServerDetails.getDeviceId());\r
+    pnfRegistrationFields.setVendorName(config.getVendorName());\r
+    PnfRegEventAdditionalFeilds additionalFields = new PnfRegEventAdditionalFeilds();\r
+\r
+    pnfRegistrationFields.setOamV4IpAddress(netconfServerDetails.getListenAddress());\r
+    // TODO: since not supporting 1pv6 we are configuring empty value\r
+    pnfRegistrationFields.setOamV6IpAddress("");\r
+\r
+    pnfRegistrationFields.setManufactureDate("");\r
+    pnfRegistrationFields.setUnitType(config.getUnitType());\r
+    pnfRegistrationFields.setUnitFamily(config.getUnitFamily());\r
+    pnfRegistrationFields.setLastServiceDate(new SimpleDateFormat("ddMMyyyy").format(new Date()));\r
+    additionalFields.setOamPort(netconfServerDetails.getListenPort());\r
+    additionalFields.setProtocol("SSH");\r
+    additionalFields.setUsername(SSH_USERNAME);\r
+    additionalFields.setPassword(SSH_PSSWORD);\r
+    additionalFields.setReconnectOnChangedSchema(Boolean.FALSE.toString());\r
+    additionalFields.setSleepfactor("1.5");\r
+    additionalFields.setTcpOnly(Boolean.FALSE.toString());\r
+    additionalFields.setConnectionTimeout("20000");\r
+    additionalFields.setMaxConnectionAttempts("100");\r
+    additionalFields.setBetweenAttemptsTimeout("2000");\r
+    additionalFields.setKeepaliveDelay("120");\r
+\r
+    pnfRegistrationFields.setAdditionalFields(additionalFields);\r
+\r
+    return pnfRegistrationFields;\r
+\r
+  }\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/VESAgentService.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/VESAgentService.java
new file mode 100644 (file)
index 0000000..1836163
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.controller;\r
+\r
+import com.fasterxml.jackson.core.JsonProcessingException;\r
+\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.acs.common.inform.PeriodicInform;\r
+import org.commscope.tr069adapter.acs.common.inform.ValueChangeInform;\r
+import org.commscope.tr069adapter.mapper.model.VESNotification;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.commscope.tr069adapter.vesagent.exception.InvalidFaultOperationException;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.web.bind.annotation.PostMapping;\r
+import org.springframework.web.bind.annotation.RequestBody;\r
+import org.springframework.web.bind.annotation.RequestMapping;\r
+import org.springframework.web.bind.annotation.RestController;\r
+\r
+@RestController\r
+@RequestMapping(path = "/vesagent")\r
+public class VESAgentService {\r
+  private static final Logger logger = LoggerFactory.getLogger(VESAgentService.class);\r
+\r
+  @Autowired\r
+  PnfRegMappingHandler pnfHandler;\r
+\r
+  @Autowired\r
+  AlarmMappingHandler alarmHanler;\r
+\r
+  @Autowired\r
+  HeartBeatMessageHandler hbHandler;\r
+\r
+  @PostMapping(path = "/deviceEvent", consumes = "application/json")\r
+  public VESNotificationResponse processDeviceNotificationAsVESEvent(\r
+      @RequestBody VESNotification notification)\r
+      throws JsonProcessingException, InvalidFaultOperationException {\r
+    VESNotificationResponse response = null;\r
+    logger.debug("VES Notification request processing started");\r
+    if (notification.getDevnotification() == null) {\r
+      logger.debug("VES Notification request PnfRegister on container restart processing started");\r
+      response = pnfHandler.handlePnfRegNotificationOnRestart(notification);\r
+    } else if (notification.getDevnotification() instanceof BootstrapInform) {\r
+      logger.debug("VES Notification request PnfRegister processing started");\r
+      response = pnfHandler.handlePnfRegNotification(notification);\r
+      logger.debug("VES Notification request PnfRegister processing completed");\r
+    } else if (notification.getDevnotification() instanceof ValueChangeInform) {\r
+      logger.debug("VES Notification request Fault processing started");\r
+      response = alarmHanler.handleAlarmNotification(notification);\r
+      logger.debug("VES Notification request Fault processing completed");\r
+    } else if (notification.getDevnotification() instanceof PeriodicInform) {\r
+      logger.debug("VES Notification request PI processing started");\r
+      response = hbHandler.handlePINotification(notification);\r
+      logger.debug("VES Notification request PI processing completed");\r
+    } else {\r
+      logger.error("VES Notification request is unknown");\r
+      response =\r
+          new VESNotificationResponse(HttpStatus.BAD_REQUEST.value(), "Method not supported");\r
+    }\r
+    logger.debug("VES Notification request processing completed");\r
+    return response;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/exception/InvalidFaultOperationException.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/exception/InvalidFaultOperationException.java
new file mode 100644 (file)
index 0000000..1e752b2
--- /dev/null
@@ -0,0 +1,31 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.exception;\r
+\r
+public class InvalidFaultOperationException extends Exception {\r
+  private static final long serialVersionUID = -3742697051389101875L;\r
+\r
+  public InvalidFaultOperationException() {\r
+    super();\r
+  }\r
+\r
+  public InvalidFaultOperationException(String s) {\r
+    super(s);\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/AlarmFrameWorkSeverityEnum.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/AlarmFrameWorkSeverityEnum.java
new file mode 100644 (file)
index 0000000..40cfca5
--- /dev/null
@@ -0,0 +1,27 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+/*\r
+ * Indicates the relative level of urgency for operator attention\r
+ */\r
+public enum AlarmFrameWorkSeverityEnum {\r
+  CLEAR, CLEARED, INFO, MINOR, MAJOR, WARNING, CRITICAL, INTERMEDIATE, UNKNOWN\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/AlarmNotificationTypeEnum.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/AlarmNotificationTypeEnum.java
new file mode 100644 (file)
index 0000000..81cf887
--- /dev/null
@@ -0,0 +1,27 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+/*\r
+ * Indicates the reason for the specific alarm notification event\r
+ */\r
+public enum AlarmNotificationTypeEnum {\r
+  NEWALARM, CHANGEDALARM, CLEAREDALARM\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/DeviceAlarmConstant.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/DeviceAlarmConstant.java
new file mode 100644 (file)
index 0000000..54d0497
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+public class DeviceAlarmConstant {\r
+\r
+  private DeviceAlarmConstant() {}\r
+\r
+  public static final String DEVICE_ALARM_PURGE_JOB_NAME = "deviceAlarmPurgeJob";\r
+  public static final String DEVICE_ALARM_PURGE_JOB_SUB_SYSTEM = "np";\r
+\r
+  public static final String EXPEDITED_EVENT_EVENTTIME = "EventTime";\r
+  public static final String EXPEDITED_EVENT_ALARMIDENTIFIER = "AlarmIdentifier";\r
+  public static final String EXPEDITED_EVENT_NOTIFICATIONTYPE = "NotificationType";\r
+  public static final String EXPEDITED_EVENT_MANAGEDOBJECTINSTANCE = "ManagedObjectInstance";\r
+  public static final String EXPEDITED_EVENT_OBJECTINSTANCE = "ObjectInstance";\r
+  public static final String EXPEDITED_EVENT_EVENTTYPE = "EventType";\r
+  public static final String EXPEDITED_EVENT_FAULTCODE = "FaultCode";\r
+  public static final String EXPEDITED_EVENT_PROBABLECAUSE = "ProbableCause";\r
+  public static final String EXPEDITED_EVENT_SPECIFICPROBLEM = "SpecificProblem";\r
+  public static final String EXPEDITED_EVENT_ALARMMESSAGE = "AlarmMessage";\r
+  public static final String EXPEDITED_EVENT_PERCEIVEDSEVERITY = "PerceivedSeverity";\r
+  public static final String EXPEDITED_EVENT_ADDITIONALTEXT = "AdditionalText";\r
+  public static final String EXPEDITED_EVENT_ADDITIONALINFORMATION = "AdditionalInformation";\r
+  public static final String EXPEDITED_EVENT_FAULTCOMPONENT = "FaultComponent";\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/DeviceAlarmSeverityEnum.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/DeviceAlarmSeverityEnum.java
new file mode 100644 (file)
index 0000000..94c8d37
--- /dev/null
@@ -0,0 +1,26 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+public enum DeviceAlarmSeverityEnum {\r
+  CLEAR, CLEARED,\r
+  // INFO,\r
+  MINOR, MAJOR, WARNING, CRITICAL, INTERMEDIATE, UNKNOWN\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/ExpeditedEvent.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/ExpeditedEvent.java
new file mode 100644 (file)
index 0000000..570a504
--- /dev/null
@@ -0,0 +1,194 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.vesagent.exception.InvalidFaultOperationException;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public class ExpeditedEvent implements Serializable {\r
+  private static final long serialVersionUID = -6862753992876923284L;\r
+\r
+  private Date eventTime;\r
+\r
+  private String alarmIdentifier;\r
+\r
+  private NotificationTypeEnum notificationType;\r
+\r
+  private String managedObjectInstance;\r
+\r
+  private String eventType;\r
+\r
+  private String probableCause;\r
+\r
+  private String specificProblem;\r
+\r
+  private AlarmFrameWorkSeverityEnum perceivedSeverity;\r
+\r
+  private String additionalText;\r
+\r
+  private String additionalInformation;\r
+  private static final Logger logger = LoggerFactory.getLogger(ExpeditedEvent.class);\r
+\r
+  public Date getEventTime() {\r
+    return eventTime;\r
+  }\r
+\r
+  public void setEventTime(Date eventTime) {\r
+    this.eventTime = eventTime;\r
+  }\r
+\r
+  public String getAlarmIdentifier() {\r
+    return alarmIdentifier;\r
+  }\r
+\r
+  public void setAlarmIdentifier(String alarmIdentifier) {\r
+    this.alarmIdentifier = alarmIdentifier;\r
+  }\r
+\r
+  public NotificationTypeEnum getNotificationType() {\r
+    return notificationType;\r
+  }\r
+\r
+  public void setNotificationType(NotificationTypeEnum notificationType) {\r
+    this.notificationType = notificationType;\r
+  }\r
+\r
+  public String getManagedObjectInstance() {\r
+    return managedObjectInstance;\r
+  }\r
+\r
+  public void setManagedObjectInstance(String managedObjectInstance) {\r
+    this.managedObjectInstance = managedObjectInstance;\r
+  }\r
+\r
+  public String getEventType() {\r
+    return eventType;\r
+  }\r
+\r
+  public void setEventType(String eventType) {\r
+    this.eventType = eventType;\r
+  }\r
+\r
+  public String getProbableCause() {\r
+    return probableCause;\r
+  }\r
+\r
+  public void setProbableCause(String probableCause) {\r
+    this.probableCause = probableCause;\r
+  }\r
+\r
+  public String getSpecificProblem() {\r
+    return specificProblem;\r
+  }\r
+\r
+  public void setSpecificProblem(String specificProblem) {\r
+    this.specificProblem = specificProblem;\r
+  }\r
+\r
+  public AlarmFrameWorkSeverityEnum getPerceivedSeverity() {\r
+    return perceivedSeverity;\r
+  }\r
+\r
+  public void setPerceivedSeverity(AlarmFrameWorkSeverityEnum perceivedSeverity) {\r
+    this.perceivedSeverity = perceivedSeverity;\r
+  }\r
+\r
+  public String getAdditionalText() {\r
+    return additionalText;\r
+  }\r
+\r
+  public void setAdditionalText(String additionalText) {\r
+    this.additionalText = additionalText;\r
+  }\r
+\r
+  public String getAdditionalInformation() {\r
+    return additionalInformation;\r
+  }\r
+\r
+  public void setAdditionalInformation(String additionalInformation) {\r
+    this.additionalInformation = additionalInformation;\r
+  }\r
+\r
+  public void parse(ParameterDTO parameter, String tempEEParam)\r
+      throws InvalidFaultOperationException {\r
+    if (null == parameter.getParamValue()) {\r
+      return;\r
+    }\r
+\r
+    if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_ALARMIDENTIFIER)) {\r
+      setAlarmIdentifier(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_NOTIFICATIONTYPE)) {\r
+      validateNotificationType(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_MANAGEDOBJECTINSTANCE)\r
+        || tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_OBJECTINSTANCE)) {\r
+      setManagedObjectInstance(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_EVENTTYPE)) {\r
+      setEventType(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_FAULTCODE)) {\r
+      setEventType(parameter.getParamValue());\r
+      setAlarmIdentifier(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_PROBABLECAUSE)) {\r
+      setProbableCause(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_SPECIFICPROBLEM)\r
+        || tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_ALARMMESSAGE)) {\r
+      setSpecificProblem(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_PERCEIVEDSEVERITY)\r
+        && !parameter.getParamValue().equals("")) {\r
+      validateSeverity(parameter.getParamValue());\r
+      setPerceivedSeverity(\r
+          AlarmFrameWorkSeverityEnum.valueOf(((String) parameter.getParamValue()).toUpperCase()));\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_ADDITIONALTEXT)\r
+        || tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_FAULTCOMPONENT)) {\r
+      setAdditionalText(parameter.getParamValue());\r
+    } else if (tempEEParam.equals(DeviceAlarmConstant.EXPEDITED_EVENT_ADDITIONALINFORMATION)) {\r
+      setAdditionalInformation(parameter.getParamValue());\r
+    }\r
+  }\r
+\r
+  private void validateSeverity(String severity) throws InvalidFaultOperationException {\r
+    try {\r
+      AlarmFrameWorkSeverityEnum.valueOf(severity.toUpperCase());\r
+      logger.debug("Severity is validated successfully : {}", severity);\r
+    } catch (Exception e) {\r
+      logger.error("Invalid Severity: Severity : {}", severity);\r
+      throw new InvalidFaultOperationException(\r
+          "Invalid Severity: Severity " + severity + " is not supported");\r
+    }\r
+  }\r
+\r
+  private void validateNotificationType(String notificationType)\r
+      throws InvalidFaultOperationException {\r
+    try {\r
+      AlarmNotificationTypeEnum.valueOf(notificationType.toUpperCase());\r
+      logger.debug("NotificationType is {} validated successfully", notificationType);\r
+    } catch (Exception e) {\r
+      logger.error("Invalid device alarm notification type: NotificationType : {}",\r
+          notificationType);\r
+      throw new InvalidFaultOperationException(\r
+          "Invalid NotificationType: notificationType <" + notificationType + "> is not supported");\r
+    }\r
+  }\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/NotificationTypeEnum.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/NotificationTypeEnum.java
new file mode 100644 (file)
index 0000000..0dd3bb6
--- /dev/null
@@ -0,0 +1,24 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+public enum NotificationTypeEnum {\r
+  NEWALARM, CHANGEDALARM, CLEAREDALARM\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/Parser.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/fault/Parser.java
new file mode 100644 (file)
index 0000000..371d6c9
--- /dev/null
@@ -0,0 +1,100 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.fault;\r
+\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.vesagent.InformEventData;\r
+import org.commscope.tr069adapter.vesagent.exception.InvalidFaultOperationException;\r
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;\r
+\r
+public class Parser {\r
+\r
+  private Log logger = LogFactory.getLog(Parser.class);\r
+\r
+  public Map<String, ExpeditedEvent> parseFaultParams(List<ParameterDTO> parameters)\r
+      throws InvalidFaultOperationException {\r
+    Map<String, ExpeditedEvent> dmAlarmParameters = new HashMap<>();\r
+\r
+    try {\r
+      for (ParameterDTO parameter : parameters) {\r
+        logger.debug("PARAM NAME " + parameter.getParamName());\r
+        if (parameter.getParamName() == null || !isAlarmEvent(parameter.getParamName())) {\r
+          continue;\r
+        }\r
+\r
+        String alarmParamMO = parameter.getParamName();\r
+        String alarmParam = null;\r
+        String alarmParamParentMoWithIndex = null;\r
+\r
+        if (null != alarmParamMO) {\r
+          alarmParam = alarmParamMO.substring(alarmParamMO.lastIndexOf('.') + 1);\r
+          alarmParamParentMoWithIndex = alarmParamMO.substring(0, alarmParamMO.lastIndexOf('.'));\r
+        }\r
+\r
+        ExpeditedEvent expeditedEvent = null;\r
+        if (dmAlarmParameters.containsKey(alarmParamParentMoWithIndex)) {\r
+          expeditedEvent = dmAlarmParameters.get(alarmParamParentMoWithIndex);\r
+        } else {\r
+          expeditedEvent = new ExpeditedEvent();\r
+          logger.debug("ADDING " + alarmParamParentMoWithIndex);\r
+          dmAlarmParameters.put(alarmParamParentMoWithIndex, expeditedEvent);\r
+        }\r
+\r
+        expeditedEvent.parse(parameter, alarmParam);\r
+      }\r
+    } catch (NumberFormatException ex) {\r
+      logger.error("Error while parsing alarm event parameter {}", ex);\r
+      throw new InvalidFaultOperationException(ex.getMessage());\r
+    } catch (Exception e) {\r
+      logger.error("Error occurred while parsing alarm event notification");\r
+      throw new InvalidFaultOperationException(e.getMessage());\r
+    }\r
+\r
+    return dmAlarmParameters;\r
+  }\r
+\r
+  public PnfRegEventFields parseNotificationParams(List<ParameterDTO> parameters) {\r
+    InformEventData feild = new InformEventData();\r
+    try {\r
+      for (ParameterDTO parameter : parameters) {\r
+\r
+        if (isAlarmEvent(parameter.getParamName())) {\r
+          continue;\r
+        }\r
+\r
+        feild.parse(parameter, parameter.getParamName());\r
+      }\r
+    } catch (Exception e) {\r
+      logger.error("Error occurred while parsing alarm event notification");\r
+    }\r
+\r
+    return feild.getFeilds();\r
+  }\r
+\r
+  public static boolean isAlarmEvent(String str) {\r
+    return (str.contains(".FaultMgmt.ExpeditedEvent.")\r
+        || str.startsWith("InternetGatewayDevice.X_0005B9_FaultStatus"));\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/http/HttpRequestSender.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/http/HttpRequestSender.java
new file mode 100644 (file)
index 0000000..fab8c78
--- /dev/null
@@ -0,0 +1,91 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.http;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.InputStreamReader;\r
+import java.io.OutputStreamWriter;\r
+import java.net.HttpURLConnection;\r
+import java.net.URL;\r
+import java.nio.charset.StandardCharsets;\r
+\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class HttpRequestSender {\r
+\r
+  private HttpRequestSender() {}\r
+\r
+  private static final String CONTENT = "Content-Type";\r
+  private static final String ACCEPT = "Accept";\r
+  private static final String JSON = "application/json";\r
+  private static final Logger logger = LoggerFactory.getLogger(HttpRequestSender.class);\r
+\r
+  public VESNotificationResponse postRequest(String requestUrl, String requestBody) {\r
+    logger.debug("Event lister URL : {}", requestUrl);\r
+    logger.debug("Event Data : {}", requestBody);\r
+    String response = "";\r
+    int responseCode = 0;\r
+    HttpURLConnection connection = null;\r
+    BufferedReader br = null;\r
+    try {\r
+      URL url = new URL(requestUrl);\r
+      connection = (HttpURLConnection) url.openConnection();\r
+      connection.setDoOutput(true);\r
+      connection.setDoInput(true);\r
+      connection.setRequestProperty(CONTENT, JSON);\r
+      connection.setRequestProperty(ACCEPT, JSON);\r
+      connection.setRequestMethod("POST");\r
+      OutputStreamWriter writer =\r
+          new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);\r
+      writer.write(requestBody);\r
+      writer.close();\r
+      br = new BufferedReader(new InputStreamReader(connection.getInputStream()));\r
+      String temp = null;\r
+      responseCode = connection.getResponseCode();\r
+      logger.debug("Response received from ves collector : {}", responseCode);\r
+      while ((temp = br.readLine()) != null) {\r
+        response = response.concat(temp);\r
+      }\r
+\r
+      if (response == null || response.length() <= 0) {\r
+        response = String.valueOf(responseCode);\r
+      }\r
+\r
+    } catch (Exception e) {\r
+      logger.error("Exception occurred while posting the message {}", e.getMessage());\r
+      response = "posting message failed";\r
+      return new VESNotificationResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), response);\r
+    } finally {\r
+      try {\r
+        if (br != null)\r
+          br.close();\r
+        if (connection != null)\r
+          connection.disconnect();\r
+      } catch (Exception exToIgnore) {\r
+        logger.debug("Exception occurred while closing the connection {}", exToIgnore.toString());\r
+      }\r
+    }\r
+    return new VESNotificationResponse(HttpStatus.valueOf(responseCode).value(), response);\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/CommonEventHeader.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/CommonEventHeader.java
new file mode 100644 (file)
index 0000000..c1d0750
--- /dev/null
@@ -0,0 +1,213 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonInclude(JsonInclude.Include.NON_NULL)\r
+public class CommonEventHeader implements Serializable {\r
+  @JsonProperty("version")\r
+  private String version;\r
+  @JsonProperty("vesEventListenerVersion")\r
+  private String vesEventListenerVersion;\r
+  @JsonProperty("domain")\r
+  private String domain;\r
+  @JsonProperty("eventName")\r
+  private String eventName;\r
+  @JsonProperty("eventType")\r
+  private String eventType;\r
+  @JsonProperty("eventId")\r
+  private String eventId;\r
+  @JsonProperty("sequence")\r
+  private Integer sequence;\r
+  @JsonProperty("priority")\r
+  private String priority;\r
+  @JsonProperty("reportingEntityId")\r
+  private String reportingEntityId;\r
+  @JsonProperty("reportingEntityName")\r
+  private String reportingEntityName;\r
+  @JsonProperty("sourceId")\r
+  private String sourceId;\r
+  @JsonProperty("sourceName")\r
+  private String sourceName;\r
+  @JsonProperty("nfVendorName")\r
+  private String nfVendorName;\r
+  @JsonProperty("nfNamingCode")\r
+  private String nfNamingCode;\r
+  @JsonProperty("nfcNamingCode")\r
+  private String nfcNamingCode;\r
+  @JsonProperty("startEpochMicrosec")\r
+  private long startEpochMicrosec;\r
+  @JsonProperty("lastEpochMicrosec")\r
+  private long lastEpochMicrosec;\r
+  @JsonProperty("timeZoneOffset")\r
+  private String timeZoneOffset;\r
+\r
+  public String getEventId() {\r
+    return eventId;\r
+  }\r
+\r
+  public void setEventId(String eventId) {\r
+    this.eventId = eventId;\r
+  }\r
+\r
+  public String getEventName() {\r
+    return eventName;\r
+  }\r
+\r
+  public void setEventName(String eventName) {\r
+    this.eventName = eventName;\r
+  }\r
+\r
+  public String getDomain() {\r
+    return domain;\r
+  }\r
+\r
+  public void setDomain(String domain) {\r
+    this.domain = domain;\r
+  }\r
+\r
+  public String getSourceName() {\r
+    return sourceName;\r
+  }\r
+\r
+  public void setSourceName(String sourceName) {\r
+    this.sourceName = sourceName;\r
+  }\r
+\r
+  public String getPriority() {\r
+    return priority;\r
+  }\r
+\r
+  public void setPriority(String priority) {\r
+    this.priority = priority;\r
+  }\r
+\r
+  public String getVersion() {\r
+    return version;\r
+  }\r
+\r
+  public void setVersion(String version) {\r
+    this.version = version;\r
+  }\r
+\r
+  public int getSequence() {\r
+    return sequence;\r
+  }\r
+\r
+  public void setSequence(int sequence) {\r
+    this.sequence = sequence;\r
+  }\r
+\r
+  public String getVesEventListenerVersion() {\r
+    return vesEventListenerVersion;\r
+  }\r
+\r
+  public void setVesEventListenerVersion(String vesEventListenerVersion) {\r
+    this.vesEventListenerVersion = vesEventListenerVersion;\r
+  }\r
+\r
+  public long getStartEpochMicrosec() {\r
+    return startEpochMicrosec;\r
+  }\r
+\r
+  public void setStartEpochMicrosec(long startEpochMicrosec) {\r
+    this.startEpochMicrosec = startEpochMicrosec;\r
+  }\r
+\r
+  public long getLastEpochMicrosec() {\r
+    return lastEpochMicrosec;\r
+  }\r
+\r
+  public void setLastEpochMicrosec(long lastEpochMicrosec) {\r
+    this.lastEpochMicrosec = lastEpochMicrosec;\r
+  }\r
+\r
+  public String getReportingEntityName() {\r
+    return reportingEntityName;\r
+  }\r
+\r
+  public void setReportingEntityName(String reportingEntityName) {\r
+    this.reportingEntityName = reportingEntityName;\r
+  }\r
+\r
+  public void setSequence(Integer sequence) {\r
+    this.sequence = sequence;\r
+  }\r
+\r
+  public String getEventType() {\r
+    return eventType;\r
+  }\r
+\r
+  public void setEventType(String eventType) {\r
+    this.eventType = eventType;\r
+  }\r
+\r
+  public String getNfNamingCode() {\r
+    return nfNamingCode;\r
+  }\r
+\r
+  public void setNfNamingCode(String nfNamingCode) {\r
+    this.nfNamingCode = nfNamingCode;\r
+  }\r
+\r
+  public String getReportingEntityId() {\r
+    return reportingEntityId;\r
+  }\r
+\r
+  public void setReportingEntityId(String reportingEntityId) {\r
+    this.reportingEntityId = reportingEntityId;\r
+  }\r
+\r
+  public String getSourceId() {\r
+    return sourceId;\r
+  }\r
+\r
+  public void setSourceId(String sourceId) {\r
+    this.sourceId = sourceId;\r
+  }\r
+\r
+  public String getNfVendorName() {\r
+    return nfVendorName;\r
+  }\r
+\r
+  public void setNfVendorName(String nfVendorName) {\r
+    this.nfVendorName = nfVendorName;\r
+  }\r
+\r
+  public String getTimeZoneOffset() {\r
+    return timeZoneOffset;\r
+  }\r
+\r
+  public void setTimeZoneOffset(String timeZoneOffset) {\r
+    this.timeZoneOffset = timeZoneOffset;\r
+  }\r
+\r
+  public String getNfcNamingCode() {\r
+    return nfcNamingCode;\r
+  }\r
+\r
+  public void setNfcNamingCode(String nfcNamingCode) {\r
+    this.nfcNamingCode = nfcNamingCode;\r
+  }\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/Event.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/Event.java
new file mode 100644 (file)
index 0000000..84c5887
--- /dev/null
@@ -0,0 +1,77 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonInclude(JsonInclude.Include.NON_NULL)\r
+@JsonPropertyOrder({"commonEventHeader", "pnfRegistrationFields", "faultFields"})\r
+public class Event implements Serializable {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = 1L;\r
+\r
+  @JsonProperty("commonEventHeader")\r
+  CommonEventHeader commonEventHeader;\r
+  @JsonProperty("pnfRegistrationFields")\r
+  PnfRegEventFields pnfRegistrationFields;\r
+  @JsonProperty("faultFields")\r
+  FaultFields faultFields;\r
+  @JsonProperty("heartbeatFields")\r
+  HeartbeatFields heartbeatFields;\r
+\r
+  public CommonEventHeader getCommonEventHeader() {\r
+    return commonEventHeader;\r
+  }\r
+\r
+  public void setCommonEventHeader(CommonEventHeader commonEventHeader) {\r
+    this.commonEventHeader = commonEventHeader;\r
+  }\r
+\r
+  public PnfRegEventFields getPnfRegistrationFields() {\r
+    return pnfRegistrationFields;\r
+  }\r
+\r
+  public void setPnfRegistrationFields(PnfRegEventFields pnfRegistrationFields) {\r
+    this.pnfRegistrationFields = pnfRegistrationFields;\r
+  }\r
+\r
+  public FaultFields getFaultFields() {\r
+    return faultFields;\r
+  }\r
+\r
+  public void setFaultFields(FaultFields faultFields) {\r
+    this.faultFields = faultFields;\r
+  }\r
+\r
+  public HeartbeatFields getHeartbeatFields() {\r
+    return heartbeatFields;\r
+  }\r
+\r
+  public void setHeartbeatFields(HeartbeatFields heartbeatFields) {\r
+    this.heartbeatFields = heartbeatFields;\r
+  }\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/EventMessage.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/EventMessage.java
new file mode 100644 (file)
index 0000000..d9f83e6
--- /dev/null
@@ -0,0 +1,41 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+public class EventMessage {\r
+\r
+  private Event event;\r
+\r
+  public EventMessage() {\r
+    super();\r
+  }\r
+\r
+  public EventMessage(Event event) {\r
+    this.event = event;\r
+  }\r
+\r
+  public Event getEvent() {\r
+    return event;\r
+  }\r
+\r
+  public void setEvent(Event event) {\r
+    this.event = event;\r
+  }\r
+\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/FaultFields.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/FaultFields.java
new file mode 100644 (file)
index 0000000..39334ee
--- /dev/null
@@ -0,0 +1,135 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+import java.io.Serializable;\r
+import java.util.Map;\r
+\r
+@JsonInclude(JsonInclude.Include.NON_NULL)\r
+public class FaultFields implements Serializable {\r
+  @JsonProperty("faultFieldsVersion")\r
+  private String faultFieldsVersion;\r
+\r
+  @JsonProperty("alarmCondition")\r
+  private String alarmCondition;\r
+  @JsonProperty("eventSourceType")\r
+  private String eventSourceType;\r
+  @JsonProperty("specificProblem")\r
+  private String specificProblem;\r
+  @JsonProperty("eventSeverity")\r
+  private String eventSeverity;\r
+  @JsonProperty("vfStatus")\r
+  private String vfStatus;\r
+  @JsonProperty("alarmInterfaceA")\r
+  private String alarmInterfaceA;\r
+  @JsonProperty("eventCategory")\r
+  private String eventCategory;\r
+\r
+  @JsonProperty("alarmAdditionalInformation")\r
+  private Map<String, String> alarmAdditionalInformation = null;\r
+\r
+  @JsonProperty("alarmCondition")\r
+  public String getAlarmCondition() {\r
+    return alarmCondition;\r
+  }\r
+\r
+  @JsonProperty("alarmCondition")\r
+  public void setAlarmCondition(String alarmCondition) {\r
+    this.alarmCondition = alarmCondition;\r
+  }\r
+\r
+  @JsonProperty("eventSeverity")\r
+  public String getEventSeverity() {\r
+    return eventSeverity;\r
+  }\r
+\r
+  @JsonProperty("eventSeverity")\r
+  public void setEventSeverity(String eventSeverity) {\r
+    this.eventSeverity = eventSeverity;\r
+  }\r
+\r
+  @JsonProperty("eventSourceType")\r
+  public String getEventSourceType() {\r
+    return eventSourceType;\r
+  }\r
+\r
+  @JsonProperty("eventSourceType")\r
+  public void setEventSourceType(String eventSourceType) {\r
+    this.eventSourceType = eventSourceType;\r
+  }\r
+\r
+  @JsonProperty("faultFieldsVersion")\r
+  public String getFaultFieldsVersion() {\r
+    return faultFieldsVersion;\r
+  }\r
+\r
+  @JsonProperty("faultFieldsVersion")\r
+  public void setFaultFieldsVersion(String faultFieldsVersion) {\r
+    this.faultFieldsVersion = faultFieldsVersion;\r
+  }\r
+\r
+  @JsonProperty("specificProblem")\r
+  public String getSpecificProblem() {\r
+    return specificProblem;\r
+  }\r
+\r
+  @JsonProperty("specificProblem")\r
+  public void setSpecificProblem(String specificProblem) {\r
+    this.specificProblem = specificProblem;\r
+  }\r
+\r
+  @JsonProperty("vfStatus")\r
+  public String getVfStatus() {\r
+    return vfStatus;\r
+  }\r
+\r
+  @JsonProperty("vfStatus")\r
+  public void setVfStatus(String vfStatus) {\r
+    this.vfStatus = vfStatus;\r
+  }\r
+\r
+  @JsonProperty("alarmAdditionalInformation")\r
+  public Map<String, String> getAlarmAdditionalInformation() {\r
+    return alarmAdditionalInformation;\r
+  }\r
+\r
+  @JsonProperty("alarmAdditionalInformation")\r
+  public void setAlarmAdditionalInformation(Map<String, String> alarmAdditionalInformation) {\r
+    this.alarmAdditionalInformation = alarmAdditionalInformation;\r
+  }\r
+\r
+  public String getAlarmInterfaceA() {\r
+    return alarmInterfaceA;\r
+  }\r
+\r
+  public void setAlarmInterfaceA(String alarmInterfaceA) {\r
+    this.alarmInterfaceA = alarmInterfaceA;\r
+  }\r
+\r
+  public String getEventCategory() {\r
+    return eventCategory;\r
+  }\r
+\r
+  public void setEventCategory(String eventCategory) {\r
+    this.eventCategory = eventCategory;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/HeartbeatFields.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/HeartbeatFields.java
new file mode 100644 (file)
index 0000000..c85edbe
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonInclude(JsonInclude.Include.NON_NULL)\r
+public class HeartbeatFields implements Serializable {\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = -4654513718975538805L;\r
+  private String heartbeatFieldsVersion;\r
+  private int heartbeatInterval;\r
+\r
+  public String getHeartbeatFieldsVersion() {\r
+    return heartbeatFieldsVersion;\r
+  }\r
+\r
+  public void setHeartbeatFieldsVersion(String heartbeatFieldsVersion) {\r
+    this.heartbeatFieldsVersion = heartbeatFieldsVersion;\r
+  }\r
+\r
+  public int getHeartbeatInterval() {\r
+    return heartbeatInterval;\r
+  }\r
+\r
+  public void setHeartbeatInterval(int heartbeatInterval) {\r
+    this.heartbeatInterval = heartbeatInterval;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/PnfRegEventAdditionalFeilds.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/PnfRegEventAdditionalFeilds.java
new file mode 100644 (file)
index 0000000..95b871a
--- /dev/null
@@ -0,0 +1,132 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonInclude(JsonInclude.Include.NON_NULL)\r
+public class PnfRegEventAdditionalFeilds implements Serializable {\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = 5368863118681551950L;\r
+  private String oamPort;\r
+  private String protocol;\r
+  private String username;\r
+  private String password;\r
+  private String reconnectOnChangedSchema;\r
+  @JsonProperty("sleep-factor")\r
+  private String sleepfactor;\r
+  private String tcpOnly;\r
+  private String connectionTimeout;\r
+  private String maxConnectionAttempts;\r
+  private String betweenAttemptsTimeout;\r
+  private String keepaliveDelay;\r
+\r
+  public String getOamPort() {\r
+    return oamPort;\r
+  }\r
+\r
+  public void setOamPort(String oamPort) {\r
+    this.oamPort = oamPort;\r
+  }\r
+\r
+  public String getProtocol() {\r
+    return protocol;\r
+  }\r
+\r
+  public void setProtocol(String protocol) {\r
+    this.protocol = protocol;\r
+  }\r
+\r
+  public String getUsername() {\r
+    return username;\r
+  }\r
+\r
+  public void setUsername(String username) {\r
+    this.username = username;\r
+  }\r
+\r
+  public String getPassword() {\r
+    return password;\r
+  }\r
+\r
+  public void setPassword(String password) {\r
+    this.password = password;\r
+  }\r
+\r
+  public String getReconnectOnChangedSchema() {\r
+    return reconnectOnChangedSchema;\r
+  }\r
+\r
+  public void setReconnectOnChangedSchema(String reconnectOnChangedSchema) {\r
+    this.reconnectOnChangedSchema = reconnectOnChangedSchema;\r
+  }\r
+\r
+  public String getSleepfactor() {\r
+    return sleepfactor;\r
+  }\r
+\r
+  public void setSleepfactor(String sleepfactor) {\r
+    this.sleepfactor = sleepfactor;\r
+  }\r
+\r
+  public String getTcpOnly() {\r
+    return tcpOnly;\r
+  }\r
+\r
+  public void setTcpOnly(String tcpOnly) {\r
+    this.tcpOnly = tcpOnly;\r
+  }\r
+\r
+  public String getConnectionTimeout() {\r
+    return connectionTimeout;\r
+  }\r
+\r
+  public void setConnectionTimeout(String connectionTimeout) {\r
+    this.connectionTimeout = connectionTimeout;\r
+  }\r
+\r
+  public String getMaxConnectionAttempts() {\r
+    return maxConnectionAttempts;\r
+  }\r
+\r
+  public void setMaxConnectionAttempts(String maxConnectionAttempts) {\r
+    this.maxConnectionAttempts = maxConnectionAttempts;\r
+  }\r
+\r
+  public String getBetweenAttemptsTimeout() {\r
+    return betweenAttemptsTimeout;\r
+  }\r
+\r
+  public void setBetweenAttemptsTimeout(String betweenAttemptsTimeout) {\r
+    this.betweenAttemptsTimeout = betweenAttemptsTimeout;\r
+  }\r
+\r
+  public String getKeepaliveDelay() {\r
+    return keepaliveDelay;\r
+  }\r
+\r
+  public void setKeepaliveDelay(String keepaliveDelay) {\r
+    this.keepaliveDelay = keepaliveDelay;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/PnfRegEventFields.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/model/PnfRegEventFields.java
new file mode 100644 (file)
index 0000000..4d98ab3
--- /dev/null
@@ -0,0 +1,150 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.model;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
+import java.io.Serializable;\r
+\r
+@JsonInclude(JsonInclude.Include.NON_NULL)\r
+public class PnfRegEventFields implements Serializable {\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = 2183003488649290852L;\r
+  private String pnfRegistrationFieldsVersion;\r
+  private String serialNumber;\r
+  private String vendorName;\r
+  private String oamV4IpAddress;\r
+  private String oamV6IpAddress;\r
+  private String softwareVersion;\r
+  private String unitType;\r
+  private String unitFamily;\r
+  private String modelNumber;\r
+  private String manufactureDate;\r
+  private String macAddress;\r
+  private String lastServiceDate;\r
+  @JsonProperty("additionalFields")\r
+  private PnfRegEventAdditionalFeilds additionalFields = null;\r
+\r
+  public String getPnfRegistrationFieldsVersion() {\r
+    return pnfRegistrationFieldsVersion;\r
+  }\r
+\r
+  public void setPnfRegistrationFieldsVersion(String pnfRegistrationFieldsVersion) {\r
+    this.pnfRegistrationFieldsVersion = pnfRegistrationFieldsVersion;\r
+  }\r
+\r
+  public String getSerialNumber() {\r
+    return serialNumber;\r
+  }\r
+\r
+  public void setSerialNumber(String serialNumber) {\r
+    this.serialNumber = serialNumber;\r
+  }\r
+\r
+  public String getVendorName() {\r
+    return vendorName;\r
+  }\r
+\r
+  public void setVendorName(String vendorName) {\r
+    this.vendorName = vendorName;\r
+  }\r
+\r
+  public String getOamV4IpAddress() {\r
+    return oamV4IpAddress;\r
+  }\r
+\r
+  public void setOamV4IpAddress(String oamV4IpAddress) {\r
+    this.oamV4IpAddress = oamV4IpAddress;\r
+  }\r
+\r
+  public String getOamV6IpAddress() {\r
+    return oamV6IpAddress;\r
+  }\r
+\r
+  public void setOamV6IpAddress(String oamV6IpAddress) {\r
+    this.oamV6IpAddress = oamV6IpAddress;\r
+  }\r
+\r
+  public String getSoftwareVersion() {\r
+    return softwareVersion;\r
+  }\r
+\r
+  public void setSoftwareVersion(String softwareVersion) {\r
+    this.softwareVersion = softwareVersion;\r
+  }\r
+\r
+  public String getUnitType() {\r
+    return unitType;\r
+  }\r
+\r
+  public void setUnitType(String unitType) {\r
+    this.unitType = unitType;\r
+  }\r
+\r
+  public String getUnitFamily() {\r
+    return unitFamily;\r
+  }\r
+\r
+  public void setUnitFamily(String unitFamily) {\r
+    this.unitFamily = unitFamily;\r
+  }\r
+\r
+  public String getModelNumber() {\r
+    return modelNumber;\r
+  }\r
+\r
+  public void setModelNumber(String modelNumber) {\r
+    this.modelNumber = modelNumber;\r
+  }\r
+\r
+  public String getManufactureDate() {\r
+    return manufactureDate;\r
+  }\r
+\r
+  public void setManufactureDate(String manufactureDate) {\r
+    this.manufactureDate = manufactureDate;\r
+  }\r
+\r
+  public String getMacAddress() {\r
+    return macAddress;\r
+  }\r
+\r
+  public void setMacAddress(String macAddress) {\r
+    this.macAddress = macAddress;\r
+  }\r
+\r
+  public String getLastServiceDate() {\r
+    return lastServiceDate;\r
+  }\r
+\r
+  public void setLastServiceDate(String lastServiceDate) {\r
+    this.lastServiceDate = lastServiceDate;\r
+  }\r
+\r
+  public PnfRegEventAdditionalFeilds getAdditionalFields() {\r
+    return additionalFields;\r
+  }\r
+\r
+  public void setAdditionalFields(PnfRegEventAdditionalFeilds additionalFields) {\r
+    this.additionalFields = additionalFields;\r
+  }\r
+}\r
diff --git a/ves-agent/src/main/resources/application.properties b/ves-agent/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..b4827c2
--- /dev/null
@@ -0,0 +1,43 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# Spring boot application properties\r
+spring.application.name=${CONFIG_MAP_NAME}\r
+spring.cloud.kubernetes.config.namespace=${CONFIG_NAME_SPACE}\r
+spring.cloud.kubernetes.reload.enabled=true\r
+management.endpoint.restart.enabled=true\r
+spring.cloud.kubernetes.reload.strategy=refresh\r
+management.endpoint.refresh.enabled=true\r
+spring.cloud.kubernetes.reload.mode=polling\r
+spring.cloud.kubernetes.reload.period=${CONFIG_RELOAD_TIME}\r
+#spring.cloud.kubernetes.reload.monitoring-config-maps=true\r
+server.port=${VES_REST_PORT}\r
+config.vendorName=${vendorName}\r
+config.vesVersion=7.0.1\r
+config.eventVersion=4.0.1\r
+config.pnfRegEventType=${pnfRegEventType}\r
+config.faultEventType=${faultEventType}\r
+config.faultFeildVersion=4.0\r
+config.pnfFeildVersion=2.0\r
+config.faultvesCollectorHost=${faultvesCollectorHost}\r
+config.faultvesCollectorPort=${faultvesCollectorPort}\r
+config.pnfregvesCollectorHost=${pnfregvesCollectorHost}\r
+config.pnfregvesCollectorPort=${pnfregvesCollectorPort}\r
+config.unitFamily=${unitFamily}\r
+config.unitType=${unitType}\r
+config.faultEventSourcePrefix=${faultEventSourcePrefix}
\ No newline at end of file
diff --git a/ves-agent/src/main/resources/log4j2.xml b/ves-agent/src/main/resources/log4j2.xml
new file mode 100644 (file)
index 0000000..4dcef81
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc\r
+ * under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+*/\r
+-->\r
+\r
+<Configuration status="DEBUG" monitorInterval="30">\r
+    <Properties>\r
+        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %m%n</Property>\r
+        <Property name="APP_LOG_ROOT">/logs</Property>\r
+    </Properties>\r
+    <Appenders>\r
+       <Console name="console" target="SYSTEM_OUT" follow="true">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+        </Console>\r
+        \r
+        <RollingFile name="applicationLog"\r
+            fileName="${APP_LOG_ROOT}/debug/application-debug.log"\r
+            filePattern="${APP_LOG_ROOT}/debug/application-debug-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout>\r
+               <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%X{client}] [%.-40t] %-25.45c{1} %-5p: %m%n</pattern>\r
+               <header>Debug Log started at: $${date:yyyy-MM-dd HH:mm:ss}</header>\r
+            </PatternLayout>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/debug/" maxDepth="1">\r
+                    <IfFileName glob="application-debug-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+  \r
+               <RollingFile name="springLog" \r
+                       fileName="${APP_LOG_ROOT}/thirdparty/spring-framework.log"\r
+            filePattern="${APP_LOG_ROOT}/thirdparty/spring-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/thirdparty/" maxDepth="1">\r
+                    <IfFileName glob="spring-*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+   \r
+       <RollingFile name="thirdPartyLog" \r
+                       fileName="${APP_LOG_ROOT}/thirdparty/third-party-framework.log"\r
+            filePattern="${APP_LOG_ROOT}/thirdparty/third-party-framework-%d{yyyy-MM-dd}-%i.log">\r
+            <PatternLayout pattern="${LOG_PATTERN}"/>\r
+            <Policies>\r
+                <SizeBasedTriggeringPolicy size="4MB" />\r
+            </Policies>\r
+            <DefaultRolloverStrategy>\r
+                <Delete basePath="${APP_LOG_ROOT}/thirdparty/" maxDepth="1">\r
+                    <IfFileName glob="third-party-framework*.log" />\r
+                    <IfAccumulatedFileCount exceeds="10" />\r
+                </Delete>\r
+            </DefaultRolloverStrategy>\r
+        </RollingFile>\r
+             \r
+    </Appenders>\r
+    \r
+    <Loggers>\r
+       <Logger name="org.commscope.tr069adapter" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+               <appender-ref ref="applicationLog"/>\r
+       </Logger>\r
+       \r
+       <Logger name="org" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="thirdPartyLog" />\r
+        </Logger>\r
+       \r
+       <Logger name="org.springframework" level="debug" additivity="false">\r
+               <appender-ref ref="console"/>\r
+            <AppenderRef ref="springLog" />\r
+        </Logger>\r
+        \r
+        <Root level="DEBUG" additivity="false"/>\r
+    </Loggers>\r
+</Configuration>\r
diff --git a/ves-agent/src/test/java/org/commscope/tr069adapter/vesagent/test/VESAgentServiceRestTest.java b/ves-agent/src/test/java/org/commscope/tr069adapter/vesagent/test/VESAgentServiceRestTest.java
new file mode 100644 (file)
index 0000000..f44ff94
--- /dev/null
@@ -0,0 +1,373 @@
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.vesagent.test;\r
+\r
+import com.fasterxml.jackson.core.JsonProcessingException;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.acs.common.InformType;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.acs.common.dto.TR069InformType;\r
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
+import org.commscope.tr069adapter.acs.common.inform.PeriodicInform;\r
+import org.commscope.tr069adapter.acs.common.inform.ValueChangeInform;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
+import org.commscope.tr069adapter.mapper.model.VESNotification;\r
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
+import org.commscope.tr069adapter.vesagent.boot.VESAgentServiceBooter;\r
+import org.commscope.tr069adapter.vesagent.controller.VESAgentService;\r
+import org.commscope.tr069adapter.vesagent.exception.InvalidFaultOperationException;\r
+import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.Mockito;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.boot.test.context.SpringBootTest;\r
+import org.springframework.boot.test.mock.mockito.MockBean;\r
+import org.springframework.http.HttpStatus;\r
+import org.springframework.test.context.junit4.SpringRunner;\r
+\r
+@SpringBootTest(classes = {VESAgentServiceBooter.class})\r
+@RunWith(SpringRunner.class)\r
+// @WebMvcTest(VESAgentService.class)\r
+public class VESAgentServiceRestTest {\r
+\r
+  @Autowired\r
+  VESAgentService agent;\r
+\r
+  @MockBean\r
+  HttpRequestSender sender;\r
+\r
+  @Test\r
+  public void processPnfEventTest() throws JsonProcessingException, InvalidFaultOperationException {\r
+    VESNotificationResponse res =\r
+        new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+    Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+    VESNotification ves = new VESNotification();\r
+    ves.seteNodeBName("0005B9A1");\r
+    ves.setNetconfDetails(getNetConfDetails());\r
+    DeviceInform inform = new BootstrapInform();\r
+    inform.setDeviceDetails(getDeviceDetails());\r
+    ArrayList<InformType> list = new ArrayList<>();\r
+    list.add(TR069InformType.BOOTSTRAP);\r
+    inform.setInformTypeList(list);\r
+    inform.setParameters(getGeneralParams());\r
+    ves.setDevnotification(inform);\r
+\r
+    VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+    Assert.assertNotNull(vesResponse);\r
+    Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+\r
+  }\r
+\r
+  @Test\r
+  public void processPnfEventWhenEnbNullTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName(null);\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new BootstrapInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.BOOTSTRAP);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getGeneralParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+      res.getStatusCode();\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processFaultEventCriticalTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName("0005B9A1");\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new ValueChangeInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.VALUECHANGE);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getFaultCritcalParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processFaultEventWhenEnbNullTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName(null);\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new ValueChangeInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.VALUECHANGE);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getFaultCritcalParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processFaultEventClearTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName("0005B9A1");\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new ValueChangeInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.VALUECHANGE);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getFaultClearParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+      res.getStatusCode();\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processFaultEventTimeZoneTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName("0005B9A1");\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new ValueChangeInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.VALUECHANGE);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getFaultClearParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+      res.getStatusCode();\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processHBEventTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName("0005B9A1");\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new PeriodicInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.PERIODIC);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getGeneralParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+      res.getStatusCode();\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processHBEventWhenEnbNullTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName(null);\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      DeviceInform inform = new PeriodicInform();\r
+      inform.setDeviceDetails(getDeviceDetails());\r
+      ArrayList<InformType> list = new ArrayList<>();\r
+      list.add(TR069InformType.PERIODIC);\r
+      inform.setInformTypeList(list);\r
+      inform.setParameters(getGeneralParams());\r
+      ves.setDevnotification(inform);\r
+\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+      res.getStatusCode();\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processOnRestartEventTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName("0005B9A1");\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+  @Test\r
+  public void processOnRestartEventWhenEnbNullTest() {\r
+    try {\r
+      VESNotificationResponse res =\r
+          new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "Sucess");\r
+      Mockito.when(sender.postRequest(Mockito.anyString(), Mockito.anyString())).thenReturn(res);\r
+      VESNotification ves = new VESNotification();\r
+      ves.seteNodeBName("0005B9A1");\r
+      ves.setNetconfDetails(getNetConfDetails());\r
+      ves.getNetconfDetails().setEnodeBName(null);\r
+      VESNotificationResponse vesResponse = agent.processDeviceNotificationAsVESEvent(ves);\r
+      Assert.assertNotNull(vesResponse);\r
+      Assert.assertEquals(HttpStatus.ACCEPTED.value(), vesResponse.getStatusCode());\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
+\r
+\r
+  private ArrayList<ParameterDTO> getFaultClearParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.EventTime", ""));\r
+    params\r
+        .add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.AlarmIdentifier", "0005B9B5-100"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.NotificationType", "NewAlarm"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.ManagedObjectInstance",\r
+        "Device.Services.FAPService.{i}.FAPControl.LTE"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.EventType", "S1 Connection"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.ProbableCause",\r
+        "S1 connection failure"));\r
+    params.add(\r
+        new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.SpecificProblem", "Unsupported PLMN"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.PerceivedSeverity", "CLEAR"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.AdditionalText",\r
+        "S1 connection setup FAILED Addional Text"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.AdditionalInformation",\r
+        "S1 connection setup FAILED Aditional Inf"));\r
+    return params;\r
+  }\r
+\r
+  private ArrayList<ParameterDTO> getFaultCritcalParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.EventTime", ""));\r
+    params\r
+        .add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.AlarmIdentifier", "0005B9B5-100"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.NotificationType", "NewAlarm"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.ManagedObjectInstance",\r
+        "Device.Services.FAPService.{i}.FAPControl.LTE"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.EventType", "S1 Connection"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.ProbableCause",\r
+        "S1 connection failure"));\r
+    params.add(\r
+        new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.SpecificProblem", "Unsupported PLMN"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.PerceivedSeverity", "CRITICAL"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.AdditionalText",\r
+        "S1 connection setup FAILED Addional Text"));\r
+    params.add(new ParameterDTO("Device.FaultMgmt.ExpeditedEvent.1.AdditionalInformation",\r
+        "S1 connection setup FAILED Aditional Inf | TZD=UTC+00.00"));\r
+    return params;\r
+  }\r
+\r
+\r
+\r
+  private ArrayList<ParameterDTO> getGeneralParams() {\r
+    ArrayList<ParameterDTO> params = new ArrayList<>();\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ManufacturerOUI", "0005B9"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.ProductClass", "LTE_Enterprise_C-RANSC_Cntrl"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.HardwareVersion", "750742.00.04"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.SoftwareVersion", "4.3.00.231"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.Manufacturer", "ORAN"));\r
+    params.add(new ParameterDTO("Device.DeviceInfo.SerialNumber", "00005B9A1"));\r
+    params.add(new ParameterDTO("Device.IP.Interface.1.IPv4Address.1.IPAddress", "10.211.5.55"));\r
+    return params;\r
+  }\r
+\r
+  private NetConfServerDetails getNetConfDetails() {\r
+    NetConfServerDetails nf = new NetConfServerDetails();\r
+    nf.setDeviceId("00005B9A1");\r
+    nf.setEnodeBName("0005B9A1");\r
+    nf.setListenAddress("10.211.5.27");\r
+    nf.setListenPort("17830");\r
+    return nf;\r
+  }\r
+\r
+  private DeviceDetails getDeviceDetails() {\r
+    DeviceDetails nf = new DeviceDetails();\r
+    nf.setDeviceId("00005B9A1");\r
+    nf.setDeviceTypeId(50);\r
+    nf.setOui("0005B9");\r
+    nf.setProductClass("LTE_Enterprise_C-RANSC_Cntrl");\r
+    return nf;\r
+  }\r
+}\r
diff --git a/ves-agent/src/test/resources/application.properties b/ves-agent/src/test/resources/application.properties
new file mode 100644 (file)
index 0000000..d75fe21
--- /dev/null
@@ -0,0 +1,43 @@
+# ============LICENSE_START========================================================================\r
+# ONAP : tr-069-adapter\r
+# =================================================================================================\r
+# Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+# =================================================================================================\r
+# This tr-069-adapter software file is distributed by CommScope Inc\r
+# under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# This file is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# ===============LICENSE_END=======================================================================\r
+\r
+# Spring boot application properties\r
+spring.application.name=ves-notifier\r
+spring.cloud.kubernetes.config.namespace=ves\r
+spring.cloud.kubernetes.reload.enabled=true\r
+management.endpoint.restart.enabled=true\r
+spring.cloud.kubernetes.reload.strategy=refresh\r
+management.endpoint.refresh.enabled=true\r
+spring.cloud.kubernetes.reload.mode=polling\r
+spring.cloud.kubernetes.reload.period=6000000\r
+#spring.cloud.kubernetes.reload.monitoring-config-maps=true\r
+server.port=8282\r
+config.vendorName=ORAN\r
+config.vesVersion=7.0.1\r
+config.eventVersion=4.0.1\r
+config.pnfRegEventType=Pnfevt\r
+config.faultEventType=faultEventType\r
+config.faultFeildVersion=4.0\r
+config.pnfFeildVersion=2.0\r
+config.faultvesCollectorHost=10.211.5.55\r
+config.faultvesCollectorPort=30325\r
+config.pnfregvesCollectorHost=10.211.5.55\r
+config.pnfregvesCollectorPort=30325\r
+config.unitFamily=ORAN\r
+config.unitType=TR069\r
+config.faultEventSourcePrefix=faultEventSourcePrefix
\ No newline at end of file