From 817e806447e6385e24cdbd7c425c07a47eaee550 Mon Sep 17 00:00:00 2001 From: phamt Date: Tue, 13 Apr 2010 20:33:12 +0000 Subject: [PATCH] Only tarball needed to be checked in Former-commit-id: 948924ed01574c8e7f0263f31f28e34f71e8513e --- zhcp/.cproject | 209 -- zhcp/.project | 77 - zhcp/BUILD/Makefile | 801 ------ zhcp/BUILD/config/zhcp.conf | 1 - zhcp/BUILD/resource_access/include/smPublic.h | 381 --- zhcp/BUILD/resource_access/include/smSocket.h | 16 - .../resource_access/include/smTraceAndError.h | 137 - .../include/smapiTableParser.h | 213 -- .../include/vmapiAsynchronous.h | 129 - .../include/vmapiAuthorization.h | 106 - .../include/vmapiCheckAuthentication.h | 34 - .../include/vmapiDirectoryManager.h | 172 -- .../resource_access/include/vmapiImage.h | 1252 --------- .../BUILD/resource_access/include/vmapiName.h | 102 - .../resource_access/include/vmapiProfile.h | 111 - .../resource_access/include/vmapiPrototype.h | 148 -- .../resource_access/include/vmapiQuery.h | 90 - .../resource_access/include/vmapiShared.h | 214 -- .../resource_access/include/vmapiStatic.h | 74 - .../resource_access/include/vmapiSystem.h | 115 - .../BUILD/resource_access/include/vmapiVMRM.h | 137 - .../resource_access/include/vmapiVirtual.h | 782 ------ .../resource_access/include/wrapperutils.h | 19 - zhcp/BUILD/resource_access/src/add3390.c | 99 - .../BUILD/resource_access/src/add3390active.c | 71 - zhcp/BUILD/resource_access/src/add9336.c | 116 - zhcp/BUILD/resource_access/src/addnic.c | 85 - zhcp/BUILD/resource_access/src/addprocessor.c | 67 - zhcp/BUILD/resource_access/src/addvdisk.c | 76 - .../resource_access/src/connectnic2guestlan.c | 72 - .../resource_access/src/connectnic2vswitch.c | 71 - zhcp/BUILD/resource_access/src/createvs.c | 231 -- .../resource_access/src/dedicatedevice.c | 80 - zhcp/BUILD/resource_access/src/deleteipl.c | 65 - zhcp/BUILD/resource_access/src/deletevs.c | 72 - .../BUILD/resource_access/src/disconnectnic.c | 69 - zhcp/BUILD/resource_access/src/getdiskpool.c | 100 - .../resource_access/src/getdiskpoolnames.c | 73 - zhcp/BUILD/resource_access/src/getipl.c | 63 - zhcp/BUILD/resource_access/src/getuserentry.c | 90 - .../resource_access/src/getuserentrynames.c | 62 - .../resource_access/src/getuserprofile.c | 90 - zhcp/BUILD/resource_access/src/queryvolumes.c | 93 - zhcp/BUILD/resource_access/src/removemdisk.c | 69 - zhcp/BUILD/resource_access/src/removenic.c | 68 - .../resource_access/src/removeprocessor.c | 64 - zhcp/BUILD/resource_access/src/replacevs.c | 202 -- zhcp/BUILD/resource_access/src/setipl.c | 71 - zhcp/BUILD/resource_access/src/setpassword.c | 67 - .../BUILD/resource_access/src/smMemoryGroup.c | 140 - zhcp/BUILD/resource_access/src/smSocket.c | 659 ----- .../resource_access/src/smapiTableParser.c | 929 ------- .../resource_access/src/smapiUtilities.c | 2265 ----------------- zhcp/BUILD/resource_access/src/startvs.c | 73 - zhcp/BUILD/resource_access/src/stopvs.c | 69 - .../resource_access/src/undedicatedevice.c | 66 - zhcp/BUILD/resource_access/src/virtualImage.h | 70 - .../vmapiAsynchronousNotificationDisableDm.c | 105 - .../vmapiAsynchronousNotificationEnableDm.c | 106 - .../vmapiAsynchronousNotificationQueryDm.c | 105 - .../src/vmapiAuthorizationListAdd.c | 88 - .../src/vmapiAuthorizationListQuery.c | 88 - .../src/vmapiAuthorizationListRemove.c | 88 - .../src/vmapiCheckAuthentication.c | 71 - .../vmapiDirectoryManagerLocalTagDefineDm.c | 89 - .../vmapiDirectoryManagerLocalTagDeleteDm.c | 83 - .../vmapiDirectoryManagerLocalTagQueryDm.c | 83 - .../src/vmapiDirectoryManagerLocalTagSetDm.c | 89 - .../src/vmapiDirectoryManagerSearchDm.c | 84 - .../src/vmapiDirectoryManagerTaskCancelDm.c | 80 - .../resource_access/src/vmapiIPaddrGet.c | 57 - .../resource_access/src/vmapiImageActivate.c | 76 - .../src/vmapiImageActiveConfigurationQuery.c | 77 - .../resource_access/src/vmapiImageCpuDefine.c | 87 - .../src/vmapiImageCpuDefineDm.c | 102 - .../resource_access/src/vmapiImageCpuDelete.c | 84 - .../src/vmapiImageCpuDeleteDm.c | 84 - .../resource_access/src/vmapiImageCpuQuery.c | 77 - .../src/vmapiImageCpuQueryDm.c | 83 - .../src/vmapiImageCpuSetMaximumDm.c | 80 - .../resource_access/src/vmapiImageCreateDm.c | 122 - .../src/vmapiImageDeactivate.c | 86 - .../resource_access/src/vmapiImageDeleteDm.c | 82 - .../src/vmapiImageDeviceDedicate.c | 94 - .../src/vmapiImageDeviceDedicateDm.c | 94 - .../src/vmapiImageDeviceReset.c | 83 - .../src/vmapiImageDeviceUndedicate.c | 83 - .../src/vmapiImageDeviceUndedicateDm.c | 83 - .../resource_access/src/vmapiImageDiskCopy.c | 83 - .../src/vmapiImageDiskCopyDm.c | 144 -- .../src/vmapiImageDiskCreate.c | 90 - .../src/vmapiImageDiskCreateDm.c | 150 -- .../src/vmapiImageDiskDelete.c | 83 - .../src/vmapiImageDiskDeleteDm.c | 86 - .../resource_access/src/vmapiImageDiskShare.c | 111 - .../src/vmapiImageDiskShareDm.c | 111 - .../src/vmapiImageDiskUnshare.c | 83 - .../src/vmapiImageDiskUnshareDm.c | 95 - .../src/vmapiImageIplDeleteDm.c | 76 - .../src/vmapiImageIplDeviceQuery.c | 62 - .../src/vmapiImageIplQueryDm.c | 76 - .../resource_access/src/vmapiImageIplSetDm.c | 98 - .../resource_access/src/vmapiImageLockDm.c | 84 - .../src/vmapiImageNameQueryDm.c | 411 --- .../src/vmapiImagePasswordSetDm.c | 83 - .../src/vmapiImageQueryActivateTime.c | 80 - .../resource_access/src/vmapiImageQueryDm.c | 563 ---- .../resource_access/src/vmapiImageRecycle.c | 76 - .../resource_access/src/vmapiImageReplaceDm.c | 95 - .../vmapiImageScsiCharacteristicsDefineDm.c | 118 - .../vmapiImageScsiCharacteristicsQueryDm.c | 77 - .../src/vmapiImageStatusQuery.c | 76 - .../resource_access/src/vmapiImageUnlockDm.c | 85 - .../resource_access/src/vmapiImageVolumeAdd.c | 150 -- .../src/vmapiImageVolumeDelete.c | 150 -- .../src/vmapiImageVolumeSpaceDefineDm.c | 112 - .../src/vmapiImageVolumeSpaceQueryDm.c | 91 - .../src/vmapiImageVolumeSpaceRemoveDm.c | 104 - .../resource_access/src/vmapiNameListAdd.c | 81 - .../src/vmapiNameListDestroy.c | 76 - .../resource_access/src/vmapiNameListQuery.c | 76 - .../resource_access/src/vmapiNameListRemove.c | 82 - .../src/vmapiProfileCreateDm.c | 98 - .../src/vmapiProfileDeleteDm.c | 77 - .../resource_access/src/vmapiProfileQueryDm.c | 427 ---- .../src/vmapiProfileReplaceDm.c | 99 - .../src/vmapiPrototypeCreateDm.c | 99 - .../src/vmapiPrototypeDeleteDm.c | 76 - .../src/vmapiPrototypeNameQueryDm.c | 76 - .../src/vmapiPrototypeQueryDm.c | 76 - .../src/vmapiPrototypeReplaceDm.c | 99 - .../src/vmapiQueryApiFunctionalLevel.c | 76 - .../src/vmapiQueryAsynchronousOperationDm.c | 79 - .../src/vmapiQueryDirectoryManagerLevelDm.c | 77 - .../src/vmapiSharedMemoryAccessAddDm.c | 83 - .../src/vmapiSharedMemoryAccessQueryDm.c | 84 - .../src/vmapiSharedMemoryAccessRemoveDm.c | 84 - .../src/vmapiSharedMemoryCreate.c | 104 - .../src/vmapiSharedMemoryDelete.c | 83 - .../src/vmapiSharedMemoryQuery.c | 83 - .../src/vmapiSharedMemoryReplace.c | 90 - .../src/vmapiStaticImageChangesActivateDm.c | 77 - .../src/vmapiStaticImageChangesDeactivateDm.c | 77 - .../src/vmapiStaticImageChangesImmediateDm.c | 77 - .../src/vmapiSystemInfoQuery.c | 57 - .../resource_access/src/vmapiSystemIoQuery.c | 62 - .../src/vmapiVirtualChannelConnectionCreate.c | 96 - .../vmapiVirtualChannelConnectionCreateDm.c | 91 - .../src/vmapiVirtualChannelConnectionDelete.c | 84 - .../vmapiVirtualChannelConnectionDeleteDm.c | 83 - .../vmapiVirtualNetworkAdapterConnectLan.c | 94 - .../vmapiVirtualNetworkAdapterConnectLanDm.c | 94 - ...vmapiVirtualNetworkAdapterConnectVswitch.c | 89 - ...apiVirtualNetworkAdapterConnectVswitchDm.c | 90 - .../src/vmapiVirtualNetworkAdapterCreate.c | 97 - .../src/vmapiVirtualNetworkAdapterCreateDm.c | 106 - .../src/vmapiVirtualNetworkAdapterDelete.c | 84 - .../src/vmapiVirtualNetworkAdapterDeleteDm.c | 84 - .../vmapiVirtualNetworkAdapterDisconnect.c | 84 - .../vmapiVirtualNetworkAdapterDisconnectDm.c | 84 - .../src/vmapiVirtualNetworkAdapterQuery.c | 84 - .../src/vmapiVirtualNetworkLanAccess.c | 100 - .../src/vmapiVirtualNetworkLanAccessQuery.c | 87 - .../src/vmapiVirtualNetworkLanCreate.c | 94 - .../src/vmapiVirtualNetworkLanDelete.c | 89 - .../src/vmapiVirtualNetworkLanQuery.c | 88 - .../src/vmapiVirtualNetworkQueryLan.c | 57 - .../src/vmapiVirtualNetworkQueryOsa.c | 57 - .../src/vmapiVirtualNetworkVswitchCreate.c | 216 -- .../src/vmapiVirtualNetworkVswitchDelete.c | 167 -- .../src/vmapiVirtualNetworkVswitchQuery.c | 83 - .../src/vmapiVirtualNetworkVswitchSet.c | 237 -- .../src/vmapiVmrmConfigurationQuery.c | 95 - .../src/vmapiVmrmConfigurationUpdate.c | 104 - .../src/vmapiVmrmMeasurementQuery.c | 76 - zhcp/BUILD/resource_access/src/wrapperutils.c | 102 - zhcp/RPMS/s390x/zhcp-1-1.s390x.rpm | Bin 365859 -> 0 bytes zhcp/SOURCES/zhcp-build.tar.gz | Bin 82897 -> 0 bytes zhcp/SPECS/zhcp.spec | 30 - zhcp/SRPMS/zhcp-1-1.src.rpm | Bin 84589 -> 0 bytes zhcp/buildrpm.sh | 46 - zhcp/variable/.rpmmacros | 1 - zhcp/zhcp-build/Makefile | 801 ------ zhcp/zhcp-build/config/zhcp.conf | 1 - .../resource_access/include/smPublic.h | 381 --- .../resource_access/include/smSocket.h | 16 - .../resource_access/include/smTraceAndError.h | 137 - .../include/smapiTableParser.h | 213 -- .../include/vmapiAsynchronous.h | 129 - .../include/vmapiAuthorization.h | 106 - .../include/vmapiCheckAuthentication.h | 34 - .../include/vmapiDirectoryManager.h | 172 -- .../resource_access/include/vmapiImage.h | 1252 --------- .../resource_access/include/vmapiName.h | 102 - .../resource_access/include/vmapiProfile.h | 111 - .../resource_access/include/vmapiPrototype.h | 148 -- .../resource_access/include/vmapiQuery.h | 90 - .../resource_access/include/vmapiShared.h | 214 -- .../resource_access/include/vmapiStatic.h | 74 - .../resource_access/include/vmapiSystem.h | 115 - .../resource_access/include/vmapiVMRM.h | 137 - .../resource_access/include/vmapiVirtual.h | 782 ------ .../resource_access/include/wrapperutils.h | 19 - zhcp/zhcp-build/resource_access/src/add3390.c | 99 - .../resource_access/src/add3390active.c | 71 - zhcp/zhcp-build/resource_access/src/add9336.c | 116 - zhcp/zhcp-build/resource_access/src/addnic.c | 85 - .../resource_access/src/addprocessor.c | 67 - .../zhcp-build/resource_access/src/addvdisk.c | 76 - .../resource_access/src/connectnic2guestlan.c | 72 - .../resource_access/src/connectnic2vswitch.c | 71 - .../zhcp-build/resource_access/src/createvs.c | 231 -- .../resource_access/src/dedicatedevice.c | 80 - .../resource_access/src/deleteipl.c | 65 - .../zhcp-build/resource_access/src/deletevs.c | 72 - .../resource_access/src/disconnectnic.c | 69 - .../resource_access/src/getdiskpool.c | 100 - .../resource_access/src/getdiskpoolnames.c | 73 - zhcp/zhcp-build/resource_access/src/getipl.c | 63 - .../resource_access/src/getuserentry.c | 90 - .../resource_access/src/getuserentrynames.c | 62 - .../resource_access/src/getuserprofile.c | 90 - .../resource_access/src/queryvolumes.c | 93 - .../resource_access/src/removemdisk.c | 69 - .../resource_access/src/removenic.c | 68 - .../resource_access/src/removeprocessor.c | 64 - .../resource_access/src/replacevs.c | 202 -- zhcp/zhcp-build/resource_access/src/setipl.c | 71 - .../resource_access/src/setpassword.c | 67 - .../resource_access/src/smMemoryGroup.c | 140 - .../zhcp-build/resource_access/src/smSocket.c | 659 ----- .../resource_access/src/smapiTableParser.c | 929 ------- .../resource_access/src/smapiUtilities.c | 2265 ----------------- zhcp/zhcp-build/resource_access/src/startvs.c | 73 - zhcp/zhcp-build/resource_access/src/stopvs.c | 69 - .../resource_access/src/undedicatedevice.c | 66 - .../resource_access/src/virtualImage.h | 70 - .../vmapiAsynchronousNotificationDisableDm.c | 105 - .../vmapiAsynchronousNotificationEnableDm.c | 106 - .../vmapiAsynchronousNotificationQueryDm.c | 105 - .../src/vmapiAuthorizationListAdd.c | 88 - .../src/vmapiAuthorizationListQuery.c | 88 - .../src/vmapiAuthorizationListRemove.c | 88 - .../src/vmapiCheckAuthentication.c | 71 - .../vmapiDirectoryManagerLocalTagDefineDm.c | 89 - .../vmapiDirectoryManagerLocalTagDeleteDm.c | 83 - .../vmapiDirectoryManagerLocalTagQueryDm.c | 83 - .../src/vmapiDirectoryManagerLocalTagSetDm.c | 89 - .../src/vmapiDirectoryManagerSearchDm.c | 84 - .../src/vmapiDirectoryManagerTaskCancelDm.c | 80 - .../resource_access/src/vmapiIPaddrGet.c | 57 - .../resource_access/src/vmapiImageActivate.c | 76 - .../src/vmapiImageActiveConfigurationQuery.c | 77 - .../resource_access/src/vmapiImageCpuDefine.c | 87 - .../src/vmapiImageCpuDefineDm.c | 102 - .../resource_access/src/vmapiImageCpuDelete.c | 84 - .../src/vmapiImageCpuDeleteDm.c | 84 - .../resource_access/src/vmapiImageCpuQuery.c | 77 - .../src/vmapiImageCpuQueryDm.c | 83 - .../src/vmapiImageCpuSetMaximumDm.c | 80 - .../resource_access/src/vmapiImageCreateDm.c | 122 - .../src/vmapiImageDeactivate.c | 86 - .../resource_access/src/vmapiImageDeleteDm.c | 82 - .../src/vmapiImageDeviceDedicate.c | 94 - .../src/vmapiImageDeviceDedicateDm.c | 94 - .../src/vmapiImageDeviceReset.c | 83 - .../src/vmapiImageDeviceUndedicate.c | 83 - .../src/vmapiImageDeviceUndedicateDm.c | 83 - .../resource_access/src/vmapiImageDiskCopy.c | 83 - .../src/vmapiImageDiskCopyDm.c | 144 -- .../src/vmapiImageDiskCreate.c | 90 - .../src/vmapiImageDiskCreateDm.c | 150 -- .../src/vmapiImageDiskDelete.c | 83 - .../src/vmapiImageDiskDeleteDm.c | 86 - .../resource_access/src/vmapiImageDiskShare.c | 111 - .../src/vmapiImageDiskShareDm.c | 111 - .../src/vmapiImageDiskUnshare.c | 83 - .../src/vmapiImageDiskUnshareDm.c | 95 - .../src/vmapiImageIplDeleteDm.c | 76 - .../src/vmapiImageIplDeviceQuery.c | 62 - .../src/vmapiImageIplQueryDm.c | 76 - .../resource_access/src/vmapiImageIplSetDm.c | 98 - .../resource_access/src/vmapiImageLockDm.c | 84 - .../src/vmapiImageNameQueryDm.c | 411 --- .../src/vmapiImagePasswordSetDm.c | 83 - .../src/vmapiImageQueryActivateTime.c | 80 - .../resource_access/src/vmapiImageQueryDm.c | 563 ---- .../resource_access/src/vmapiImageRecycle.c | 76 - .../resource_access/src/vmapiImageReplaceDm.c | 95 - .../vmapiImageScsiCharacteristicsDefineDm.c | 118 - .../vmapiImageScsiCharacteristicsQueryDm.c | 77 - .../src/vmapiImageStatusQuery.c | 76 - .../resource_access/src/vmapiImageUnlockDm.c | 85 - .../resource_access/src/vmapiImageVolumeAdd.c | 150 -- .../src/vmapiImageVolumeDelete.c | 150 -- .../src/vmapiImageVolumeSpaceDefineDm.c | 112 - .../src/vmapiImageVolumeSpaceQueryDm.c | 91 - .../src/vmapiImageVolumeSpaceRemoveDm.c | 104 - .../resource_access/src/vmapiNameListAdd.c | 81 - .../src/vmapiNameListDestroy.c | 76 - .../resource_access/src/vmapiNameListQuery.c | 76 - .../resource_access/src/vmapiNameListRemove.c | 82 - .../src/vmapiProfileCreateDm.c | 98 - .../src/vmapiProfileDeleteDm.c | 77 - .../resource_access/src/vmapiProfileQueryDm.c | 427 ---- .../src/vmapiProfileReplaceDm.c | 99 - .../src/vmapiPrototypeCreateDm.c | 99 - .../src/vmapiPrototypeDeleteDm.c | 76 - .../src/vmapiPrototypeNameQueryDm.c | 76 - .../src/vmapiPrototypeQueryDm.c | 76 - .../src/vmapiPrototypeReplaceDm.c | 99 - .../src/vmapiQueryApiFunctionalLevel.c | 76 - .../src/vmapiQueryAsynchronousOperationDm.c | 79 - .../src/vmapiQueryDirectoryManagerLevelDm.c | 77 - .../src/vmapiSharedMemoryAccessAddDm.c | 83 - .../src/vmapiSharedMemoryAccessQueryDm.c | 84 - .../src/vmapiSharedMemoryAccessRemoveDm.c | 84 - .../src/vmapiSharedMemoryCreate.c | 104 - .../src/vmapiSharedMemoryDelete.c | 83 - .../src/vmapiSharedMemoryQuery.c | 83 - .../src/vmapiSharedMemoryReplace.c | 90 - .../src/vmapiStaticImageChangesActivateDm.c | 77 - .../src/vmapiStaticImageChangesDeactivateDm.c | 77 - .../src/vmapiStaticImageChangesImmediateDm.c | 77 - .../src/vmapiSystemInfoQuery.c | 57 - .../resource_access/src/vmapiSystemIoQuery.c | 62 - .../src/vmapiVirtualChannelConnectionCreate.c | 96 - .../vmapiVirtualChannelConnectionCreateDm.c | 91 - .../src/vmapiVirtualChannelConnectionDelete.c | 84 - .../vmapiVirtualChannelConnectionDeleteDm.c | 83 - .../vmapiVirtualNetworkAdapterConnectLan.c | 94 - .../vmapiVirtualNetworkAdapterConnectLanDm.c | 94 - ...vmapiVirtualNetworkAdapterConnectVswitch.c | 89 - ...apiVirtualNetworkAdapterConnectVswitchDm.c | 90 - .../src/vmapiVirtualNetworkAdapterCreate.c | 97 - .../src/vmapiVirtualNetworkAdapterCreateDm.c | 106 - .../src/vmapiVirtualNetworkAdapterDelete.c | 84 - .../src/vmapiVirtualNetworkAdapterDeleteDm.c | 84 - .../vmapiVirtualNetworkAdapterDisconnect.c | 84 - .../vmapiVirtualNetworkAdapterDisconnectDm.c | 84 - .../src/vmapiVirtualNetworkAdapterQuery.c | 84 - .../src/vmapiVirtualNetworkLanAccess.c | 100 - .../src/vmapiVirtualNetworkLanAccessQuery.c | 87 - .../src/vmapiVirtualNetworkLanCreate.c | 94 - .../src/vmapiVirtualNetworkLanDelete.c | 89 - .../src/vmapiVirtualNetworkLanQuery.c | 88 - .../src/vmapiVirtualNetworkQueryLan.c | 57 - .../src/vmapiVirtualNetworkQueryOsa.c | 57 - .../src/vmapiVirtualNetworkVswitchCreate.c | 216 -- .../src/vmapiVirtualNetworkVswitchDelete.c | 167 -- .../src/vmapiVirtualNetworkVswitchQuery.c | 83 - .../src/vmapiVirtualNetworkVswitchSet.c | 237 -- .../src/vmapiVmrmConfigurationQuery.c | 95 - .../src/vmapiVmrmConfigurationUpdate.c | 104 - .../src/vmapiVmrmMeasurementQuery.c | 76 - .../resource_access/src/wrapperutils.c | 102 - 356 files changed, 47599 deletions(-) delete mode 100644 zhcp/.cproject delete mode 100644 zhcp/.project delete mode 100644 zhcp/BUILD/Makefile delete mode 100644 zhcp/BUILD/config/zhcp.conf delete mode 100644 zhcp/BUILD/resource_access/include/smPublic.h delete mode 100644 zhcp/BUILD/resource_access/include/smSocket.h delete mode 100644 zhcp/BUILD/resource_access/include/smTraceAndError.h delete mode 100644 zhcp/BUILD/resource_access/include/smapiTableParser.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiAsynchronous.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiAuthorization.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiCheckAuthentication.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiDirectoryManager.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiImage.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiName.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiProfile.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiPrototype.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiQuery.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiShared.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiStatic.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiSystem.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiVMRM.h delete mode 100644 zhcp/BUILD/resource_access/include/vmapiVirtual.h delete mode 100644 zhcp/BUILD/resource_access/include/wrapperutils.h delete mode 100644 zhcp/BUILD/resource_access/src/add3390.c delete mode 100644 zhcp/BUILD/resource_access/src/add3390active.c delete mode 100644 zhcp/BUILD/resource_access/src/add9336.c delete mode 100644 zhcp/BUILD/resource_access/src/addnic.c delete mode 100644 zhcp/BUILD/resource_access/src/addprocessor.c delete mode 100644 zhcp/BUILD/resource_access/src/addvdisk.c delete mode 100644 zhcp/BUILD/resource_access/src/connectnic2guestlan.c delete mode 100644 zhcp/BUILD/resource_access/src/connectnic2vswitch.c delete mode 100644 zhcp/BUILD/resource_access/src/createvs.c delete mode 100644 zhcp/BUILD/resource_access/src/dedicatedevice.c delete mode 100644 zhcp/BUILD/resource_access/src/deleteipl.c delete mode 100644 zhcp/BUILD/resource_access/src/deletevs.c delete mode 100644 zhcp/BUILD/resource_access/src/disconnectnic.c delete mode 100644 zhcp/BUILD/resource_access/src/getdiskpool.c delete mode 100644 zhcp/BUILD/resource_access/src/getdiskpoolnames.c delete mode 100644 zhcp/BUILD/resource_access/src/getipl.c delete mode 100644 zhcp/BUILD/resource_access/src/getuserentry.c delete mode 100644 zhcp/BUILD/resource_access/src/getuserentrynames.c delete mode 100644 zhcp/BUILD/resource_access/src/getuserprofile.c delete mode 100644 zhcp/BUILD/resource_access/src/queryvolumes.c delete mode 100644 zhcp/BUILD/resource_access/src/removemdisk.c delete mode 100644 zhcp/BUILD/resource_access/src/removenic.c delete mode 100644 zhcp/BUILD/resource_access/src/removeprocessor.c delete mode 100644 zhcp/BUILD/resource_access/src/replacevs.c delete mode 100644 zhcp/BUILD/resource_access/src/setipl.c delete mode 100644 zhcp/BUILD/resource_access/src/setpassword.c delete mode 100644 zhcp/BUILD/resource_access/src/smMemoryGroup.c delete mode 100644 zhcp/BUILD/resource_access/src/smSocket.c delete mode 100644 zhcp/BUILD/resource_access/src/smapiTableParser.c delete mode 100644 zhcp/BUILD/resource_access/src/smapiUtilities.c delete mode 100644 zhcp/BUILD/resource_access/src/startvs.c delete mode 100644 zhcp/BUILD/resource_access/src/stopvs.c delete mode 100644 zhcp/BUILD/resource_access/src/undedicatedevice.c delete mode 100644 zhcp/BUILD/resource_access/src/virtualImage.h delete mode 100644 zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationDisableDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationEnableDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiAuthorizationListAdd.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiAuthorizationListQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiAuthorizationListRemove.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiCheckAuthentication.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiDirectoryManagerSearchDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiIPaddrGet.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageActivate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageActiveConfigurationQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuDefine.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuDefineDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCpuSetMaximumDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageCreateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeactivate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeviceReset.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskCopy.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskCopyDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskCreate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskCreateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskShare.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskShareDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskUnshare.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageDiskUnshareDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageIplDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageIplDeviceQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageIplQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageIplSetDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageLockDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageNameQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImagePasswordSetDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageQueryActivateTime.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageRecycle.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageReplaceDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageStatusQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageUnlockDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageVolumeAdd.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageVolumeDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceDefineDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiNameListAdd.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiNameListDestroy.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiNameListQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiNameListRemove.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiProfileCreateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiProfileDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiProfileQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiProfileReplaceDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiPrototypeCreateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiPrototypeDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiPrototypeNameQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiPrototypeQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiPrototypeReplaceDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiQueryApiFunctionalLevel.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiQueryAsynchronousOperationDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessAddDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessQueryDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryCreate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSharedMemoryReplace.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiStaticImageChangesActivateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiStaticImageChangesDeactivateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiStaticImageChangesImmediateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSystemInfoQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiSystemIoQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccess.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanCreate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryLan.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryOsa.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchCreate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchDelete.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchSet.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationUpdate.c delete mode 100644 zhcp/BUILD/resource_access/src/vmapiVmrmMeasurementQuery.c delete mode 100644 zhcp/BUILD/resource_access/src/wrapperutils.c delete mode 100644 zhcp/RPMS/s390x/zhcp-1-1.s390x.rpm delete mode 100644 zhcp/SOURCES/zhcp-build.tar.gz delete mode 100644 zhcp/SPECS/zhcp.spec delete mode 100644 zhcp/SRPMS/zhcp-1-1.src.rpm delete mode 100644 zhcp/buildrpm.sh delete mode 100644 zhcp/variable/.rpmmacros delete mode 100644 zhcp/zhcp-build/Makefile delete mode 100644 zhcp/zhcp-build/config/zhcp.conf delete mode 100644 zhcp/zhcp-build/resource_access/include/smPublic.h delete mode 100644 zhcp/zhcp-build/resource_access/include/smSocket.h delete mode 100644 zhcp/zhcp-build/resource_access/include/smTraceAndError.h delete mode 100644 zhcp/zhcp-build/resource_access/include/smapiTableParser.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiAsynchronous.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiAuthorization.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiCheckAuthentication.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiDirectoryManager.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiImage.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiName.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiProfile.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiPrototype.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiQuery.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiShared.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiStatic.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiSystem.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiVMRM.h delete mode 100644 zhcp/zhcp-build/resource_access/include/vmapiVirtual.h delete mode 100644 zhcp/zhcp-build/resource_access/include/wrapperutils.h delete mode 100644 zhcp/zhcp-build/resource_access/src/add3390.c delete mode 100644 zhcp/zhcp-build/resource_access/src/add3390active.c delete mode 100644 zhcp/zhcp-build/resource_access/src/add9336.c delete mode 100644 zhcp/zhcp-build/resource_access/src/addnic.c delete mode 100644 zhcp/zhcp-build/resource_access/src/addprocessor.c delete mode 100644 zhcp/zhcp-build/resource_access/src/addvdisk.c delete mode 100644 zhcp/zhcp-build/resource_access/src/connectnic2guestlan.c delete mode 100644 zhcp/zhcp-build/resource_access/src/connectnic2vswitch.c delete mode 100644 zhcp/zhcp-build/resource_access/src/createvs.c delete mode 100644 zhcp/zhcp-build/resource_access/src/dedicatedevice.c delete mode 100644 zhcp/zhcp-build/resource_access/src/deleteipl.c delete mode 100644 zhcp/zhcp-build/resource_access/src/deletevs.c delete mode 100644 zhcp/zhcp-build/resource_access/src/disconnectnic.c delete mode 100644 zhcp/zhcp-build/resource_access/src/getdiskpool.c delete mode 100644 zhcp/zhcp-build/resource_access/src/getdiskpoolnames.c delete mode 100644 zhcp/zhcp-build/resource_access/src/getipl.c delete mode 100644 zhcp/zhcp-build/resource_access/src/getuserentry.c delete mode 100644 zhcp/zhcp-build/resource_access/src/getuserentrynames.c delete mode 100644 zhcp/zhcp-build/resource_access/src/getuserprofile.c delete mode 100644 zhcp/zhcp-build/resource_access/src/queryvolumes.c delete mode 100644 zhcp/zhcp-build/resource_access/src/removemdisk.c delete mode 100644 zhcp/zhcp-build/resource_access/src/removenic.c delete mode 100644 zhcp/zhcp-build/resource_access/src/removeprocessor.c delete mode 100644 zhcp/zhcp-build/resource_access/src/replacevs.c delete mode 100644 zhcp/zhcp-build/resource_access/src/setipl.c delete mode 100644 zhcp/zhcp-build/resource_access/src/setpassword.c delete mode 100644 zhcp/zhcp-build/resource_access/src/smMemoryGroup.c delete mode 100644 zhcp/zhcp-build/resource_access/src/smSocket.c delete mode 100644 zhcp/zhcp-build/resource_access/src/smapiTableParser.c delete mode 100644 zhcp/zhcp-build/resource_access/src/smapiUtilities.c delete mode 100644 zhcp/zhcp-build/resource_access/src/startvs.c delete mode 100644 zhcp/zhcp-build/resource_access/src/stopvs.c delete mode 100644 zhcp/zhcp-build/resource_access/src/undedicatedevice.c delete mode 100644 zhcp/zhcp-build/resource_access/src/virtualImage.h delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationDisableDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationEnableDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListAdd.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListRemove.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiCheckAuthentication.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerSearchDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiIPaddrGet.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageActivate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageActiveConfigurationQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefine.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefineDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCpuSetMaximumDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageCreateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeactivate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeviceReset.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopy.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopyDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskShare.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskShareDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshare.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshareDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageIplDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageIplDeviceQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageIplQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageIplSetDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageLockDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageNameQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImagePasswordSetDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageQueryActivateTime.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageRecycle.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageReplaceDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageStatusQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageUnlockDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageVolumeAdd.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageVolumeDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceDefineDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiNameListAdd.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiNameListDestroy.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiNameListQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiNameListRemove.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiProfileCreateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiProfileDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiProfileQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiProfileReplaceDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiPrototypeCreateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiPrototypeDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiPrototypeNameQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiPrototypeQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiPrototypeReplaceDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiQueryApiFunctionalLevel.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiQueryAsynchronousOperationDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessAddDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessQueryDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryCreate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryReplace.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesActivateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesDeactivateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesImmediateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSystemInfoQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiSystemIoQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccess.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanCreate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryLan.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryOsa.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchCreate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchDelete.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchSet.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationUpdate.c delete mode 100644 zhcp/zhcp-build/resource_access/src/vmapiVmrmMeasurementQuery.c delete mode 100644 zhcp/zhcp-build/resource_access/src/wrapperutils.c diff --git a/zhcp/.cproject b/zhcp/.cproject deleted file mode 100644 index 0cb66c3..0000000 --- a/zhcp/.cproject +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/zhcp/.project b/zhcp/.project deleted file mode 100644 index faa366b..0000000 --- a/zhcp/.project +++ /dev/null @@ -1,77 +0,0 @@ - - - zHCP - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - ?name? - - - - org.eclipse.cdt.make.core.append_environment - true - - - org.eclipse.cdt.make.core.autoBuildTarget - all - - - org.eclipse.cdt.make.core.buildArguments - - - - org.eclipse.cdt.make.core.buildCommand - make - - - org.eclipse.cdt.make.core.cleanBuildTarget - clean - - - org.eclipse.cdt.make.core.contents - org.eclipse.cdt.make.core.activeConfigSettings - - - org.eclipse.cdt.make.core.enableAutoBuild - false - - - org.eclipse.cdt.make.core.enableCleanBuild - true - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.fullBuildTarget - all - - - org.eclipse.cdt.make.core.stopOnError - true - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - true - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.core.cnature - - diff --git a/zhcp/BUILD/Makefile b/zhcp/BUILD/Makefile deleted file mode 100644 index f4e46d2..0000000 --- a/zhcp/BUILD/Makefile +++ /dev/null @@ -1,801 +0,0 @@ -DEBUG = -g -CFLAGS = -fPIC -LIB_DIR = $(RPM_BUILD_ROOT)/opt/zhcp/lib -BIN_DIR = $(RPM_BUILD_ROOT)/opt/zhcp/bin -LD_DIR = $(RPM_BUILD_ROOT)/etc/ld.so.conf.d -RA_SRC_DIR = resource_access/src/ -RA_INCLUDE_DIR = resource_access/include/ -VMAPILIB = libvmapi.so - -#----------------------------------------------------------------------- -# Headers -#----------------------------------------------------------------------- -COMMON_HEADERS = $(RA_INCLUDE_DIR)smPublic.h $(RA_INCLUDE_DIR)smTraceAndError.h $(RA_INCLUDE_DIR)smapiTableParser.h $(RA_INCLUDE_DIR)smSocket.h - -#----------------------------------------------------------------------- -# Objects for library -#----------------------------------------------------------------------- -OBJECTS = smSocket.o smMemoryGroup.o smapiUtilities.o \ - smapiTableParser.o \ - vmapiAsynchronousNotificationDisableDm.o \ - vmapiAsynchronousNotificationEnableDm.o \ - vmapiAsynchronousNotificationQueryDm.o \ - vmapiAuthorizationListAdd.o \ - vmapiAuthorizationListQuery.o \ - vmapiAuthorizationListRemove.o \ - vmapiCheckAuthentication.o \ - vmapiDirectoryManagerLocalTagDefineDm.o \ - vmapiDirectoryManagerLocalTagDeleteDm.o \ - vmapiDirectoryManagerLocalTagQueryDm.o \ - vmapiDirectoryManagerLocalTagSetDm.o \ - vmapiDirectoryManagerSearchDm.o \ - vmapiDirectoryManagerTaskCancelDm.o \ - vmapiImageActivate.o \ - vmapiImageActiveConfigurationQuery.o \ - vmapiImageCpuDefine.o \ - vmapiImageCpuDefineDm.o \ - vmapiImageCpuDelete.o \ - vmapiImageCpuDeleteDm.o \ - vmapiImageCpuQuery.o \ - vmapiImageCpuQueryDm.o \ - vmapiImageCpuSetMaximumDm.o \ - vmapiImageCreateDm.o \ - vmapiImageDeactivate.o \ - vmapiImageDeleteDm.o \ - vmapiImageDeviceDedicate.o \ - vmapiImageDeviceDedicateDm.o \ - vmapiImageDeviceReset.o \ - vmapiImageDeviceUndedicate.o \ - vmapiImageDeviceUndedicateDm.o \ - vmapiImageDiskCopy.o \ - vmapiImageDiskCopyDm.o \ - vmapiImageDiskCreate.o \ - vmapiImageDiskCreateDm.o \ - vmapiImageDiskDelete.o \ - vmapiImageDiskDeleteDm.o \ - vmapiImageDiskShare.o \ - vmapiImageDiskShareDm.o \ - vmapiImageDiskUnshare.o \ - vmapiImageDiskUnshareDm.o \ - vmapiImageIplDeleteDm.o \ - vmapiImageIplDeviceQuery.o \ - vmapiImageIplQueryDm.o \ - vmapiImageIplSetDm.o \ - vmapiImageLockDm.o \ - vmapiImageNameQueryDm.o \ - vmapiImagePasswordSetDm.o \ - vmapiImageQueryActivateTime.o \ - vmapiImageQueryDm.o \ - vmapiImageRecycle.o \ - vmapiImageReplaceDm.o \ - vmapiImageScsiCharacteristicsDefineDm.o \ - vmapiImageScsiCharacteristicsQueryDm.o \ - vmapiImageStatusQuery.o \ - vmapiImageUnlockDm.o \ - vmapiImageVolumeAdd.o \ - vmapiImageVolumeDelete.o \ - vmapiImageVolumeSpaceDefineDm.o \ - vmapiImageVolumeSpaceQueryDm.o \ - vmapiImageVolumeSpaceRemoveDm.o \ - vmapiNameListAdd.o \ - vmapiNameListDestroy.o \ - vmapiNameListQuery.o \ - vmapiNameListRemove.o \ - vmapiProfileCreateDm.o \ - vmapiProfileDeleteDm.o \ - vmapiProfileQueryDm.o \ - vmapiProfileReplaceDm.o \ - vmapiPrototypeCreateDm.o \ - vmapiPrototypeDeleteDm.o \ - vmapiPrototypeNameQueryDm.o \ - vmapiPrototypeQueryDm.o \ - vmapiPrototypeReplaceDm.o \ - vmapiQueryApiFunctionalLevel.o \ - vmapiQueryAsynchronousOperationDm.o \ - vmapiQueryDirectoryManagerLevelDm.o \ - vmapiSharedMemoryAccessAddDm.o \ - vmapiSharedMemoryAccessQueryDm.o \ - vmapiSharedMemoryAccessRemoveDm.o \ - vmapiSharedMemoryCreate.o \ - vmapiSharedMemoryDelete.o \ - vmapiSharedMemoryQuery.o \ - vmapiSharedMemoryReplace.o \ - vmapiStaticImageChangesActivateDm.o \ - vmapiStaticImageChangesDeactivateDm.o \ - vmapiStaticImageChangesImmediateDm.o \ - vmapiSystemInfoQuery.o \ - vmapiSystemIoQuery.o \ - vmapiVirtualChannelConnectionCreate.o \ - vmapiVirtualChannelConnectionCreateDm.o \ - vmapiVirtualChannelConnectionDelete.o \ - vmapiVirtualChannelConnectionDeleteDm.o \ - vmapiVirtualNetworkAdapterConnectLan.o \ - vmapiVirtualNetworkAdapterConnectLanDm.o \ - vmapiVirtualNetworkAdapterConnectVswitch.o \ - vmapiVirtualNetworkAdapterConnectVswitchDm.o \ - vmapiVirtualNetworkAdapterCreate.o \ - vmapiVirtualNetworkAdapterCreateDm.o \ - vmapiVirtualNetworkAdapterDelete.o \ - vmapiVirtualNetworkAdapterDeleteDm.o \ - vmapiVirtualNetworkAdapterDisconnect.o \ - vmapiVirtualNetworkAdapterDisconnectDm.o \ - vmapiVirtualNetworkAdapterQuery.o \ - vmapiVirtualNetworkLanAccess.o \ - vmapiVirtualNetworkLanAccessQuery.o \ - vmapiVirtualNetworkLanCreate.o \ - vmapiVirtualNetworkLanDelete.o \ - vmapiVirtualNetworkLanQuery.o \ - vmapiVirtualNetworkQueryOsa.o \ - vmapiVirtualNetworkVswitchCreate.o \ - vmapiVirtualNetworkVswitchDelete.o \ - vmapiVirtualNetworkVswitchQuery.o \ - vmapiVirtualNetworkVswitchSet.o \ - vmapiVmrmConfigurationQuery.o \ - vmapiVmrmConfigurationUpdate.o \ - vmapiVmrmMeasurementQuery.o -.PHONY: all install post clean - -#----------------------------------------------------------------------- -# All -#----------------------------------------------------------------------- -all: $(VMAPILIB) \ - wrapperutils.o \ - add3390 \ - add3390active \ - add9336 \ - addvdisk \ - addprocessor \ - addnic \ - connectnic2guestlan \ - connectnic2vswitch \ - createvs \ - deleteipl \ - deletevs \ - dedicatedevice \ - disconnectnic \ - getuserentrynames \ - getuserentry \ - getipl \ - getuserprofile \ - getdiskpool \ - getdiskpoolnames \ - queryvolumes \ - removemdisk \ - removenic \ - removeprocessor \ - replacevs \ - setipl \ - setpassword \ - startvs \ - stopvs \ - undedicatedevice - -#----------------------------------------------------------------------- -# Resource access .o files -#----------------------------------------------------------------------- -smSocket.o : $(RA_SRC_DIR)smSocket.c $(RA_INCLUDE_DIR)smSocket.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smSocket.c - -smMemoryGroup.o : $(RA_SRC_DIR)smMemoryGroup.c $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smMemoryGroup.c - -smapiUtilities.o : $(RA_SRC_DIR)smapiUtilities.c $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smapiUtilities.c - -smapiTableParser.o : $(RA_SRC_DIR)smapiTableParser.c $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smapiTableParser.c - -vmapiAsynchronousNotificationDisableDm.o : $(RA_SRC_DIR)vmapiAsynchronousNotificationDisableDm.c $(RA_INCLUDE_DIR)vmapiAsynchronous.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAsynchronousNotificationDisableDm.c - -vmapiAsynchronousNotificationEnableDm.o : $(RA_SRC_DIR)vmapiAsynchronousNotificationEnableDm.c $(RA_INCLUDE_DIR)vmapiAsynchronous.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAsynchronousNotificationEnableDm.c - -vmapiAsynchronousNotificationQueryDm.o : $(RA_SRC_DIR)vmapiAsynchronousNotificationQueryDm.c $(RA_INCLUDE_DIR)vmapiAsynchronous.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAsynchronousNotificationQueryDm.c - -vmapiAuthorizationListAdd.o : $(RA_SRC_DIR)vmapiAuthorizationListAdd.c $(RA_INCLUDE_DIR)vmapiAuthorization.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAuthorizationListAdd.c - -vmapiAuthorizationListQuery.o : $(RA_SRC_DIR)vmapiAuthorizationListQuery.c $(RA_INCLUDE_DIR)vmapiAuthorization.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAuthorizationListQuery.c - -vmapiAuthorizationListRemove.o : $(RA_SRC_DIR)vmapiAuthorizationListRemove.c $(RA_INCLUDE_DIR)vmapiAuthorization.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAuthorizationListRemove.c - -vmapiCheckAuthentication.o : $(RA_SRC_DIR)vmapiCheckAuthentication.c $(RA_INCLUDE_DIR)vmapiCheckAuthentication.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiCheckAuthentication.c - -vmapiDirectoryManagerLocalTagDefineDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDefineDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDefineDm.c - -vmapiDirectoryManagerLocalTagDeleteDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDeleteDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDeleteDm.c - -vmapiDirectoryManagerLocalTagQueryDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagQueryDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagQueryDm.c - -vmapiDirectoryManagerLocalTagSetDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagSetDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagSetDm.c - -vmapiDirectoryManagerSearchDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerSearchDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerSearchDm.c - -vmapiDirectoryManagerTaskCancelDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerTaskCancelDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerTaskCancelDm.c - -vmapiImageActivate.o : $(RA_SRC_DIR)vmapiImageActivate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageActivate.c - -vmapiImageActiveConfigurationQuery.o : $(RA_SRC_DIR)vmapiImageActiveConfigurationQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageActiveConfigurationQuery.c - -vmapiImageCpuDefine.o : $(RA_SRC_DIR)vmapiImageCpuDefine.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDefine.c - -vmapiImageCpuDefineDm.o : $(RA_SRC_DIR)vmapiImageCpuDefineDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDefineDm.c - -vmapiImageCpuDelete.o : $(RA_SRC_DIR)vmapiImageCpuDelete.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDelete.c - -vmapiImageCpuDeleteDm.o : $(RA_SRC_DIR)vmapiImageCpuDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDeleteDm.c - -vmapiImageCpuQuery.o : $(RA_SRC_DIR)vmapiImageCpuQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuQuery.c - -vmapiImageCpuQueryDm.o : $(RA_SRC_DIR)vmapiImageCpuQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuQueryDm.c - -vmapiImageCpuSetMaximumDm.o : $(RA_SRC_DIR)vmapiImageCpuSetMaximumDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuSetMaximumDm.c - -vmapiImageCreateDm.o : $(RA_SRC_DIR)vmapiImageCreateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCreateDm.c - -vmapiImageDeactivate.o : $(RA_SRC_DIR)vmapiImageDeactivate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeactivate.c - -vmapiImageDeleteDm.o : $(RA_SRC_DIR)vmapiImageDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeleteDm.c - -vmapiImageDeviceDedicate.o : $(RA_SRC_DIR)vmapiImageDeviceDedicate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceDedicate.c - -vmapiImageDeviceDedicateDm.o : $(RA_SRC_DIR)vmapiImageDeviceDedicateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceDedicateDm.c - -vmapiImageDeviceReset.o : $(RA_SRC_DIR)vmapiImageDeviceReset.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceReset.c - -vmapiImageDeviceUndedicate.o : $(RA_SRC_DIR)vmapiImageDeviceUndedicate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceUndedicate.c - -vmapiImageDeviceUndedicateDm.o : $(RA_SRC_DIR)vmapiImageDeviceUndedicateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceUndedicateDm.c - -vmapiImageDiskCopy.o : $(RA_SRC_DIR)vmapiImageDiskCopy.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCopy.c - -vmapiImageDiskCopyDm.o : $(RA_SRC_DIR)vmapiImageDiskCopyDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCopyDm.c - -vmapiImageDiskCreate.o : $(RA_SRC_DIR)vmapiImageDiskCreate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCreate.c - -vmapiImageDiskCreateDm.o : $(RA_SRC_DIR)vmapiImageDiskCreateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCreateDm.c - -vmapiImageDiskDelete.o : $(RA_SRC_DIR)vmapiImageDiskDelete.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskDelete.c - -vmapiImageDiskDeleteDm.o : $(RA_SRC_DIR)vmapiImageDiskDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskDeleteDm.c - -vmapiImageDiskShare.o : $(RA_SRC_DIR)vmapiImageDiskShare.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskShare.c - -vmapiImageDiskShareDm.o : $(RA_SRC_DIR)vmapiImageDiskShareDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskShareDm.c - -vmapiImageDiskUnshare.o : $(RA_SRC_DIR)vmapiImageDiskUnshare.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskUnshare.c - -vmapiImageDiskUnshareDm.o : $(RA_SRC_DIR)vmapiImageDiskUnshareDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskUnshareDm.c - -vmapiImageIplDeleteDm.o : $(RA_SRC_DIR)vmapiImageIplDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplDeleteDm.c - -vmapiImageIplDeviceQuery.o : $(RA_SRC_DIR)vmapiImageIplDeviceQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplDeviceQuery.c - -vmapiImageIplQueryDm.o : $(RA_SRC_DIR)vmapiImageIplQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplQueryDm.c - -vmapiImageIplSetDm.o : $(RA_SRC_DIR)vmapiImageIplSetDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplSetDm.c - -vmapiImageLockDm.o : $(RA_SRC_DIR)vmapiImageLockDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageLockDm.c - -vmapiImageNameQueryDm.o : $(RA_SRC_DIR)vmapiImageNameQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageNameQueryDm.c - -vmapiImagePasswordSetDm.o : $(RA_SRC_DIR)vmapiImagePasswordSetDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImagePasswordSetDm.c - -vmapiImageQueryActivateTime.o : $(RA_SRC_DIR)vmapiImageQueryActivateTime.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageQueryActivateTime.c - -vmapiImageQueryDm.o : $(RA_SRC_DIR)vmapiImageQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageQueryDm.c - -vmapiImageRecycle.o : $(RA_SRC_DIR)vmapiImageRecycle.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageRecycle.c - -vmapiImageReplaceDm.o : $(RA_SRC_DIR)vmapiImageReplaceDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageReplaceDm.c - -vmapiImageScsiCharacteristicsDefineDm.o : $(RA_SRC_DIR)vmapiImageScsiCharacteristicsDefineDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageScsiCharacteristicsDefineDm.c - -vmapiImageScsiCharacteristicsQueryDm.o : $(RA_SRC_DIR)vmapiImageScsiCharacteristicsQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageScsiCharacteristicsQueryDm.c - -vmapiImageStatusQuery.o : $(RA_SRC_DIR)vmapiImageStatusQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageStatusQuery.c - -vmapiImageUnlockDm.o : $(RA_SRC_DIR)vmapiImageUnlockDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageUnlockDm.c - -vmapiImageVolumeAdd.o : $(RA_SRC_DIR)vmapiImageVolumeAdd.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeAdd.c - -vmapiImageVolumeDelete.o : $(RA_SRC_DIR)vmapiImageVolumeDelete.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeDelete.c - -vmapiImageVolumeSpaceDefineDm.o : $(RA_SRC_DIR)vmapiImageVolumeSpaceDefineDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeSpaceDefineDm.c - -vmapiImageVolumeSpaceQueryDm.o : $(RA_SRC_DIR)vmapiImageVolumeSpaceQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeSpaceQueryDm.c - -vmapiImageVolumeSpaceRemoveDm.o : $(RA_SRC_DIR)vmapiImageVolumeSpaceRemoveDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeSpaceRemoveDm.c - -vmapiNameListAdd.o : $(RA_SRC_DIR)vmapiNameListAdd.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListAdd.c - -vmapiNameListDestroy.o : $(RA_SRC_DIR)vmapiNameListDestroy.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListDestroy.c - -vmapiNameListQuery.o : $(RA_SRC_DIR)vmapiNameListQuery.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListQuery.c - -vmapiNameListRemove.o : $(RA_SRC_DIR)vmapiNameListRemove.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListRemove.c - -vmapiProfileCreateDm.o : $(RA_SRC_DIR)vmapiProfileCreateDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileCreateDm.c - -vmapiProfileDeleteDm.o : $(RA_SRC_DIR)vmapiProfileDeleteDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileDeleteDm.c - -vmapiProfileQueryDm.o : $(RA_SRC_DIR)vmapiProfileQueryDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileQueryDm.c - -vmapiProfileReplaceDm.o : $(RA_SRC_DIR)vmapiProfileReplaceDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileReplaceDm.c - -vmapiPrototypeCreateDm.o : $(RA_SRC_DIR)vmapiPrototypeCreateDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeCreateDm.c - -vmapiPrototypeDeleteDm.o : $(RA_SRC_DIR)vmapiPrototypeDeleteDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeDeleteDm.c - -vmapiPrototypeNameQueryDm.o : $(RA_SRC_DIR)vmapiPrototypeNameQueryDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeNameQueryDm.c - -vmapiPrototypeQueryDm.o : $(RA_SRC_DIR)vmapiPrototypeQueryDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeQueryDm.c - -vmapiPrototypeReplaceDm.o : $(RA_SRC_DIR)vmapiPrototypeReplaceDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeReplaceDm.c - -vmapiQueryApiFunctionalLevel.o : $(RA_SRC_DIR)vmapiQueryApiFunctionalLevel.c $(RA_INCLUDE_DIR)vmapiQuery.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiQueryApiFunctionalLevel.c - -vmapiQueryAsynchronousOperationDm.o : $(RA_SRC_DIR)vmapiQueryAsynchronousOperationDm.c $(RA_INCLUDE_DIR)vmapiQuery.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiQueryAsynchronousOperationDm.c - -vmapiQueryDirectoryManagerLevelDm.o : $(RA_SRC_DIR)vmapiQueryDirectoryManagerLevelDm.c $(RA_INCLUDE_DIR)vmapiQuery.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiQueryDirectoryManagerLevelDm.c - -vmapiSharedMemoryAccessAddDm.o : $(RA_SRC_DIR)vmapiSharedMemoryAccessAddDm.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryAccessAddDm.c - -vmapiSharedMemoryAccessQueryDm.o : $(RA_SRC_DIR)vmapiSharedMemoryAccessQueryDm.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryAccessQueryDm.c - -vmapiSharedMemoryAccessRemoveDm.o : $(RA_SRC_DIR)vmapiSharedMemoryAccessRemoveDm.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryAccessRemoveDm.c - -vmapiSharedMemoryCreate.o : $(RA_SRC_DIR)vmapiSharedMemoryCreate.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryCreate.c - -vmapiSharedMemoryDelete.o : $(RA_SRC_DIR)vmapiSharedMemoryDelete.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryDelete.c - -vmapiSharedMemoryQuery.o : $(RA_SRC_DIR)vmapiSharedMemoryQuery.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryQuery.c - -vmapiSharedMemoryReplace.o : $(RA_SRC_DIR)vmapiSharedMemoryReplace.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryReplace.c - -vmapiStaticImageChangesActivateDm.o : $(RA_SRC_DIR)vmapiStaticImageChangesActivateDm.c $(RA_INCLUDE_DIR)vmapiStatic.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiStaticImageChangesActivateDm.c - -vmapiStaticImageChangesDeactivateDm.o : $(RA_SRC_DIR)vmapiStaticImageChangesDeactivateDm.c $(RA_INCLUDE_DIR)vmapiStatic.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiStaticImageChangesDeactivateDm.c - -vmapiStaticImageChangesImmediateDm.o : $(RA_SRC_DIR)vmapiStaticImageChangesImmediateDm.c $(RA_INCLUDE_DIR)vmapiStatic.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiStaticImageChangesImmediateDm.c - -vmapiSystemInfoQuery.o : $(RA_SRC_DIR)vmapiSystemInfoQuery.c $(RA_INCLUDE_DIR)vmapiSystem.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSystemInfoQuery.c - -vmapiSystemIoQuery.o : $(RA_SRC_DIR)vmapiSystemIoQuery.c $(RA_INCLUDE_DIR)vmapiSystem.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSystemIoQuery.c - -vmapiVirtualChannelConnectionCreate.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreate.c - -vmapiVirtualChannelConnectionCreateDm.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreateDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreateDm.c - -vmapiVirtualChannelConnectionDelete.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionDelete.c - -vmapiVirtualChannelConnectionDeleteDm.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionDeleteDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionDeleteDm.c - -vmapiVirtualNetworkAdapterConnectLan.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLan.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLan.c - -vmapiVirtualNetworkAdapterConnectLanDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLanDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLanDm.c - -vmapiVirtualNetworkAdapterConnectVswitch.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitch.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitch.c - -vmapiVirtualNetworkAdapterConnectVswitchDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitchDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitchDm.c - -vmapiVirtualNetworkAdapterCreate.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreate.c - -vmapiVirtualNetworkAdapterCreateDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreateDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreateDm.c - -vmapiVirtualNetworkAdapterDelete.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDelete.c - -vmapiVirtualNetworkAdapterDeleteDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDeleteDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDeleteDm.c - -vmapiVirtualNetworkAdapterDisconnect.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnect.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnect.c - -vmapiVirtualNetworkAdapterDisconnectDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnectDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnectDm.c - -vmapiVirtualNetworkAdapterQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterQuery.c - -vmapiVirtualNetworkLanAccess.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanAccess.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanAccess.c - -vmapiVirtualNetworkLanAccessQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanAccessQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanAccessQuery.c - -vmapiVirtualNetworkLanCreate.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanCreate.c - -vmapiVirtualNetworkLanDelete.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanDelete.c - -vmapiVirtualNetworkLanQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanQuery.c - -vmapiVirtualNetworkQueryOsa.o : $(RA_SRC_DIR)vmapiVirtualNetworkQueryOsa.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkQueryOsa.c - -vmapiVirtualNetworkVswitchCreate.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchCreate.c - -vmapiVirtualNetworkVswitchDelete.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchDelete.c - -vmapiVirtualNetworkVswitchQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchQuery.c - -vmapiVirtualNetworkVswitchSet.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchSet.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchSet.c - -vmapiVmrmConfigurationQuery.o : $(RA_SRC_DIR)vmapiVmrmConfigurationQuery.c $(RA_INCLUDE_DIR)vmapiVMRM.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVmrmConfigurationQuery.c - -vmapiVmrmConfigurationUpdate.o : $(RA_SRC_DIR)vmapiVmrmConfigurationUpdate.c $(RA_INCLUDE_DIR)vmapiVMRM.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVmrmConfigurationUpdate.c - -vmapiVmrmMeasurementQuery.o : $(RA_SRC_DIR)vmapiVmrmMeasurementQuery.c $(RA_INCLUDE_DIR)vmapiVMRM.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVmrmMeasurementQuery.c - -#----------------------------------------------------------------------- -# Resource access libraries -#----------------------------------------------------------------------- -$(VMAPILIB) : $(OBJECTS) - gcc -Wl,-d -shared -pthread -ldl -o $(VMAPILIB) $(OBJECTS) - -#----------------------------------------------------------------------- -# Resource access executables -#----------------------------------------------------------------------- -wrapperutils.o : $(RA_SRC_DIR)wrapperutils.c $(RA_INCLUDE_DIR)smPublic.h $(RA_INCLUDE_DIR)vmapiImage.h - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)wrapperutils.c - -add3390 : add3390.o $(VMAPILIB) - gcc -o add3390 -L./ -lvmapi wrapperutils.o add3390.o - -add3390.o : $(RA_SRC_DIR)add3390.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)add3390.c - -add3390active : add3390active.o $(VMAPILIB) - gcc -o add3390active -L./ -lvmapi wrapperutils.o add3390active.o - -add3390active.o : $(RA_SRC_DIR)add3390active.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)add3390active.c - -add9336 : add9336.o $(VMAPILIB) - gcc -o add9336 -L./ -lvmapi wrapperutils.o add9336.o - -add9336.o : $(RA_SRC_DIR)add9336.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)add9336.c - -addvdisk : addvdisk.o $(VMAPILIB) - gcc -o addvdisk -L./ -lvmapi wrapperutils.o addvdisk.o - -addvdisk.o : $(RA_SRC_DIR)addvdisk.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)addvdisk.c - -addprocessor : addprocessor.o $(VMAPILIB) - gcc -o addprocessor -L./ -lvmapi wrapperutils.o addprocessor.o - -addprocessor.o : $(RA_SRC_DIR)addprocessor.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)addprocessor.c - -addnic : addnic.o $(VMAPILIB) - gcc -o addnic -L./ -lvmapi wrapperutils.o addnic.o - -addnic.o : $(RA_SRC_DIR)addnic.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)addnic.c - -connectnic2guestlan : connectnic2guestlan.o $(VMAPILIB) - gcc -o connectnic2guestlan -L./ -lvmapi wrapperutils.o connectnic2guestlan.o - -connectnic2guestlan.o : $(RA_SRC_DIR)connectnic2guestlan.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)connectnic2guestlan.c - -connectnic2vswitch : connectnic2vswitch.o $(VMAPILIB) - gcc -o connectnic2vswitch -L./ -lvmapi wrapperutils.o connectnic2vswitch.o - -connectnic2vswitch.o : $(RA_SRC_DIR)connectnic2vswitch.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)connectnic2vswitch.c - -createvs : createvs.o $(VMAPILIB) - gcc -o createvs -L./ -lvmapi wrapperutils.o createvs.o - -createvs.o : $(RA_SRC_DIR)createvs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)createvs.c - -deletevs : deletevs.o $(VMAPILIB) - gcc -o deletevs -L./ -lvmapi wrapperutils.o deletevs.o - -deletevs.o : $(RA_SRC_DIR)deletevs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)deletevs.c - -dedicatedevice : dedicatedevice.o $(VMAPILIB) - gcc -o dedicatedevice -L./ -lvmapi wrapperutils.o dedicatedevice.o - -dedicatedevice.o : $(RA_SRC_DIR)dedicatedevice.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)dedicatedevice.c - -deleteipl : deleteipl.o $(VMAPILIB) - gcc -o deleteipl -L./ -lvmapi wrapperutils.o deleteipl.o - -deleteipl.o : $(RA_SRC_DIR)deleteipl.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)deleteipl.c - -disconnectnic : disconnectnic.o $(VMAPILIB) - gcc -o disconnectnic -L./ -lvmapi wrapperutils.o disconnectnic.o - -disconnectnic.o : $(RA_SRC_DIR)disconnectnic.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)disconnectnic.c - -getuserentrynames : getuserentrynames.o $(VMAPILIB) - gcc -o getuserentrynames -L./ -lvmapi wrapperutils.o getuserentrynames.o - -getuserentrynames.o : $(RA_SRC_DIR)getuserentrynames.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getuserentrynames.c - -getuserentry : getuserentry.o $(VMAPILIB) - gcc -o getuserentry -L./ -lvmapi wrapperutils.o getuserentry.o - -getuserentry.o : $(RA_SRC_DIR)getuserentry.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getuserentry.c - -getipl : getipl.o $(VMAPILIB) - gcc -o getipl -L./ -lvmapi wrapperutils.o getipl.o - -getipl.o : $(RA_SRC_DIR)getipl.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getipl.c - -getuserprofile : getuserprofile.o $(VMAPILIB) - gcc -o getuserprofile -L./ -lvmapi wrapperutils.o getuserprofile.o - -getuserprofile.o : $(RA_SRC_DIR)getuserprofile.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getuserprofile.c - -getdiskpool : getdiskpool.o $(VMAPILIB) - gcc -o getdiskpool -L./ -lvmapi wrapperutils.o getdiskpool.o - -getdiskpool.o : $(RA_SRC_DIR)getdiskpool.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getdiskpool.c - -getdiskpoolnames : getdiskpoolnames.o $(VMAPILIB) - gcc -o getdiskpoolnames -L./ -lvmapi wrapperutils.o getdiskpoolnames.o - -getdiskpoolnames.o : $(RA_SRC_DIR)getdiskpoolnames.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getdiskpoolnames.c - -queryvolumes : queryvolumes.o $(VMAPILIB) - gcc -o queryvolumes -L./ -lvmapi wrapperutils.o queryvolumes.o - -queryvolumes.o : $(RA_SRC_DIR)queryvolumes.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)queryvolumes.c - -removemdisk : removemdisk.o $(VMAPILIB) - gcc -o removemdisk -L./ -lvmapi wrapperutils.o removemdisk.o - -removemdisk.o : $(RA_SRC_DIR)removemdisk.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)removemdisk.c - -removenic : removenic.o $(VMAPILIB) - gcc -o removenic -L./ -lvmapi wrapperutils.o removenic.o - -removenic.o : $(RA_SRC_DIR)removenic.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)removenic.c - -removeprocessor : removeprocessor.o $(VMAPILIB) - gcc -o removeprocessor -L./ -lvmapi wrapperutils.o removeprocessor.o - -removeprocessor.o : $(RA_SRC_DIR)removeprocessor.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)removeprocessor.c - -replacevs : replacevs.o $(VMAPILIB) - gcc -o replacevs -L./ -lvmapi wrapperutils.o replacevs.o - -replacevs.o : $(RA_SRC_DIR)replacevs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)replacevs.c - -setipl : setipl.o $(VMAPILIB) - gcc -o setipl -L./ -lvmapi wrapperutils.o setipl.o - -setipl.o : $(RA_SRC_DIR)setipl.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)setipl.c - -setpassword : setpassword.o $(VMAPILIB) - gcc -o setpassword -L./ -lvmapi wrapperutils.o setpassword.o - -setpassword.o : $(RA_SRC_DIR)setpassword.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)setpassword.c - -startvs : startvs.o $(VMAPILIB) - gcc -o startvs -L./ -lvmapi wrapperutils.o startvs.o - -startvs.o : $(RA_SRC_DIR)startvs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)startvs.c - -stopvs : stopvs.o $(VMAPILIB) - gcc -o stopvs -L./ -lvmapi wrapperutils.o stopvs.o - -stopvs.o : $(RA_SRC_DIR)stopvs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)stopvs.c - -undedicatedevice : undedicatedevice.o $(VMAPILIB) - gcc -o undedicatedevice -L./ -lvmapi wrapperutils.o undedicatedevice.o - -undedicatedevice.o : $(RA_SRC_DIR)undedicatedevice.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)undedicatedevice.c - -#----------------------------------------------------------------------- -# Install -#----------------------------------------------------------------------- -install: - mkdir -p $(LIB_DIR) - install $(VMAPILIB) $(LIB_DIR) - mkdir -p $(BIN_DIR) - install stopvs $(BIN_DIR) - install add3390 $(BIN_DIR) - install add3390active $(BIN_DIR) - install add9336 $(BIN_DIR) - install addvdisk $(BIN_DIR) - install addprocessor $(BIN_DIR) - install addnic $(BIN_DIR) - install connectnic2guestlan $(BIN_DIR) - install connectnic2vswitch $(BIN_DIR) - install createvs $(BIN_DIR) - install deletevs $(BIN_DIR) - install dedicatedevice $(BIN_DIR) - install deleteipl $(BIN_DIR) - install disconnectnic $(BIN_DIR) - install getuserentrynames $(BIN_DIR) - install getuserentry $(BIN_DIR) - install getipl $(BIN_DIR) - install getuserprofile $(BIN_DIR) - install getdiskpool $(BIN_DIR) - install getdiskpoolnames $(BIN_DIR) - install queryvolumes $(BIN_DIR) - install removemdisk $(BIN_DIR) - install removenic $(BIN_DIR) - install removeprocessor $(BIN_DIR) - install replacevs $(BIN_DIR) - install setipl $(BIN_DIR) - install setpassword $(BIN_DIR) - install startvs $(BIN_DIR) - install stopvs $(BIN_DIR) - install undedicatedevice $(BIN_DIR) - mkdir -p $(LD_DIR) - install -m 644 config/zhcp.conf $(LD_DIR) - -#----------------------------------------------------------------------- -# Post -#----------------------------------------------------------------------- -post: - ldconfig - -#----------------------------------------------------------------------- -# Clean -#----------------------------------------------------------------------- -clean: - rm -f *.o *.so $(VMAPILIB) - rm add3390 - rm add3390active - rm add9336 - rm addvdisk - rm addprocessor - rm addnic - rm connectnic2guestlan - rm connectnic2vswitch - rm createvs - rm deleteipl - rm deletevs - rm dedicatedevice - rm disconnectnic - rm getuserentrynames - rm getuserentry - rm getipl - rm getuserprofile - rm getdiskpool - rm getdiskpoolnames - rm queryvolumes - rm removemdisk - rm removenic - rm removeprocessor - rm replacevs - rm setipl - rm setpassword - rm startvs - rm stopvs - rm undedicatedevice diff --git a/zhcp/BUILD/config/zhcp.conf b/zhcp/BUILD/config/zhcp.conf deleted file mode 100644 index a623f4f..0000000 --- a/zhcp/BUILD/config/zhcp.conf +++ /dev/null @@ -1 +0,0 @@ -/opt/zhcp/lib diff --git a/zhcp/BUILD/resource_access/include/smPublic.h b/zhcp/BUILD/resource_access/include/smPublic.h deleted file mode 100644 index 5ab3fcf..0000000 --- a/zhcp/BUILD/resource_access/include/smPublic.h +++ /dev/null @@ -1,381 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _SM_PUBLIC_H -#define _SM_PUBLIC_H - -#include -#include -#include -#include -#include - -#define BUFLEN 256 -#define MAXCACHENAMELEN 8+1+8 -#define CACHEENTRYLEN BUFLEN+MAXCACHENAMELEN -#define PATHLENGTH 512 -#define LENGTH_OF_USERID_LENGTH_FIELD 4 -#define ALL_SCAN_FILES "*.scan" -#define PORT_FILENAME "vmbkend.UDP" - -// Data structure to character based information -typedef struct _Record { - struct _Record* nextP; - char data[1]; -} Record; - -// Data structure to keep lists of records -typedef struct _List { - Record* firstP; - Record* currentP; - int size; -} List; - -enum Times { - ConnectRetryLimit = 10, // # trials for connect - SEND_RETRY_LIMIT = 8, // # times to retry send to SMAPI - Delay = 10, // Delay in loop checking for pending workunits - MaxWaitCycleN = 10, // Max number of wait cycles for pending ops - SleepInterval = 15, // Interval in seconds to sleep on repetitive operations - Socket_Timeout = 240, // Max timeout for socket operations - Socket_Indication_Timeout = 500, // Max timeout for indication socket operations - ImageSetRange = 4096, // # image disks in an image set - LINESIZE = 512 -// # bytes to use for a message/log line -}; - -// Resource layer specific function call return codes for internal/unexpected errors -// Look in the internal context for other specific return and reason codes -// listed below -// -// NOTE Parser return codes are using -4000 to -4010 see smapiTableParser.h for details. -#define MEMORY_ERROR -999 -#define INVALID_DATA -2 -#define PROCESSING_ERROR -3 - -// These are from smSocket.c functions -#define SOCKET_OBTAIN_ERROR -100 -#define SOCKET_CONNECT_REFUSED_ERROR -101 -#define SOCKET_CONNECT_TRYAGAIN_ERROR -102 -#define SOCKET_TIMEOUT_ERROR -103 -#define SOCKET_READ_ERROR -104 -#define SOCKET_READ_RETRYABLE_ERROR -105 -#define SOCKET_WRITE_ERROR -106 -#define SOCKET_WRITE_RETRYABLE_ERROR -107 -#define SOCKET_PROCESSING_ERROR -108 -#define CUSTOM_DEFINED_SOCKET_RETRY 100 - -// Return and reason codes -enum ReturnCodes { - RcWarning = 4, RcContext = -1, // Context related errors - RcSession = -2, // Session related errors - RcFunction = -3, // Errors invoking functions - RcRuntime = -4, // General runtime errors - RcIucv = -5, // Error caused by IUCV, reason code is IUCV return value - RcCp = -6, // CP command invocation errors - RcCpint = -7, // CPint invocation - RcNoMemory = -8 -// Out of memory and no context yet -}; - -enum GeneralReasonCodes { - RsInternalBufferTooSmall = 10000, RsNoMemory = 10001, - RsSemaphoreNotCreated = 10011, RsSemaphoreNotObtained = 10012, - RsSemaphoreNotReleased = 10013, RsSocketAddrIdFileNotOpened = 10014, - RsUnableToOpenLog = 10100, RsSocketTimeout = 10110, RsUnexpected = 10200 -}; - -enum ContextReasonCodes { - RsNoHostname = 1, RsNoHostId = 2, RsNoServerAssociation = 3, - RsNoUserid = 4, RsInvalidVmapiServerVersion = 5, RsInvalidServerName = 6 -}; - -enum SessionReasonCodes { - RsUnableToReadSessionContext = 1, RsUnableToWriteSessionContext = 2 -}; - -enum FunctionReasonCodes { - RsFunctionNotSpecified = 1, RsFunctionUnknown = 2, - RsFunctionNotImplemented = 3, RsInvalidNumberOfArguments = 4, - RsFunctionNotSupported = 5, RsInvalidArgument = 24 -}; - -enum RuntimeReasonCodes { - RsUnableToOpenLog22 = 1 -}; - -typedef struct _smMemoryGroupContext { - int arraySize; - int lastChunk; - void ** chunks; -} smMemoryGroupContext; - -#define CACHE_PATH_DEFAULT "/var/opt/ibm/zvmmap/.vmapi/" -#define CACHE_SEMAPHORE_DIRECTORY ".vmapi/" -#define CACHE_SEMAPHORE_FILENAME "vmapi.sem" -#define CACHE_DIRECTORY ".cache/" -#define CACHE_DIRECTORY_FOR_USER "cache/" -#define CACHE_FILE_EXTENSION_FOR_USER ".cache" -#define CACHE_INSTANCEID_FILE_EXTENSION_FOR_USER ".id" - -// A macro to free memory and zero out the pointer too -#define FREE_MEMORY(_mempointer_) \ - if (_mempointer_) \ - { \ - free(_mempointer_); \ - _mempointer_ = NULL; \ - } - -#define TO_STRING2(_data_) \ - #_data_ -#define TO_STRING(_data_) \ - TO_STRING2(_data_) - -/** - * Before calling the resource layer the caller needs to create and zero out - * a VmApiInternalContext and set the following fields: - * - * smMemoryGroupContext structure pointed to by the memContext field. That - * memory structure should also be zeroed out. - * - * --- Trace info --- - * Set a trace flags structure pointer using the global external name: - * extern struct _smtrace externSmapiTraceFlags; - * - * Ex: - * vmapiContext.smTraceDetails = (struct _smTrace *)&externSmapiTraceFlags; - * - * That structure can be zero'ed out for no tracing or flags set to trace - * a specific area. See smTraceAndError.h for constants. - * - * Note: The first socket init call will call readTraceFile and look for a - * file (TRACE_LEVELS_FILE) to read and set trace levels if any are found. - */ -#define FIRST_FAILURE_MESSAGE_MAX_LEN 250 -typedef struct _VmApiInternalContext { - char serverName[256]; - int pendingWorkunits[10]; - struct _smTrace * smTraceDetails; // Trace and error flags, locations, etc - char userid[9]; // Used for context creation default userID - char IucvUserid[9]; // SMAPI machine UserID. If this field is null, default is VSMREQIU - char useridForAsynchNotification[9]; // This is usually the Linux ID, can be any ID in SMAPI auth file - smMemoryGroupContext * memContext; - char vmapiServerVersion[4]; - int maxServerRpcVersion; - int contextCreatedFlag; // Set to 1 if context has been created - char strFirstFailureMsg[FIRST_FAILURE_MESSAGE_MAX_LEN + 1]; - int firstFailureCaptured; // 0: False - int rc; - int reason; - int printOffset; - int execDepth; - int isBackend; - int checkBackendFlag; - key_t semKey; - int semId; - FILE* logFileP; - FILE* contextFileP; - List inputStream; - List outputStream; - List errorStream; - char path[PATHLENGTH]; // Context path in ZVMMAP_VAR or defaulted - char name[256]; - char emsg[LINESIZE]; - char hostid[20]; - char password[9]; - int instanceId; - char tag[256]; - int resolveHostName; // To be moved to persistant later -} VmApiInternalContext; - -typedef struct _Abbreviation { - char* nameP; - int minimum; -} Abbreviation; - -// Internal data structure to keep minidisk data -typedef struct _Minidisk { - struct _Minidisk* nextP; - int address; - char type[8]; - int location; - int extent; - char volser[8]; - char mode[4]; - int processFlag; -} Minidisk; - -// Internal data structure to keep dedicate data -typedef struct _Dedicate { - struct _Dedicate* nextP; - int vnum; - int rnum; -} Dedicate; - -/** - * Macro: break_if_error(FUNC, CODE, SOCK) - * - * Purpose: After a socket function, this macro will display a msg using - * perror if the function FUNC fails with code CODE. Additionally, - * if the value of the socket SOCK is not -1, the socket will be - * closed. Finally, do the 'break' part, to break out of the - * current loop. - * - * Inputs: FUNC - String to be displayed along with with perror - * CODE - The return code to be tested for failure (< 0) - * SOCK - The socket descriptor to be close if not equal to -1 - */ -#ifndef break_if_error -#define break_if_error(FUNC,CODE,SOCK) { \ - if (CODE < 0) { \ - perror(#FUNC "() failed"); \ - if (SOCK != -1) { \ - close(SOCK); \ - SOCK = -1; \ - } \ - break; }} -#endif - -/** - * Macro: continue_if_error(FUNC, CODE, SOCK) - * - * Purpose: After a socket function, this macro will display a msg using - * perror if the function FUNC fails with code CODE. Additionally, - * if the value of the socket SOCK is not -1, the socket will be - * closed. Finally, do the 'continue' part, to iterate the - * current loop. - * - * Inputs: FUNC - String to be displayed along with with perror - * CODE - The return code to be tested for failure (< 0) - * SOCK - The socket descriptor to be close if not equal to -1 - * - */ -#ifndef continue_if_error -#define continue_if_error(FUNC,CODE,SOCK) { \ - if (CODE < 0) { \ - perror(#FUNC "() failed"); \ - if (SOCK != -1) { \ - close(SOCK); \ - SOCK = -1; \ - } \ - continue; }} -#endif - -/** - * Macro: exit_if_error(FUNC, CODE, SOCK) - * - * Purpose: After a socket function, this macro will display a msg using - * perror if the function FUNC fails with code CODE. Additionally, - * if the value of the socket SOCK is not -1, the socket will be - * closed. Finally, cause the 'return' to happen. - * - * Inputs: FUNC - String to be displayed along with with perror - * CODE - The return code to be tested for failure (< 0) - * SOCK - The socket descriptor to be close if not equal to -1 - */ -#ifndef exit_if_error -#define exit_if_error(FUNC,CODE,SOCK) { \ - if (CODE < 0) { \ - perror(#FUNC "() failed"); \ - if (SOCK != -1) { \ - close(SOCK); \ - SOCK = -1; \ - } \ - return; }} -#endif - -// Macros to retrieve or default argument -#define ARG(x) getArg(x,anArgc,anArgvPP,"") -#define ARG_DEFAULT(x,aDefaultP) getArg(x,anArgc,anArgvPP,aDefaultP) - -// Utility functions -int checkAbbreviation(const char* aStringP, - const Abbreviation* anAbbreviationListP, int anAbbreviationN); - -int checkBoolean(const char* aStringP); - -int checkPrefixCommand(const char* aCommandP); - -int initializeThreadSemaphores(struct _VmApiInternalContext* vmapiContextP, - const char* aContextNameP, int aCreateFlag); - -int createDirectories(const char* aFilenameP); - -void dumpArea(struct _VmApiInternalContext* vmapiContextP, void * pstor, - int len); - -Dedicate* getDedicates(); -Minidisk* getMinidisks(); - -int isOSA(struct _VmApiInternalContext* vmapiContextP, char* rdev); - -void listAppendLine(struct _VmApiInternalContext* vmapiContextP, List* aListP, - const char* aLineP); - -void listAppendRecord(List* aListP, Record* aRecordP); - -void listDeleteCurrent(List* aListP); - -Record* -listDequeueRecord(List* aListP); - -const char* -listNextLine(List* aListP); - -const Record* -listNextRecord(List* aListP); - -void listFree(List* aListP); - -void listReset(List* aListP); - -void readTraceFile(struct _VmApiInternalContext* vmapiContextP); - -void * -smMemoryGroupAlloc(struct _VmApiInternalContext* vmapiContextP, size_t size); - -int smMemoryGroupFreeAll(struct _VmApiInternalContext* vmapiContextP); - -int smMemoryGroupInitialize(struct _VmApiInternalContext* vmapiContextP); - -void * -smMemoryGroupRealloc(struct _VmApiInternalContext* vmapiContextP, void * chunk, - size_t size); - -int smMemoryGroupTerminate(struct _VmApiInternalContext* vmapiContextP); - -char* -strip(char* aLineP, char anOption, char aChar); - -void sysinfo(struct _VmApiInternalContext* vmapiContextP, int anArgc, - const char**anArgvPP); - -int testDigit(char aChar); - -const char* -vmApiMessageText(struct _VmApiInternalContext* vmapiContextP); - -int vmbkendCacheEntryInvalidate(struct _VmApiInternalContext* vmapiContextP, - char *pathP, char *useridP); - -int vmbkendCheck(struct _VmApiInternalContext* vmapiContextP); - -void vmbkendGetCachePath(struct _VmApiInternalContext* vmapiContextP, - char *pathP); - -void *vmbkendMain(void* vmapiContextP); - -int vmbkendRemoveCachedScanFiles(struct _VmApiInternalContext* vmapiContextP, - char *pathP); - -void vmbkendRemoveEntireCache(struct _VmApiInternalContext* vmapiContextP, - char *cachePathP); - -void waitForPendingWorkunits(struct _VmApiInternalContext* vmapiContextP, - int waitIntervalInSeconds); - -int cacheFileValid(struct _VmApiInternalContext* vmapiContextP, - const char* cFName); - -#include "smTraceAndError.h" - -#endif diff --git a/zhcp/BUILD/resource_access/include/smSocket.h b/zhcp/BUILD/resource_access/include/smSocket.h deleted file mode 100644 index 0d1ba7b..0000000 --- a/zhcp/BUILD/resource_access/include/smSocket.h +++ /dev/null @@ -1,16 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _SMSOCKET_H -#define _SMSOCKET_H -#include "smPublic.h" - -int smSocketInitialize(struct _VmApiInternalContext* vmapiContextP, - int * sockId); -int smSocketWrite(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * data, int dataLen); -int smSocketRead(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len); -int smSocketReadLoop(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len); -int smSocketTerminate(struct _VmApiInternalContext* vmapiContextP, int sockId); -#endif diff --git a/zhcp/BUILD/resource_access/include/smTraceAndError.h b/zhcp/BUILD/resource_access/include/smTraceAndError.h deleted file mode 100644 index 8faf779..0000000 --- a/zhcp/BUILD/resource_access/include/smTraceAndError.h +++ /dev/null @@ -1,137 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _SM_TRACE_H -#define _SM_TRACE_H -#include -#include -#include "smPublic.h" - -// Trace levels are to be powers of 2 to allow combinations of tracing -#define TRACE_LEVELS_FILE "vmmaptracing" -#define TRACE_LEVELS_FILE_DIRECTORY "/etc/opt/ibm/zvmmap/.cimvm/" - -// Make sure the level information matches the index in the TRACE_LEVELS and TRACE_FLAG_VALUES array below -#define TRACELEVEL_OFF 0 -#define TRACELEVEL_FLOW 1 -#define TRACELEVEL_PARAMETERS 2 -#define TRACELEVEL_DETAILS 4 -#define TRACELEVEL_BUFFER_OUT 256 // Unit test socket layer -#define TRACELEVEL_BUFFER_IN 512 // Unit test socket layer -#define TRACELEVEL_ALL 0x8FFFFFFF - -// Keywords for the trace file -#define TRACE_LEVELS_COUNT 7 -static const char * TRACE_LEVELS[TRACE_LEVELS_COUNT] = { "off", "flow", - "parms", "details", "buffout", "buffin", "all" }; - -static const unsigned int TRACE_FLAG_VALUES[TRACE_LEVELS_COUNT] = { 0, - TRACELEVEL_FLOW, TRACELEVEL_PARAMETERS, TRACELEVEL_DETAILS, - TRACELEVEL_BUFFER_OUT, TRACELEVEL_BUFFER_IN, TRACELEVEL_ALL }; - -// Trace areas index into trace array -#define TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD 0 -#define TRACEAREA_CIM_OPERATION_LAYER 1 -#define TRACEAREA_RESOURCE_LAYER 2 -#define TRACEAREA_RESOURCE_LAYER_SOCKET 3 -#define TRACEAREA_RESOURCE_LAYER_PARSER 4 -#define TRACEAREA_BACKGROUND_VMEVENT_NOTIFICATION_THREAD 5 -#define TRACEAREA_NAME_VALUE_PARSER 6 -#define TRACEAREA_CACHE 7 -#define TRACEAREA_SMAPI_ONLY 8 - -// Keywords for the trace areas -#define TRACE_AREAS_COUNT 9 -static const char * TRACE_KEYWORDS[TRACE_AREAS_COUNT] = { "directorychanges", - "cimop", "resourcelayer", "socket", "parser", "vmeventchanges", - "namevalueparser", "cache", "smapionly" }; - -typedef struct _smTrace { - unsigned int traceFlags[TRACE_AREAS_COUNT]; // A separate trace int for each area - int traceLock; - int traceFileRead; // 0 = trace file needs to be checked with "readTraceFile(" - unsigned int traceOutputLocation; // 0 = syslog - FILE * traceFilePointer; // 0 = no file open -} smTrace; - -/** - * Trace functions and constants for a line of data or a block of storage - */ - -// errorLog will save the return and reason code in the context and then -// call errorLine. -void errorLog(struct _VmApiInternalContext* vmapiContextP, - const char * functionName, const char * lineNumber, int aRc, - int aReason, const char* aLineP); - -// errorLine will call Logline with the "error" flag and then -// call listAppendLine to add a record to the context error stream -void errorLine(struct _VmApiInternalContext* vmapiContextP, const char* aLineP); - -// These severity contants get remapped to syslog constants in LogLine -#define LOGLINE_DEBUG 'D' -#define LOGLINE_ERR 'E' -#define LOGLINE_INFO 'I' -#define LOGLINE_NOTICE 'N' -#define LOGLINE_WARNING 'W' -#define LOGLINE_EXCEPTION 'X' - -// LogLine will add a timestamp and then write the data to the syslog. -void logLine(struct _VmApiInternalContext* vmapiContextP, char aSeverity, - const char* aLineP); - -void outputLine(struct _VmApiInternalContext* vmapiContextP, - const char* aLineP, int aLogFlag); - -// This macro can be used to test for a trace type being on before -// calling logLine. See logline description below. Follow the logLine -// call with the TRACE_END or TRACE_END_DEBUG to close out the braces -// logline with the LOGLINE_DEBUG will replace the old codes use of debugline. -#define TRACE_START(_context_ , _tracearea_, _tracelevel_) \ - if(((_context_)->smTraceDetails->traceFlags[_tracearea_])&_tracelevel_ ) \ - { - -#define TRACE_END } - -#define TRACE_END_DEBUG(_context_, _linedata_) \ - logLine(_context_, LOGLINE_DEBUG, _linedata_); \ - } - -// This macro can be used to trace entry into a function, -// the function name is supplied by the compiler -#define TRACE_ENTRY_FLOW(_context_ , _tracearea_) \ - TRACE_START(_context_, _tracearea_, TRACELEVEL_FLOW); \ - char _line_[LINESIZE]; \ - sprintf(_line_, \ - "%s function ENTRY (at line %d in %s) \n", \ - __func__, __LINE__, __FILE__); \ - logLine(_context_ ,LOGLINE_DEBUG, _line_); \ - } - -// This macro can be used to trace exit from a function, -// the function name is supplied by the compiler -// The context is expected to be a pointer -#define TRACE_EXIT_FLOW(_context_ , _tracearea_) \ - TRACE_START(_context_, _tracearea_, TRACELEVEL_FLOW); \ - char _line_[LINESIZE]; \ - sprintf(_line_, \ - "%s function EXIT. RC: %d RS: %d (at line %d in %s) \n", \ - __func__, \ - _context_->rc, \ - _context_->reason, __LINE__, __FILE__); \ - logLine(_context_ ,LOGLINE_DEBUG, _line_); \ - } - -// This macro can be used to trace exit from a CIM function where you specify the return code, -// the function name is supplied by the compiler -// The context is expected to be a pointer -#define TRACE_EXIT_CIM_FLOW(_context_ , _tracearea_ , _rc_) \ - TRACE_START(_context_, _tracearea_, TRACELEVEL_FLOW); \ - char _line_[LINESIZE]; \ - sprintf(_line_, \ - "%s function EXIT. RC: %d (at line %d in %s) \n", \ - __func__, \ - _rc_, __LINE__, __FILE__); \ - logLine(_context_ ,LOGLINE_DEBUG, _line_); \ - } - -#endif diff --git a/zhcp/BUILD/resource_access/include/smapiTableParser.h b/zhcp/BUILD/resource_access/include/smapiTableParser.h deleted file mode 100644 index e5b77ea..0000000 --- a/zhcp/BUILD/resource_access/include/smapiTableParser.h +++ /dev/null @@ -1,213 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_PARSER_ROUTINE_H -#define _VMAPI_PARSER_ROUTINE_H - -#include -#include -#include -#include "smPublic.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// This structure typedef is used for the common information returned by -// the SMAPI -typedef struct _commonOutputFields { - int requestId; - int returnCode; - int reasonCode; -} commonOutputFields; - -// This structure is used to handle unknown number of zero terminated data -// returned by the SMAPI. Array notation can be used to subscript the strings. -typedef struct _vmApiCStringInfo { - char * vmapiString; -} vmApiCStringInfo; - -/** - * Parser table general layout: - * Columns are: Type, min, max, output structure unique index number, nesting level, - * offset in output structure (or size of output structure) - * - * Min and max only apply to string length items, and arrays - * - * NOTE: - * Each type has the following requirements: - * - * APITYPE_BASE_STRUCT_LEN Column 4 must be STRUCT_INDX_0, column 6 is size of structure - * APITYPE_INTn Column 4 must have the structure index, column 6 contains the offset to store this value into - * APITYPE_STRING_LEN Column 2 must have the minimum string length, column 3 must have the maximum length or -1 if no max - * Column 4 must have the structure index, column 6 contains the offset to store this string into - * If a single zero terminated string is returned in the buffer; then use - * APITYPE_C_STR_PTR Column 2 must have the minimum string length, column 3 must have the maximum length or -1 if no max - * Column 4 must have the structure index, column 6 contains the offset to store this string into - * - * APITYPE_CHARBUF_LEN Column 2 must have the minimum charaters length, column 3 must have the maximum length or -1 if no max - * Column 4 must have the structure index, column 6 contains the offset to store this charater buffer pointer into - * APITYPE_CHARBUF_COUNT Column 4 must have the structure index, column 6 contains the offset to store the count into - * (CHARBUF_LEN must have a ..COUNT as the next table entry) - * - * APITYPE_ARRAY_LEN Column 4 must have the structure index, column 6 contains the offset to - * store the pointer to first array element at. - * APITYPE_ARRAY_STRUCT_COUNT Column 4 must have the structure index, column 6 contains the offset to store the count into - * APITYPE_STRUCT_LEN or APITYPE_NOBUFFER_STRUCT_LEN - * Column 5 must have the size of the output structure - * (ARRAY must have STRUCT following; STRUCT_COUNT must have a ..LEN as the next table entry) - * APITYPE_NOBUFFER_STRUCT_LEN is used when the SMAPI buffer does not have a structure size - * after the array size in the returned data. (The data is an array of strings vs array of structures) - * - * When the SMAPI buffer has many zero terminated strings as output: (use the next 4 types in that order) - * The vmApiCStringInfo structure can be used to hold each string. - * APITYPE_C_STR_ARRAY_PTR Column 4 must have the parent structure index, column 6 contains - * the offset to store the pointer to first string in the array at. - * APITYPE_C_STR_ARRAY_COUNT Column 4 must have the structure index which hold the count field, column 6 contains the offset to store the count into - * APITYPE_C_STR_STRUCT_LEN Column 5 must have the size of the output structure (vmApiCStringInfo) - * APITYPE_C_STR_PTR Column 5 must have the offset in the C string structure of the char * - * - * APITYPE_END_OF_TABLE Must be used to end the table - * - * Note: use CHARBUF for strings that can contain nulls (CHARNA in zVM API data types) - * - * Ex: - * static tableLayout Imalge_Activate_Layout = - * { - * {APITYPE_BASE_STRUCT_LEN, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,sizeof(VmApiImageActivateOutput) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,common.requestId) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,common.returnCode)}, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,common.reasonCode)}, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,activated) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,notActivated) }, - * - * {APITYPE_ARRAY_LEN, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,failList) }, - * {APITYPE_ARRAY_STRUCT_COUNT,4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,failingArrayCount)}, - * {APITYPE_STRUCT_LEN, 4,4,STRUCT_INDX_1,NEST_LEVEL_1,sizeof(VmApiImageFailing) }, - * {APITYPE_STRING_LEN, 1,8,STRUCT_INDX_1,NEST_LEVEL_1,offsetof(VmApiImageFailing,imageName) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_1,NEST_LEVEL_1,offsetof(VmApiImageFailing,returnCode) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_1,NEST_LEVEL_1,offsetof(VmApiImageFailing,reasonCode) }, - * {APITYPE_END_OF_TABLE,0,0,0,0} - * }; - */ -#define APITYPE_END_OF_TABLE 0 -#define APITYPE_INT1 1 -#define APITYPE_INT4 2 -#define APITYPE_INT8 3 - -#define APITYPE_STRING_LEN 20 -#define APITYPE_ARRAY_LEN 21 -#define APITYPE_ARRAY_STRUCT_COUNT 22 -#define APITYPE_STRUCT_LEN 23 -#define APITYPE_NOBUFFER_STRUCT_LEN 24 -#define APITYPE_CHARBUF_LEN 25 -#define APITYPE_CHARBUF_COUNT 26 -#define APITYPE_C_STR_ARRAY_PTR 30 -#define APITYPE_C_STR_ARRAY_COUNT 31 -#define APITYPE_C_STR_STRUCT_LEN 32 -#define APITYPE_C_STR_PTR 33 -#define APITYPE_BASE_STRUCT_LEN 98 - -#define STRUCT_INDX_0 0 -#define STRUCT_INDX_1 1 -#define STRUCT_INDX_2 2 -#define STRUCT_INDX_3 3 -#define STRUCT_INDX_4 4 -#define STRUCT_INDX_5 5 -#define STRUCT_INDX_6 6 -#define STRUCT_INDX_7 7 -#define STRUCT_INDX_8 8 -#define STRUCT_INDX_9 9 -#define STRUCT_INDX_10 10 - -#define NEST_LEVEL_0 0 -#define NEST_LEVEL_1 1 -#define NEST_LEVEL_2 2 -#define NEST_LEVEL_3 3 - -#define MAX_STRUCT_ARRAYS 10 - -#define COL_1_TYPE 0 -#define COL_2_MINSIZE 1 -#define COL_3_MAXSIZE 2 -#define COL_4_STRUCT_INDEX 3 -#define COL_5_NEST_LEVEL 4 -#define COL_6_SIZE_OR_OFFSET 5 - -enum tableParserModes { - scan, populate -}; - -typedef int tableLayout[][6]; - -/** - * Input/output structure for use by smapiTableParser parseBufferWithTable() - * - * - smapiBufferCursor must be set to the start of the SMAPI data - * - dataBufferSize must be set to the total size of the SMAPI data - * - byteCount is used by parseBufferWithTable as a work variable - * - outStringByteCount will be set in "scan" mode to the number of bytes needed for all the - * strings found in the SMAPI data - * - outStructCount array will be set in "scan" mode to the number of structures found at each - * level - * - outStructSizes array will be set in "scan" mode to the size of 1 structure - * - inStructAddrs array must be set in "populate" mode to the starting address of the first - * structure at each level - * - inStringCursor must be set in "populate" mode to the start of the storage block for use in - * string allocation. - */ -typedef struct _tableParserParms { - char * smapiBufferCursor; // Input for SCAN and POPULATE. Initially set to output buffer. - int dataBufferSize; // Input for SCAN and POPULATE, size of SMAPI output buffer - int byteCount; // Bytes processed from SMAPI returned data buffer - int outStringByteCount; // Output parm from SCAN - int outStructCount[MAX_STRUCT_ARRAYS]; // Output parm from SCAN - int outStructSizes[MAX_STRUCT_ARRAYS]; // Output parm from SCAN - void * inStructAddrs[MAX_STRUCT_ARRAYS];// Input parm for POPULATE - char * inStringCursor; // Input string block pointer for POPULATE -} tableParserParms; - -#define PARSER_ERROR_INVALID_TABLE -4002 -#define PARSER_ERROR_INVALID_STRING_SIZE -4003 - -#define ntohll(x) (((unsigned long long)(ntohl((int)((x << 32) >> 32))) << 32) | (unsigned int)ntohl(((int)(x >> 32)))) -#define htonll(x) ntohll(x) - -#define PUT_INT(_inInt_,_outBuf_) \ - ({ int _int; \ - _int = htonl(_inInt_) ; \ - memcpy(_outBuf_, &_int, 4); \ - _outBuf_ += 4; \ - }) - -#define GET_INT(_outInt_,_inBuf_) \ - ({ int _int; \ - memcpy(&_int, _inBuf_, 4); \ - _outInt_ = ntohl(_int) ; \ - _inBuf_ += 4; \ - }) - -#define PUT_64INT(_in64Int_,_outBuf_) \ - ({ long long _64int; \ - _64int = htonll(_in64Int_) ; \ - memcpy(_outBuf_, &_64int, 8); \ - _outBuf_ += 8; \ - }) - -#define GET_64INT(_out64Int_,_inBuf_) \ - ({ long long _64int; \ - memcpy(&_64int, _inBuf_, 8); \ - _out64Int_ = ntohll(_64int) ; \ - _inBuf_ += 8; \ - }) - -int parseBufferWithTable(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, tableLayout table, tableParserParms *parms); - -int getAndParseSmapiBuffer(struct _VmApiInternalContext* vmapiContextP, - char * * inputBufferPointerPointer, int inputBufferSize, - tableLayout parserTable, char * parserTableName, char * * outData); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiAsynchronous.h b/zhcp/BUILD/resource_access/include/vmapiAsynchronous.h deleted file mode 100644 index 937c6b4..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiAsynchronous.h +++ /dev/null @@ -1,129 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_ASYNCHRONOUS_H -#define _VMAPI_ASYNCHRONOUS_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Asynchronous_Notification_Disable_DM -typedef commonOutputFields vmApiAsynchronousNotificationDisableDmOutput; - -// Parser table for Asynchronous_Notification_Disable_DM -static tableLayout Asynchronous_Notification_Disable_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAsynchronousNotificationDisableDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationDisableDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationDisableDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationDisableDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAsynchronous_Notification_Disable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationDisableDmOutput ** outData); - -// Asynchronous_Notification_Enable_DM -typedef commonOutputFields vmApiAsynchronousNotificationEnableDmOutput; - -// Parser table for Asynchronous_Notification_Enable_DM -static tableLayout Asynchronous_Notification_Enable_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAsynchronousNotificationEnableDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationEnableDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationEnableDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationEnableDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAsynchronous_Notification_Enable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char subscription_type, char communication_type, - int port_number, char * ip_address, char encoding, - int subscriber_data_length, char * subscriber_data, - vmApiAsynchronousNotificationEnableDmOutput ** outData); - -// Asynchronous_Notification_Query_DM -typedef struct _vmApiNotification { // Common structure used by Asynchronous_Notification_Query - char * userid; - char subscriptionType; - char communicationType; - int portNumber; - char * ipAddress; - char encoding; - int subscriberDataLength; - char * subscriberData; -} vmApiNotification; - -typedef struct _vmApiAsynchronousNotificationQueryDmOutput { - commonOutputFields common; - int notificationCount; - vmApiNotification * notificationList; -} vmApiAsynchronousNotificationQueryDmOutput; - -// Parser table for Asynchronous_Notification_Query_DM -static tableLayout - Asynchronous_Notification_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAsynchronousNotificationQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiAsynchronousNotificationQueryDmOutput, - notificationList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - notificationCount) }, { APITYPE_STRUCT_LEN, 4, - 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiNotification) }, { APITYPE_STRING_LEN, 4, - 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNotification, userid) }, { APITYPE_INT1, - 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNotification, subscriptionType) }, { - APITYPE_INT1, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, communicationType) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, portNumber) }, { - APITYPE_STRING_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, ipAddress) }, { - APITYPE_INT1, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, encoding) }, { - APITYPE_CHARBUF_LEN, 0, 64, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiNotification, - subscriberData) }, { APITYPE_CHARBUF_COUNT, 0, - 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNotification, subscriberDataLength) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAsynchronous_Notification_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationQueryDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiAuthorization.h b/zhcp/BUILD/resource_access/include/vmapiAuthorization.h deleted file mode 100644 index 9ed6bcc..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiAuthorization.h +++ /dev/null @@ -1,106 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_AUTHORIZATION_H -#define _VMAPI_AUTHORIZATION_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Authorization_List_Add -typedef commonOutputFields vmApiAuthorizationListAddOutput; - -// Parser table for Authorization_List_Add -static tableLayout Authorization_List_Add_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAuthorizationListAddOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiAuthorizationListAddOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiAuthorizationListAddOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListAddOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAuthorization_List_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListAddOutput ** outData); - -// Authorization_List_Query -typedef struct _vmApiAuthorizationRecord { // Common structure used by Authorization_List_Query - char * requestingUserid; - char requestingListIndicator; - char * forUserid; - char forListIndicator; - char * functionName; - char functionListIndicator; -} vmApiAuthorizationRecord; - -typedef struct _vmApiAuthorizationListQueryOutput { - commonOutputFields common; - int authorizationRecordCount; - vmApiAuthorizationRecord * authorizationRecordList; -} vmApiAuthorizationListQueryOutput; - -// Parser table for Authorization_List_Query -static tableLayout Authorization_List_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAuthorizationListQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, authorizationRecordList) }, - { APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiAuthorizationListQueryOutput, - authorizationRecordCount) }, { APITYPE_STRUCT_LEN, 4, - 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiAuthorizationRecord) }, { APITYPE_STRING_LEN, 1, - 64, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, requestingUserid) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, requestingListIndicator) }, { - APITYPE_STRING_LEN, 1, 64, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiAuthorizationRecord, forUserid) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, forListIndicator) }, { - APITYPE_STRING_LEN, 1, 64, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiAuthorizationRecord, functionName) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, functionListIndicator) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAuthorization_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListQueryOutput ** outData); - -// Authorization_List_Remove -typedef commonOutputFields vmApiAuthorizationListRemoveOutput; - -// Parser table for Authorization_List_Remove -static tableLayout Authorization_List_Remove_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAuthorizationListRemoveOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListRemoveOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListRemoveOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListRemoveOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAuthorization_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListRemoveOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiCheckAuthentication.h b/zhcp/BUILD/resource_access/include/vmapiCheckAuthentication.h deleted file mode 100644 index 09c6439..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiCheckAuthentication.h +++ /dev/null @@ -1,34 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_CHECK_AUTHENTICATION_H -#define _VMAPI_CHECK_AUTHENTICATION_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Check_Authentication -typedef commonOutputFields vmApiCheckAuthenticationOutput; - -// Parser table for Check_Authentication -static tableLayout Check_Authentication_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiCheckAuthenticationOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiCheckAuthenticationOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiCheckAuthenticationOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiCheckAuthenticationOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smCheck_Authentication(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - vmApiCheckAuthenticationOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiDirectoryManager.h b/zhcp/BUILD/resource_access/include/vmapiDirectoryManager.h deleted file mode 100644 index 791153c..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiDirectoryManager.h +++ /dev/null @@ -1,172 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_DIRECTORY_MANAGER_H -#define _VMAPI_DIRECTORY_MANAGER_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Directory_Manager_Local_Tag_Define_DM -typedef commonOutputFields vmApiDirectoryManagerLocalTagDefineDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Define_DM -static tableLayout Directory_Manager_Local_Tag_Define_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagDefineDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDefineDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Local_Tag_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_ordinal, char createOrChange, - vmApiDirectoryManagerLocalTagDefineDmOutput ** outData); - -// Directory_Manager_Local_Tag_Delete_DM -typedef commonOutputFields vmApiDirectoryManagerLocalTagDeleteDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Delete_DM -static tableLayout Directory_Manager_Local_Tag_Delete_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagDeleteDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDeleteDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int - smDirectory_Manager_Local_Tag_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, - vmApiDirectoryManagerLocalTagDeleteDmOutput ** outData); - -// Directory_Manager_Local_Tag_Query_DM -typedef struct _vmApiDirectoryManagerLocalTagQueryDmOutput { - commonOutputFields common; - int tagValueLength; - char * tagValue; -} vmApiDirectoryManagerLocalTagQueryDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Query_DM -static tableLayout - Directory_Manager_Local_Tag_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - common.reasonCode) }, - { APITYPE_CHARBUF_LEN, 1, 240, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiDirectoryManagerLocalTagQueryDmOutput, - tagValue) }, { APITYPE_CHARBUF_COUNT, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - tagValueLength) }, { APITYPE_END_OF_TABLE, 0, - 0, 0, 0 } }; -int smDirectory_Manager_Local_Tag_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, vmApiDirectoryManagerLocalTagQueryDmOutput ** outData); - -// Directory_Manager_Local_Tag_Set_DM -typedef commonOutputFields vmApiDirectoryManagerLocalTagSetDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Set_DM -static tableLayout Directory_Manager_Local_Tag_Set_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagSetDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagSetDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagSetDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagSetDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Local_Tag_Set_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_value_length, char * tag_value, - vmApiDirectoryManagerLocalTagSetDmOutput ** outData); - -// Directory_Manager_Search_DM -typedef struct _vmApiDirectoryManagerStatement { // Common structure used by Directory_Manager_Search - char * targetId; - int statementLength; - char * statement; -} vmApiDirectoryManagerStatement; - -typedef struct _vmApiDirectoryManagerSearchDmOutput { - commonOutputFields common; - int statementCount; - vmApiDirectoryManagerStatement * statementList; -} vmApiDirectoryManagerSearchDmOutput; - -// Parser table for Directory_Manager_Search_DM -static tableLayout Directory_Manager_Search_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerSearchDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, statementList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiDirectoryManagerSearchDmOutput, statementCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiDirectoryManagerStatement) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiDirectoryManagerStatement, - targetId) }, { APITYPE_CHARBUF_LEN, 1, 72, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiDirectoryManagerStatement, statement) }, { - APITYPE_CHARBUF_COUNT, 0, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiDirectoryManagerStatement, statementLength) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Search_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int search_pattern_length, - char * search_pattern, vmApiDirectoryManagerSearchDmOutput ** outData); - -// Directory_Manager_Task_Cancel_DM -typedef commonOutputFields vmApiDirectoryManagerTaskCancelDmOutput; - -// Parser table for Directory_Manager_Task_Cancel_DM -static tableLayout Directory_Manager_Task_Cancel_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerTaskCancelDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerTaskCancelDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerTaskCancelDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerTaskCancelDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Task_Cancel_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operation_id, vmApiDirectoryManagerTaskCancelDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiImage.h b/zhcp/BUILD/resource_access/include/vmapiImage.h deleted file mode 100644 index 0d4fef5..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiImage.h +++ /dev/null @@ -1,1252 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_IMAGE_H -#define _VMAPI_IMAGE_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Image_Activate -typedef struct _vmApiImageFailing { // Common structure for Image_Activate, Image_Deactivate, Image_Recycle - char * imageName; - int returnCode; - int reasonCode; -} vmApiImageFailing; - -typedef struct _vmApiImageActivate { - commonOutputFields common; - int activated; - int notActivated; - int failingArrayCount; - vmApiImageFailing * failList; -} vmApiImageActivateOutput; - -int smImage_Activate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageActivateOutput ** outData); - -// Parser table for Image_Activate -static tableLayout Image_Activate_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageActivateOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActivateOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageActivateOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageActivateOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActivateOutput, activated) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageActivateOutput, - notActivated) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActivateOutput, failList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActivateOutput, failingArrayCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageFailing) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageFailing, - imageName) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiImageFailing, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_Active_Configuration_Query -typedef struct _vmApiImageCpuInfo // This struct is shared with Image CPU query also -{ - int cpuNumber; // Or address - char * cpuId; - char cpuBase; // Only supplied for Image_CPU_Query - char cpuStatus; - char cpuType; // Only supplied for Image_CPU_Query -} vmApiImageCpuInfo; - -typedef struct _vmApiImageDeviceInfo { - char deviceType; - char * deviceAddress; -} vmApiImageDeviceInfo; - -typedef struct _vmApiImageActiveConfigurationQuery { - commonOutputFields common; - int memorySize; - char memoryUnit; - char shareType; - char * shareValue; - int numberOfCpus; - int cpuInfoCount; - vmApiImageCpuInfo * cpuList; - int deviceCount; - vmApiImageDeviceInfo * deviceList; -} vmApiImageActiveConfigurationQueryOutput; - -int smImage_Active_Configuration_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageActiveConfigurationQueryOutput ** outData); - -// Parser table for Image_Active_Configuration_Query -static tableLayout - Image_Active_Configuration_Query_Layout = { - { APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageActiveConfigurationQueryOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - common.requestId) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - common.returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, memorySize) }, - { APITYPE_INT1, 1, 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, memoryUnit) }, - { APITYPE_INT1, 1, 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, shareType) }, - { APITYPE_STRING_LEN, 1, 5, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActiveConfigurationQueryOutput, - shareValue) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - numberOfCpus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActiveConfigurationQueryOutput, - cpuList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - cpuInfoCount) }, - { APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageCpuInfo) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuNumber) }, { - APITYPE_STRING_LEN, 1, 16, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiImageCpuInfo, cpuId) }, { APITYPE_INT1, - 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActiveConfigurationQueryOutput, - deviceList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - deviceCount) }, { APITYPE_STRUCT_LEN, 4, 4, - STRUCT_INDX_2, NEST_LEVEL_1, - sizeof(vmApiImageDeviceInfo) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_2, NEST_LEVEL_1, offsetof( - vmApiImageDeviceInfo, deviceType) }, { - APITYPE_STRING_LEN, 4, 16, STRUCT_INDX_2, NEST_LEVEL_1, - offsetof(vmApiImageDeviceInfo, deviceAddress) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_CPU_Define -typedef commonOutputFields vmApiImageCpuDefineOutput; - -// Parser table for Image_CPU_Define -static tableLayout Image_CPU_Define_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDefineOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuDefineOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuDefineOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Define(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char cpuType, - vmApiImageCpuDefineOutput ** outData); - -// Image_CPU_Define_DM -typedef commonOutputFields vmApiImageCpuDefineDmOutput; - -// Parser table for Image_CPU_Define_DM -static tableLayout Image_CPU_Define_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDefineDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char baseCpu, char * cpuId, - char dedicateCpu, char cryptoCpu, - vmApiImageCpuDefineDmOutput ** outData); - -// Image_CPU_Delete -typedef commonOutputFields vmApiImageCpuDeleteOutput; - -// Parser table for Image_CPU_Delete -static tableLayout Image_CPU_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDeleteOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuDeleteOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteOutput ** outData); - -// Image_CPU_Delete_DM -typedef commonOutputFields vmApiImageCpuDeleteDmOutput; - -// Parser table for Image_CPU_Delete_DM -static tableLayout Image_CPU_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDeleteDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteDmOutput ** outData); - -// Image_CPU_Query -typedef struct _vmApiImageCpuQuery { - commonOutputFields common; - int numberOfCpus; - int cpuInfoCount; - vmApiImageCpuInfo * cpuList; -} vmApiImageCpuQueryOutput; - -int smImage_CPU_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageCpuQueryOutput ** outData); - -// Parser table for Image_CPU_Query -static tableLayout Image_CPU_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuQueryOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryOutput, numberOfCpus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryOutput, cpuList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageCpuQueryOutput, cpuInfoCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageCpuInfo) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageCpuInfo, - cpuNumber) }, - { APITYPE_STRING_LEN, 1, 16, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuId) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageCpuInfo, - cpuBase) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiImageCpuInfo, cpuStatus) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuType) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_CPU_Query_DM -typedef struct _vmApiImageCpuQueryDm { - commonOutputFields common; - char * cpuAddress; - char baseCpu; - char * cpuId; - char cpuDedicate; - char cpuCrypto; -} vmApiImageCpuQueryDmOutput; - -int smImage_CPU_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuQueryDmOutput ** outData); - -// Parser table for Image_CPU_Query_DM -static tableLayout Image_CPU_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, common.reasonCode) }, { - APITYPE_STRING_LEN, 1, 2, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, cpuAddress) }, { APITYPE_INT1, 1, - 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuQueryDmOutput, - baseCpu) }, { APITYPE_STRING_LEN, 0, 6, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuQueryDmOutput, cpuId) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, cpuDedicate) }, { APITYPE_INT1, 1, - 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuQueryDmOutput, - cpuCrypto) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_CPU_Set_Maximum_DM -typedef commonOutputFields vmApiImageCpuSetMaximumDmOutput; - -// Parser table for Image_CPU_Set_Maximum_DM -static tableLayout Image_CPU_Set_Maximum_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageCpuSetMaximumDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuSetMaximumDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuSetMaximumDmOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuSetMaximumDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Set_Maximum_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int maxCpus, - vmApiImageCpuSetMaximumDmOutput ** outData); - -// Image_Create_DM -typedef struct _vmApiImageRecord { // Common structure used by Image_Create_Dm and Image_Query_DM and Image_Replace_DM - int imageRecordLength; - char * imageRecord; -} vmApiImageRecord; - -typedef struct _vmApiImageCreateDm { - commonOutputFields common; - int operationId; -} vmApiImageCreateDmOutput; - -// Parser table for Image_Create_DM -static tableLayout Image_Create_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCreateDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCreateDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCreateDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCreateDmOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCreateDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int - smImage_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * prototypeName, - int initialPasswordLength, char * initialPassword, - char * initialAccountNumber, int imageRecordCount, - vmApiImageRecord * imageRecordList, - vmApiImageCreateDmOutput ** outData); - -// Image_Deactivate -typedef struct _vmApiImageDeactivate { - commonOutputFields common; - int deactivated; - int notDeactivated; - int failingArrayCount; - vmApiImageFailing * failList; // Reuse structure from Image_Activate -} vmApiImageDeactivateOutput; - -// Parser table for Image_Deactivate -static tableLayout Image_Deactivate_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDeactivateOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, deactivated) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeactivateOutput, - notDeactivated) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, failList) }, { APITYPE_ARRAY_STRUCT_COUNT, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeactivateOutput, - failingArrayCount) }, { APITYPE_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiImageFailing) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, imageName) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageFailing, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, reasonCode) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smImage_Deactivate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * forceTimeLength, - vmApiImageDeactivateOutput ** outData); - -// Image_Delete_DM -typedef struct _vmApiImageDeleteDm { - commonOutputFields common; - int operationId; -} vmApiImageDeleteDmOutput; - -// Parser table for Image_Delete_DM -static tableLayout Image_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDeleteDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeleteDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeleteDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeleteDmOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeleteDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dataSecurityErase, - vmApiImageDeleteDmOutput ** outData); - -// Image_Device_Dedicate -typedef commonOutputFields vmApiImageDeviceDedicateOutput; - -// Parser table for Image_Device_Dedicate -static tableLayout Image_Device_Dedicate_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceDedicateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceDedicateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smImage_Device_Dedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateOutput ** outData); - -// Image_Device_Dedicate_DM -typedef commonOutputFields vmApiImageDeviceDedicateDmOutput; - -// Parser table for Image_Device_Dedicate_DM -static tableLayout Image_Device_Dedicate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceDedicateDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateDmOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceDedicateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Dedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateDmOutput ** outData); - -// Image_Device_Reset -typedef commonOutputFields vmApiImageDeviceResetOutput; - -// Parser table for Image_Device_Reset -static tableLayout Image_Device_Reset_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDeviceResetOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceResetOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceResetOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceResetOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Reset(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceResetOutput ** outData); - -// Image_Device_Undedicate -typedef commonOutputFields vmApiImageDeviceUndedicateOutput; - -// Parser table for Image_Device_Undedicate -static tableLayout Image_Device_Undedicate_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceUndedicateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeviceUndedicateOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeviceUndedicateOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Undedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateOutput ** outData); - -// Image_Device_Undedicate_DM -typedef commonOutputFields vmApiImageDeviceUndedicateDmOutput; - -// Parser table for Image_Device_Undedicate_DM -static tableLayout Image_Device_Undedicate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceUndedicateDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Undedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateDmOutput ** outData); - -// Image_Disk_Copy -typedef commonOutputFields vmApiImageDiskCopyOutput; - -// Parser table for Image_Disk_Copy -static tableLayout Image_Disk_Copy_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskCopyOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskCopyOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskCopyOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Copy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskCopyOutput ** outData); - -// Image_Disk_Copy_DM -typedef struct _vmApiImageDiskCopyDm { - commonOutputFields common; - int operationId; -} vmApiImageDiskCopyDmOutput; - -// Parser table for Image_Disk_Copy_DM -static tableLayout Image_Disk_Copy_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskCopyDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Copy_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * sourceImageName, char * sourceImageDiskNumber, - char * imageDiskAllocationType, char * allocationAreaName, - char * imageDiskMode, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCopyDmOutput ** outData); - -// Image_Disk_Create -typedef commonOutputFields vmApiImageDiskCreateOutput; - -// Parser table for Image_Disk_Create -static tableLayout Image_Disk_Create_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskCreateOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskCreateOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, char * imageDiskMode, - vmApiImageDiskCreateOutput ** outData); - -// Image_Disk_Create_DM -typedef struct _vmApiImageDiskCreateDm { - commonOutputFields common; - int operationId; -} vmApiImageDiskCreateDmOutput; - -// Parser table for Image_Disk_Create_DM -static tableLayout Image_Disk_Create_DM_Layout = { - { APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDiskCreateDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * imageDiskDeviceType, char * imageDiskAllocationType, - char * allocationAreaNameOrVolser, char allocationUnitSize, - int imageDiskSize, char * imageDiskMode, char imageDiskFormatting, - char * imageDiskLabel, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCreateDmOutput ** outData); - -// Image_Disk_Delete -typedef commonOutputFields vmApiImageDiskDeleteOutput; - -// Parser table for Image_Disk_Delete -static tableLayout Image_Disk_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskDeleteOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskDeleteOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskDeleteOutput ** outData); - -// Image_Disk_Delete_DM -typedef struct _vmApiImageDiskDeleteDm { - commonOutputFields common; - int operationId; -} vmApiImageDiskDeleteDmOutput; - -// Parser table for Image_Disk_Delete_DM -static tableLayout Image_Disk_Delete_DM_Layout = { - { APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDiskDeleteDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char dataSecurityErase, vmApiImageDiskDeleteDmOutput ** outData); - -// Image_Disk_Share -typedef commonOutputFields vmApiImageDiskShareOutput; - -// Parser table for Image_Disk_Share -static tableLayout Image_Disk_Share_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskShareOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskShareOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskShareOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Share(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareOutput ** outData); - -// Image_Disk_Share_DM -typedef commonOutputFields vmApiImageDiskShareDmOutput; - -// Parser table for Image_Disk_Share_DM -static tableLayout Image_Disk_Share_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskShareDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Share_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareDmOutput ** outData); - -// Image_Disk_Unshare -typedef commonOutputFields vmApiImageDiskUnshareOutput; - -// Parser table for Image_Disk_Unshare -static tableLayout Image_Disk_Unshare_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskUnshareOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Unshare(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskUnshareOutput ** outData); - -// Image_Disk_Unshare_DM -typedef commonOutputFields vmApiImageDiskUnshareDmOutput; - -// Parser table for Image_Disk_Unshare_DM -static tableLayout Image_Disk_Unshare_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDiskUnshareDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskUnshareDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskUnshareDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Unshare_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - vmApiImageDiskUnshareDmOutput ** outData); - -// Image_IPL_Delete_DM -typedef commonOutputFields vmApiImageIplDeleteDmOutput; - -// Parser table for IMAGE_IPL_Delete_DM -static tableLayout Image_IPL_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageIplDeleteDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplDeleteDmOutput ** outData); - -// Image_IPL_Device_Query -typedef struct _vmApiImageIplDeviceQueryOutput { - commonOutputFields common; - char * iplDevice; -} vmApiImageIplDeviceQueryOutput; - -// Parser table for Image_IPL_Device_Query -static tableLayout Image_IPL_Device_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageIplDeviceQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, - common.reasonCode) }, { APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, iplDevice) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Device_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, vmApiImageIplDeviceQueryOutput ** outData); - -// Image_IPL_Query_DM -typedef struct _vmApiImageIplQueryDm { - commonOutputFields common; - char * savedSystem; - char * loadParameter; - char * parameters; -} vmApiImageIplQueryDmOutput; - -// Parser table for Image_IPL_Query_DM -static tableLayout Image_IPL_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageIplQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, common.reasonCode) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, savedSystem) }, { - APITYPE_STRING_LEN, 0, 10, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, loadParameter) }, { - APITYPE_STRING_LEN, 0, 64, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, parameters) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplQueryDmOutput ** outData); - -// Image_IPL_Set_DM -typedef commonOutputFields vmApiImageIplSetDmOutput; - -// Parser table for Image_IPL_Set_DM -static tableLayout Image_IPL_Set_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageIplSetDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplSetDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageIplSetDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplSetDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * savedSystem, char * loadParameter, - char * parameterString, vmApiImageIplSetDmOutput ** outData); - -// Image_Lock_DM -typedef commonOutputFields vmApiImageLockDmOutput; - -// Parser table for Image_Lock_DM -static tableLayout Image_Lock_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageLockDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageLockDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageLockDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageLockDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Lock_DM(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * deviceAddress, vmApiImageLockDmOutput ** outData); - -// Image_Name_Query_DM -typedef struct _vmApiImageName { // Common structure used by Image_Status_Query - char * imageName; -} vmApiImageName; - -typedef struct _vmApiImageNameQueryDm { - commonOutputFields common; - int nameCount; - vmApiImageName * nameList; -} vmApiImageNameQueryDmOutput; - -// Parser table for Image_Name_Query_DM -static tableLayout Image_Name_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageNameQueryDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, nameList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageNameQueryDmOutput, nameCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageName) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiImageName, imageName) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageNameQueryDmOutput ** outData); - -// Image_Password_Set_DM -typedef commonOutputFields vmApiImagePasswordSetDmOutput; - -// Parser table for Image_Password_Set_DM -static tableLayout Image_Password_Set_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImagePasswordSetDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImagePasswordSetDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImagePasswordSetDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImagePasswordSetDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Password_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imagePasswordLength, char * imagePassword, - vmApiImagePasswordSetDmOutput ** outData); - -// Image_Query_Activate_Time -typedef struct _vmApiImageQueryActivateTime { - commonOutputFields common; - char * imageName; - char * activationDate; - char * activationTime; -} vmApiImageQueryActivateTimeOutput; - -// Parser table for Image_Query_Activate_Time -static tableLayout Image_Query_Activate_Time_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageQueryActivateTimeOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, common.reasonCode) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, imageName) }, { - APITYPE_STRING_LEN, 8, 10, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, activationDate) }, { - APITYPE_STRING_LEN, 8, 8, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, activationTime) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Query_Activate_Time(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dateFormat, - vmApiImageQueryActivateTimeOutput ** outData); - -// Image_Query_DM -typedef struct _vmApiImageQueryDm { - commonOutputFields common; - int imageRecordCount; - vmApiImageRecord * imageRecordList; -} vmApiImageQueryDmOutput; - -// Parser table for Image_Activate -static tableLayout Image_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryDmOutput, imageRecordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageQueryDmOutput, imageRecordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageRecord) }, { APITYPE_CHARBUF_LEN, 1, 80, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageRecord, imageRecord) }, - { APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageRecord, imageRecordLength) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageQueryDmOutput ** outData, - bool readFromCache); - -// Image_Recycle -typedef struct _vmApiImageRecycle { - commonOutputFields common; - int recycled; - int notRecycled; - int failingArrayCount; - vmApiImageFailing * failList; -} vmApiImageRecycleOutput; - -// Parser table for Image_Recycle -static tableLayout Image_Recycle_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageRecycleOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageRecycleOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageRecycleOutput, recycled) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, - notRecycled) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageRecycleOutput, failList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, - failingArrayCount) }, { APITYPE_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiImageFailing) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, imageName) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageFailing, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, reasonCode) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smImage_Recycle(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageRecycleOutput ** outData); - -// Image_Replace_DM -typedef commonOutputFields vmApiImageReplaceDmOutput; - -// Parser table for Image_Replace_DM -static tableLayout Image_Replace_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageReplaceDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageReplaceDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageReplaceDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageReplaceDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imageRecordArrayCount, - vmApiImageRecord * imageRecordList, - vmApiImageReplaceDmOutput ** outData); - -// Image_SCSI_Characteristics_Define_DM -typedef commonOutputFields vmApiImageScsiCharacteristicsDefineDmOutput; - -// Parser table for Image_SCSI_Characteristics_Define_DM -static tableLayout Image_SCSI_Characteristics_Define_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageScsiCharacteristicsDefineDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsDefineDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_SCSI_Characteristics_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * bootProgram, char * brLba, char * lun, char * portName, - char scpDatatype, int scpDataLength, char * scpData, - vmApiImageScsiCharacteristicsDefineDmOutput ** outData); - -// Image_SCSI_Characteristics_Query_DM -typedef struct _vmApiImageScsiCharacteristicsQueryDm { - commonOutputFields common; - char * bootProgramNumber; - char * br_LBA; - char * lun; - char * port; - char * scpData; - int scpDataLength; -} vmApiImageScsiCharacteristicsQueryDmOutput; - -// Parser table for Image_SCSI_Characteristics_Query_DM -static tableLayout - Image_SCSI_Characteristics_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageScsiCharacteristicsQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - common.reasonCode) }, { APITYPE_STRING_LEN, 0, 6, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - bootProgramNumber) }, { APITYPE_STRING_LEN, 0, 16, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, br_LBA) }, - { APITYPE_STRING_LEN, 0, 16, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageScsiCharacteristicsQueryDmOutput, - lun) }, { APITYPE_STRING_LEN, 0, 16, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - port) }, { APITYPE_CHARBUF_LEN, 0, 4102, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - scpData) }, { APITYPE_CHARBUF_COUNT, 0, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - scpDataLength) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smImage_SCSI_Characteristics_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageScsiCharacteristicsQueryDmOutput ** outData); - -// Image_Status_Query -typedef struct _vmApiImageStatusQuery { - commonOutputFields common; - int imageNameCount; - vmApiImageName * imageNameList; // common structure with Image_Name_Query_DM -} vmApiImageStatusQueryOutput; - -// Parser table for Image_Status_Query -static tableLayout Image_Status_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageStatusQueryOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, imageNameList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageStatusQueryOutput, imageNameCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageName) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiImageName, imageName) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Status_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageStatusQueryOutput ** outData); - -// Image_Unlock_DM -typedef commonOutputFields vmApiImageUnlockDmOutput; - -// Parser table for Image_Unlock_DM -static tableLayout Image_Unlock_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageUnlockDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageUnlockDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageUnlockDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageUnlockDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Unlock_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * deviceAddress, - vmApiImageUnlockDmOutput ** outData); - -// Image_Volume_Add -typedef commonOutputFields vmApiImageVolumeAddOutput; - -// Parser table for Image_Volume_Add -static tableLayout Image_Volume_Add_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageVolumeAddOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeAddOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageVolumeAddOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageVolumeAddOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeAddOutput ** outData); - -// Image_Volumne_Delete -typedef commonOutputFields vmApiImageVolumeDeleteOutput; - -// Parser table for Image_Volume_Delete -static tableLayout Image_Volume_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageVolumeDeleteOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeDeleteOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeDeleteOutput ** outData); - -// Image_Volume_Space_Define_DM -typedef commonOutputFields vmApiImageVolumeSpaceDefineDmOutput; - -// Parser table for Image_Volume_Space_Define_DM -static tableLayout Image_Volume_Space_Define_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageVolumeSpaceDefineDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceDefineDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Space_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, int startCyl, int regionSize, char * groupName, - char deviceType, vmApiImageVolumeSpaceDefineDmOutput ** outData); - -// Image_Volume_Space_Query_DM -typedef struct _vmApiImageVolumeSpaceQueryDm { - commonOutputFields common; - int recordCount; - vmApiImageRecord * recordList; // Common structure with Image_Query_DM -} vmApiImageVolumeSpaceQueryDmOutput; - -// Parser table for Image_Volumn_Space_Query_DM -static tableLayout Image_Volume_Space_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageVolumeSpaceQueryDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, recordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageVolumeSpaceQueryDmOutput, recordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageRecord) }, { APITYPE_CHARBUF_LEN, 1, -1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageRecord, imageRecord) }, - { APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageRecord, imageRecordLength) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Volume_Space_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char queryType, char entryType, - char * entryNames, vmApiImageVolumeSpaceQueryDmOutput ** outData); - -// Image_Volume_Space_Remove_DM -typedef commonOutputFields vmApiImageVolumeSpaceRemoveDmOutput; - -// Parser table for Image_Volume_Space_Remove_DM -static tableLayout Image_Volume_Space_Remove_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageVolumeSpaceRemoveDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceRemoveDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceRemoveDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceRemoveDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Space_Remove_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, char * groupName, - vmApiImageVolumeSpaceRemoveDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiName.h b/zhcp/BUILD/resource_access/include/vmapiName.h deleted file mode 100644 index 77a4ea5..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiName.h +++ /dev/null @@ -1,102 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_NAME_H -#define _VMAPI_NAME_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Name_List_Add -typedef commonOutputFields vmApiNameListAddOutput; - -int smName_List_Add(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * name, vmApiNameListAddOutput ** outData); - -// Parser table for Name_List_Add -static tableLayout Name_List_Add_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListAddOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListAddOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListAddOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListAddOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Name_List_Destroy -typedef commonOutputFields vmApiNameListDestroyOutput; - -int smName_List_Destroy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListDestroyOutput ** outData); - -// Parser table for Name_List_Destroy -static tableLayout Name_List_Destroy_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListDestroyOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListDestroyOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListDestroyOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListDestroyOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Name_List_Query -typedef struct _vmApiNameList { // Common structure for Name_List_Query, - char * imageName; -} vmApiNameList; - -typedef struct _vmApiNameListQuery { - commonOutputFields common; - int nameArrayCount; - vmApiNameList * nameList; -} vmApiNameListQueryOutput; - -int smName_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListQueryOutput ** outData); - -// Parser table for Name_List_Query -static tableLayout Name_List_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListQueryOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListQueryOutput, nameList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListQueryOutput, - nameArrayCount) }, { APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiNameList) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNameList, imageName) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Name_List_Remove -typedef commonOutputFields vmApiNameListRemoveOutput; - -int smName_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * name, - vmApiNameListRemoveOutput ** outData); - -// Parser table for Name_List_Remove -static tableLayout Name_List_Remove_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListRemoveOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListRemoveOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListRemoveOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListRemoveOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiProfile.h b/zhcp/BUILD/resource_access/include/vmapiProfile.h deleted file mode 100644 index f8e442f..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiProfile.h +++ /dev/null @@ -1,111 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_PROFILE_H -#define _VMAPI_PROFILE_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Profile_Create_DM -// Common structure to hold one profile record (used on profile_query output, input for Create and Replace) -typedef struct _vmApiProfileRecord { - int profileRecordLength; - char * recordData; -} vmApiProfileRecord; - -typedef commonOutputFields vmApiProfileCreateDmOutput; - -// Parser table for Profile_Create_DM -static tableLayout Profile_Create_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileCreateDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileCreateDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiProfileCreateDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiProfileCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smProfile_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileCreateDmOutput ** outData); - -// Profile_Delete_DM -typedef commonOutputFields vmApiProfileDeleteDmOutput; - -// Parser table for Profile_Delete_DM -static tableLayout Profile_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileDeleteDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiProfileDeleteDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiProfileDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smProfile_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileDeleteDmOutput ** outData); - -// Profile_Query_DM -typedef struct _vmApiProfileQueryDmOutput { - commonOutputFields common; - int profileRecordCount; - vmApiProfileRecord * profileRecordList; -} vmApiProfileQueryDmOutput; - -// Parser table for Profile_Query_DM -static tableLayout Profile_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileQueryDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiProfileQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiProfileQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileQueryDmOutput, profileRecordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiProfileQueryDmOutput, profileRecordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiProfileRecord) }, - { APITYPE_CHARBUF_LEN, 0, 80, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiProfileRecord, recordData) }, { APITYPE_CHARBUF_COUNT, 0, - 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiProfileRecord, - profileRecordLength) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smProfile_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileQueryDmOutput ** outData); - -// Profile_Replace_DM -typedef commonOutputFields vmApiProfileReplaceDmOutput; - -// Parser table for Profile_Replace_DM -static tableLayout Profile_Replace_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileReplaceDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileReplaceDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileReplaceDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileReplaceDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smProfile_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileReplaceDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiPrototype.h b/zhcp/BUILD/resource_access/include/vmapiPrototype.h deleted file mode 100644 index 33a9378..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiPrototype.h +++ /dev/null @@ -1,148 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_PROTOTYPE_H -#define _VMAPI_PROTOTYPE_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Prototype_Create_DM -typedef struct _vmApiPrototypeRecordList { // Common structure for Prototype_Query_DM, create, replace - char * recordName; - int recordNameLength; -} vmApiPrototypeRecordList; - -typedef commonOutputFields vmApiPrototypeCreateDmOutput; - -int smPrototype_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeCreateDmOutput ** outData); - -// Parser table for Prototype_Create_DM -static tableLayout Prototype_Create_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiPrototypeCreateDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeCreateDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeCreateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Delete_DM -typedef commonOutputFields vmApiPrototypeDeleteDmOutput; - -int smPrototype_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeDeleteDmOutput ** outData); - -// Parser table for Prototype_Delete_DM -static tableLayout Prototype_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiPrototypeDeleteDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Name_Query_DM -typedef struct _vmApiPrototypeNameList { // Common structure for Prototype_Name_Query_DM, - char * name; -} vmApiPrototypeNameList; - -typedef struct _vmApiPrototypeNameQueryDm { - commonOutputFields common; - int nameArrayCount; - vmApiPrototypeNameList * nameList; -} vmApiPrototypeNameQueryDmOutput; - -int smPrototype_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeNameQueryDmOutput ** outData); - -// Parser table for Prototype_Name_Query_DM -static tableLayout Prototype_Name_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiPrototypeNameQueryDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiPrototypeNameQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiPrototypeNameQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiPrototypeNameQueryDmOutput, - common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeNameQueryDmOutput, nameList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiPrototypeNameQueryDmOutput, nameArrayCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiPrototypeNameList) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiPrototypeNameList, name) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Query_DM -typedef struct _vmApiPrototypeQueryDm { - commonOutputFields common; - int recordArrayCount; - vmApiPrototypeRecordList * recordList; -} vmApiPrototypeQueryDmOutput; - -int smPrototype_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeQueryDmOutput ** outData); - -// Parser table for Prototype_Query_DM -static tableLayout Prototype_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiPrototypeQueryDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, recordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiPrototypeQueryDmOutput, recordArrayCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiPrototypeRecordList) }, { APITYPE_CHARBUF_LEN, 1, - 72, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiPrototypeRecordList, recordName) }, { - APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiPrototypeRecordList, recordNameLength) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Replace_DM -typedef commonOutputFields vmApiPrototypeReplaceDmOutput; - -int smPrototype_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeReplaceDmOutput ** outData); - -// Parser table for Prototype_Replace_DM -static tableLayout Prototype_Replace_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiPrototypeReplaceDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiPrototypeReplaceDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiPrototypeReplaceDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeReplaceDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiQuery.h b/zhcp/BUILD/resource_access/include/vmapiQuery.h deleted file mode 100644 index a7f7fe4..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiQuery.h +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_QUERY_H -#define _VMAPI_QUERY_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Query_API_Functional_Level -typedef commonOutputFields vmApiQueryApiFunctionalLevelOutput; - -int smQuery_API_Functional_Level(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiQueryApiFunctionalLevelOutput ** outData); - -// Parser table for Query_API_Functional_Level -static tableLayout Query_API_Functional_Level_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiQueryApiFunctionalLevelOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryApiFunctionalLevelOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryApiFunctionalLevelOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryApiFunctionalLevelOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Query_Asychronous_Operation_DM -typedef commonOutputFields vmApiQueryAsynchronousOperationDmOutput; - -int smQuery_Asychronous_Operation_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operationId, vmApiQueryAsynchronousOperationDmOutput ** outData); - -// Parser table for Query_Asychronous_Operation_DM -static tableLayout Query_Asynchronous_Operation_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiQueryAsynchronousOperationDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryAsynchronousOperationDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryAsynchronousOperationDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryAsynchronousOperationDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Query_Directory_Manager_Level_DM -typedef struct _vmApiQueryDirectoryManagerLevelDm { - commonOutputFields common; - char * directoryManagerLevel; - int directoryManagerLevelLength; -} vmApiQueryDirectoryManagerLevelDmOutput; - -// Parser table for Query_Directory_Manager_Level_DM -static tableLayout - Query_Directory_Manager_Level_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiQueryDirectoryManagerLevelDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - common.reasonCode) }, { APITYPE_CHARBUF_LEN, 1, 100, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - directoryManagerLevel) }, { APITYPE_CHARBUF_COUNT, 1, - 100, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - directoryManagerLevelLength) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smQuery_Directory_Manager_Level_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiQueryDirectoryManagerLevelDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiShared.h b/zhcp/BUILD/resource_access/include/vmapiShared.h deleted file mode 100644 index 767ea0f..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiShared.h +++ /dev/null @@ -1,214 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_SHARED_H -#define _VMAPI_SHARED_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Shared_Memory_Access_Add_DM -typedef commonOutputFields vmApiSharedMemoryAccessAddDmOutput; - -// Parser table for Shared_Memory_Access_Add_DM -static tableLayout Shared_Memory_Access_Add_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryAccessAddDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessAddDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessAddDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessAddDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Access_Add_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryAccessAddDmOutput ** outData); - -// Shared_Memory_Access_Query_DM -typedef struct _vmApiSharedMemorySegmentName { // Common structure used by Shared_Memory_Access_Query - char * memorySegmentName; -} vmApiSharedMemorySegmentName; - -typedef struct _vmApiSharedMemoryAccessQueryDm { - commonOutputFields common; - int memorySegmentNameCount; - vmApiSharedMemorySegmentName * memorySegmentNameList; -} vmApiSharedMemoryAccessQueryDmOutput; - -// Parser table for Shared_Memory_Access_Query_DM -static tableLayout Shared_Memory_Access_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryAccessQueryDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, memorySegmentNameList) }, - { APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSharedMemoryAccessQueryDmOutput, - memorySegmentNameCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiSharedMemorySegmentName) }, { APITYPE_STRING_LEN, - 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentName, memorySegmentName) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smShared_Memory_Access_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessQueryDmOutput ** outData); - -// Shared_Memory_Access_Remove_DM -typedef commonOutputFields vmApiSharedMemoryAccessRemoveDmOutput; - -// Parser table for Shared_Memory_Access_Remove_DM -static tableLayout Shared_Memory_Access_Remove_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryAccessRemoveDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessRemoveDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessRemoveDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessRemoveDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Access_Remove_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessRemoveDmOutput ** outData); - -// Shared_Memory_Create -typedef commonOutputFields vmApiSharedMemoryCreateOutput; - -// Parser table for Shared_Memory_Create -static tableLayout Shared_Memory_Create_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSharedMemoryCreateOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSharedMemoryCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int - smShared_Memory_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - unsigned long long beginPage, unsigned long long endPage, - char pageAccessDescriptor, char memoryAttributes, - char * memoryAccessIdentifier, - vmApiSharedMemoryCreateOutput ** outData); - -// Shared_Memory_Delete -typedef commonOutputFields vmApiSharedMemoryDeleteOutput; - -// Parser table for Shared_Memory_Delete -static tableLayout Shared_Memory_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSharedMemoryDeleteOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSharedMemoryDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryDeleteOutput ** outData); - -// Shared_Memory_Query -typedef struct _vmApiSharedPageRangeInfo { - unsigned long long beginPage; - unsigned long long endPage; - char pageAccessDescriptor; -} vmApiSharedPageRangeInfo; - -typedef struct _vmApiSharedMemorySegmentInfo { - char * memorySegmentName; - char memorySegmentStatus; - int pageRangeCount; - vmApiSharedPageRangeInfo * pageRangeList; -} vmApiSharedMemorySegmentInfo; - -typedef struct _vmApiSharedMemoryQueryOutput { - commonOutputFields common; - int memorySegmentCount; - vmApiSharedMemorySegmentInfo * memorySegmentInfoList; -} vmApiSharedMemoryQueryOutput; - -// Parser table for Shared_Memory_Query -static tableLayout Shared_Memory_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiSharedMemoryQueryOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, memorySegmentInfoList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSharedMemoryQueryOutput, memorySegmentCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiSharedMemorySegmentInfo) }, { APITYPE_STRING_LEN, - 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentInfo, memorySegmentName) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentInfo, memorySegmentStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentInfo, pageRangeList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiSharedMemorySegmentInfo, pageRangeCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_2, NEST_LEVEL_2, - sizeof(vmApiSharedPageRangeInfo) }, { APITYPE_INT8, 8, 8, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiSharedPageRangeInfo, - beginPage) }, { APITYPE_INT8, 8, 8, STRUCT_INDX_2, - NEST_LEVEL_2, offsetof(vmApiSharedPageRangeInfo, endPage) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiSharedPageRangeInfo, pageAccessDescriptor) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smShared_Memory_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryQueryOutput ** outData); - -// Shared_Memory_Replace -typedef commonOutputFields vmApiSharedMemoryReplaceOutput; - -// Parser table for Shared_Memory_Replace -static tableLayout Shared_Memory_Replace_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryReplaceOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSharedMemoryReplaceOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSharedMemoryReplaceOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryReplaceOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Replace(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - char * memoryAccessIdentifier, - vmApiSharedMemoryReplaceOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiStatic.h b/zhcp/BUILD/resource_access/include/vmapiStatic.h deleted file mode 100644 index b26ef4f..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiStatic.h +++ /dev/null @@ -1,74 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_STATIC_H -#define _VMAPI_STATIC_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Static_Image_Changes_Activate_DM -typedef commonOutputFields vmApiStaticImageChangesActivateDmOutput; - -// Parser table for Static_Image_Changes_Activate_DM -static tableLayout Static_Image_Changes_Activate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiStaticImageChangesActivateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesActivateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesActivateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesActivateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smStatic_Image_Changes_Activate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesActivateDmOutput ** outData); - -// Static_Image_Changes_Deactivate_DM -typedef commonOutputFields vmApiStaticImageChangesDeactivateDmOutput; - -// Parser table for Static_Image_Changes_Deactivate_DM -static tableLayout Static_Image_Changes_Deactivate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiStaticImageChangesDeactivateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesDeactivateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesDeactivateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesDeactivateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smStatic_Image_Changes_Deactivate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesDeactivateDmOutput ** outData); - -// Static_Image_Changes_Immediate_DM -typedef commonOutputFields vmApiStaticImageChangesImmediateDmOutput; - -// Parser table for Static_Image_Changes_Immediate_DM -static tableLayout Static_Image_Changes_Immediate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiStaticImageChangesImmediateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesImmediateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesImmediateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesImmediateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smStatic_Image_Changes_Immediate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesImmediateDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiSystem.h b/zhcp/BUILD/resource_access/include/vmapiSystem.h deleted file mode 100644 index 0b550c7..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiSystem.h +++ /dev/null @@ -1,115 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_SYSTEM_H -#define _VMAPI_SYSTEM_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// IPaddr_Get -// This is here because it is VM related vs userid related -typedef struct _vmApiIPAddr_GetOutput { - commonOutputFields common; - int ipCount; - vmApiCStringInfo * ipList; // should only be one item in the list -} vmApiIPaddrGetOutput; - -// Parser table for IPaddr_Get -static tableLayout IPaddr_Get_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiIPaddrGetOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiIPaddrGetOutput, common.requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiIPaddrGetOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiIPaddrGetOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiIPaddrGetOutput, ipList) }, { APITYPE_C_STR_ARRAY_COUNT, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiIPaddrGetOutput, ipCount) }, - { APITYPE_C_STR_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiCStringInfo) }, { APITYPE_C_STR_PTR, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiCStringInfo, - vmapiString) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smIPaddr_Get(struct _VmApiInternalContext* vmapiContextP, - vmApiIPaddrGetOutput ** outData); - -// System_Info_Query -typedef struct _vmApiSystemInfoQueryOutput { - commonOutputFields common; - char * timezone; - char * time; - char * vmVersion; - char * cpGenTime; - char * cpIplTime; - char * realStorageSize; -} vmApiSystemInfoQueryOutput; - -// Parser table for Virtual_Network_Query_OSA -static tableLayout System_Info_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiSystemInfoQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, common.reasonCode) }, - -{ APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, timezone) }, - { APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, time) }, { APITYPE_C_STR_PTR, 4, - 80, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, vmVersion) }, { - APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSystemInfoQueryOutput, cpGenTime) }, { - APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSystemInfoQueryOutput, cpIplTime) }, { - APITYPE_C_STR_PTR, 4, 80, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSystemInfoQueryOutput, realStorageSize) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smSystem_Info_Query(struct _VmApiInternalContext* vmapiContextP, - vmApiSystemInfoQueryOutput ** outData); - -// System_IO_Query -typedef struct _vmApiSystemIoQueryOutput { - commonOutputFields common; - int chipidCount; - vmApiCStringInfo * chipidList; -} vmApiSystemIoQueryOutput; - -// Parser table for Virtual_Network_Query_OSA -static tableLayout System_IO_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiSystemIoQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemIoQueryOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSystemIoQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSystemIoQueryOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemIoQueryOutput, chipidList) }, { APITYPE_C_STR_ARRAY_COUNT, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSystemIoQueryOutput, - chipidCount) }, { APITYPE_C_STR_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiCStringInfo) }, { - APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiCStringInfo, vmapiString) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smSystem_IO_Query(struct _VmApiInternalContext* vmapiContextP, - char * realDeviceAddress, vmApiSystemIoQueryOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiVMRM.h b/zhcp/BUILD/resource_access/include/vmapiVMRM.h deleted file mode 100644 index eaa3b6e..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiVMRM.h +++ /dev/null @@ -1,137 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_VMRM_H -#define _VMAPI_VMRM_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// VMRM_Configuration_Query -typedef struct _vmApiVmrmConfigurationQuery { - commonOutputFields common; - char * configurationFile; - int configurationFileLength; -} vmApiVmrmConfigurationQueryOutput; - -// Parser table for VMRM_Configuration_Query -static tableLayout VMRM_Configuration_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVmrmConfigurationQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, common.reasonCode) }, { - APITYPE_CHARBUF_LEN, 1, -1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, configurationFile) }, { - APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, configurationFileLength) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVMRM_Configuration_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - vmApiVmrmConfigurationQueryOutput ** outData); - -// VMRM_Configuration_Update -typedef struct _vmApiVmrmConfigurationLogRecordInfo { - char * logRecord; - int logRecordLength; -} vmApiVmrmConfigurationLogRecordInfo; - -typedef struct _vmApiVmrmConfigurationUpdateOutput { - commonOutputFields common; - int logRecordCount; - vmApiVmrmConfigurationLogRecordInfo * logRecordInfoList; -} vmApiVmrmConfigurationUpdateOutput; - -// Parser table for VMRM_Configuration_Update -static tableLayout VMRM_Configuration_Update_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVmrmConfigurationUpdateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, logRecordInfoList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVmrmConfigurationUpdateOutput, logRecordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVmrmConfigurationLogRecordInfo) }, { APITYPE_CHARBUF_LEN, - 1, -1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmConfigurationLogRecordInfo, logRecord) }, { - APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmConfigurationLogRecordInfo, logRecordLength) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVMRM_Configuration_Update(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - char syncheckOnly, int updateFileLength, char * updateFile, - vmApiVmrmConfigurationUpdateOutput ** outData); - -// VMRM_Measurement_Query -typedef struct _vmApiVmrmMeasurementQueryWorkloadInfo { - char * workloadRecord; - int workloadRecordLength; -} vmApiVmrmMeasurementQueryWorkloadInfo; - -typedef struct _vmApiVmrmMeasurementQueryOutput { - commonOutputFields common; - char * queryTimestamp; - char * fileName; - char * fileTimestamp; - int workloadCount; - vmApiVmrmMeasurementQueryWorkloadInfo * workloadInfoList; -} vmApiVmrmMeasurementQueryOutput; - -// Parser table for VMRM_Measurement_Query -static tableLayout VMRM_Measurement_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVmrmMeasurementQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - common.reasonCode) }, { APITYPE_STRING_LEN, 1, 17, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - queryTimestamp) }, { APITYPE_STRING_LEN, 1, 20, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, fileName) }, { - APITYPE_STRING_LEN, 1, 17, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmMeasurementQueryOutput, fileTimestamp) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmMeasurementQueryOutput, workloadInfoList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVmrmMeasurementQueryOutput, workloadCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVmrmMeasurementQueryWorkloadInfo) }, { APITYPE_CHARBUF_LEN, - 1, 35, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmMeasurementQueryWorkloadInfo, workloadRecord) }, { - APITYPE_CHARBUF_COUNT, 1, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmMeasurementQueryWorkloadInfo, workloadRecordLength) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVMRM_Measurement_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiVmrmMeasurementQueryOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/vmapiVirtual.h b/zhcp/BUILD/resource_access/include/vmapiVirtual.h deleted file mode 100644 index 1739b36..0000000 --- a/zhcp/BUILD/resource_access/include/vmapiVirtual.h +++ /dev/null @@ -1,782 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_VIRTUAL_H -#define _VMAPI_VIRTUAL_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Virtual_Channel_Connection_Create -typedef commonOutputFields vmApiVirtualChannelConnectionCreateOutput; - -// Parser table for Virtual_Channel_Connection_Create -static tableLayout Virtual_Channel_Connection_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionCreateOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - char * coupledImageDeviceNumber, - vmApiVirtualChannelConnectionCreateOutput ** outData); - -// Virtual_Channel_Connection_Create_DM -typedef commonOutputFields vmApiVirtualChannelConnectionCreateDmOutput; - -// Parser table for Virtual_Channel_Connection_Create_DM -static tableLayout Virtual_Channel_Connection_Create_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionCreateDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - vmApiVirtualChannelConnectionCreateDmOutput ** outData); - -// Virtual_Channel_Connection_Delete -typedef commonOutputFields vmApiVirtualChannelConnectionDeleteOutput; - -// Parser table for Virtual_Memory_Access_Add_DM -static tableLayout Virtual_Channel_Connection_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionDeleteOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteOutput ** outData); - -// Virtual_Channel_Connection_Delete_DM -typedef commonOutputFields vmApiVirtualChannelConnectionDeleteDmOutput; - -// Parser table for Virtual_Channel_Connection_Delete_DM -static tableLayout Virtual_Channel_Connection_Delete_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionDeleteDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteDmOutput ** outData); - -// Virtual_Network_Adapter_Connect_LAN -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectLanOutput; - -// Parser table for Virtual_Network_Adapter_Connect_LAN -static tableLayout Virtual_Network_Adapter_Connect_LAN_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectLanOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_LAN( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanOutput ** outData); - -// Virtual_Network_Adapter_Connect_LAN_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectLanDmOutput; - -// Parser table for Virtual_Network_Adapter_Connect_LAN_DM -static tableLayout Virtual_Network_Adapter_Connect_LAN_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectLanDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_LAN_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanDmOutput ** outData); - -// Virtual_Network_Adapter_Connect_Vswitch -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectVswitchOutput; - -// Parser table for Virtual_Network_Adapter_Connect_Vswitch -static tableLayout Virtual_Network_Adapter_Connect_Vswitch_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectVswitchOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchOutput, reasonCode) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_Vswitch( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchOutput ** outData); - -// Virtual_Network_Adapter_Connect_Vswitch_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectVswitchDmOutput; - -// Parser table for Virtual_Network_Adapter_Connect_Vswitch_DM -static tableLayout - Virtual_Network_Adapter_Connect_Vswitch_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectVswitchDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchDmOutput, - reasonCode) }, { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_Vswitch_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchDmOutput ** outData); - -// Virtual_Network_Adapter_Create -typedef commonOutputFields vmApiVirtualNetworkAdapterCreateOutput; - -// Parser table for Virtual_Network_Adapter_Create -static tableLayout Virtual_Network_Adapter_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int - smVirtual_Network_Adapter_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, - int networkAdapterDevices, char * channelPathId, - vmApiVirtualNetworkAdapterCreateOutput ** outData); - -// Virtual_Network_Adapter_Create_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterCreateDmOutput; - -// Parser table for Virtual_Network_Adapter_Create_DM -static tableLayout Virtual_Network_Adapter_Create_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterCreateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, int networkAdapterDevices, - char * channelPathId, char * macId, - vmApiVirtualNetworkAdapterCreateDmOutput ** outData); - -// Virtual_Network_Adapter_Delete -typedef commonOutputFields vmApiVirtualNetworkAdapterDeleteOutput; - -// Parser table for Virtual_Network_Adapter_Delete -static tableLayout Virtual_Network_Adapter_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteOutput ** outData); - -// Virtual_Network_Adapter_Delete_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterDeleteDmOutput; - -// Parser table for Virtual_Network_Adapter_Delete_DM -static tableLayout Virtual_Network_Adapter_Delete_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDeleteDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteDmOutput ** outData); - -// Virtual_Network_Adapter_Disconnect -typedef commonOutputFields vmApiVirtualNetworkAdapterDisconnectOutput; - -// Parser table for Virtual_Network_Adapter_Disconnect -static tableLayout Virtual_Network_Adapter_Disconnect_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDisconnectOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Disconnect( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectOutput ** outData); - -// Virtual_Network_Adapter_Disconnect_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterDisconnectDmOutput; - -// Parser table for Virtual_Network_Adapter_Disconnect_DM -static tableLayout Virtual_Network_Adapter_Disconnect_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDisconnectDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Disconnect_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectDmOutput ** outData); - -// Virtual_Network_Adapter_Query -typedef struct _vmApiVirtualNetworkAdapter { - char * imageDeviceNumber; - char adapterType; - int networkAdapterDevices; - char adapterStatus; - char * lanOwner; - char * lanName; -} vmApiVirtualNetworkAdapter; - -typedef struct _vmApiVirtualNetworkAdapterQueryOutput { - commonOutputFields common; - int adapterArrayCount; - vmApiVirtualNetworkAdapter * adapterList; -} vmApiVirtualNetworkAdapterQueryOutput; - -int smVirtual_Network_Adapter_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterQueryOutput ** outData); - -// Parser table for Virtual_Network_Adapter_Query -static tableLayout Virtual_Network_Adapter_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, adapterList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkAdapterQueryOutput, adapterArrayCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVirtualNetworkAdapter) }, { APITYPE_STRING_LEN, 1, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVirtualNetworkAdapter, - imageDeviceNumber) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVirtualNetworkAdapter, adapterType) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkAdapter, networkAdapterDevices) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkAdapter, adapterStatus) }, { - APITYPE_STRING_LEN, 0, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkAdapter, lanOwner) }, { APITYPE_STRING_LEN, - 0, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVirtualNetworkAdapter, - lanName) }, { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Virtual_Network_LAN_Access -typedef commonOutputFields vmApiVirtualNetworkLanAccessOutput; - -// Parser table for Virtual_Network_LAN_Access -static tableLayout Virtual_Network_LAN_Access_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanAccessOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_LAN_Access(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - char * accessOption, char * accessGrantName, char * promiscuity, - vmApiVirtualNetworkLanAccessOutput ** outData); - -// Virtual_Network_LAN_Access_Query -typedef struct _vmApiVirtualNetworkLanAccessQueryOutput { - commonOutputFields common; - int lanAccessCount; - vmApiCStringInfo * lanAccessList; -} vmApiVirtualNetworkLanAccessQueryOutput; - -// Parser table for Virtual_Network_LANAccess_Query -static tableLayout Virtual_Network_LAN_Access_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanAccessQueryOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, common.returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, common.reasonCode) }, - - { APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, lanAccessList) }, { - APITYPE_C_STR_ARRAY_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkLanAccessQueryOutput, - lanAccessCount) }, { APITYPE_C_STR_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiCStringInfo) }, { - APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiCStringInfo, vmapiString) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_LAN_Access_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * lanName, char * lanOwner, - vmApiVirtualNetworkLanAccessQueryOutput ** outData); - -// Virtual_Network_LAN_Create -typedef commonOutputFields vmApiVirtualNetworkLanCreateOutput; - -// Parser table for Virtual_Network_LAN_Create -static tableLayout Virtual_Network_LAN_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_LAN_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, char lanType,//1,2,3,4 - char transportType, vmApiVirtualNetworkLanCreateOutput ** outData); - -// Virtual_Network_LAN_Delete -typedef commonOutputFields vmApiVirtualNetworkLanDeleteOutput; - -// Parser table for Virtual_Network_LAN_Delete -static tableLayout Virtual_Network_LAN_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_LAN_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanDeleteOutput ** outData); - -// Virtual_Network_LAN_Query -typedef struct _vmApiVirtualNetworkConnectedAdapterInfo { // Common structure with Virtual Network Vswitch Query - char * adapterOwner; - char * imageDeviceNumber; -} vmApiVirtualNetworkConnectedAdapterInfo; - -typedef struct _vmApiVirtualNetworkLanInfo { - char * lanName; - char * lanOwner; - char lanType; - int connectedAdapterCount; - vmApiVirtualNetworkConnectedAdapterInfo * connectedAdapterList; -} vmApiVirtualNetworkLanInfo; - -typedef struct _vmApiVirtualNetworkLanQueryOutput { - commonOutputFields common; - int lanCount; - vmApiVirtualNetworkLanInfo * lanList; -} vmApiVirtualNetworkLanQueryOutput; - -// Parser table for Virtual_Network_LAN_Query -static tableLayout Virtual_Network_LAN_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, lanList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkLanQueryOutput, lanCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVirtualNetworkLanInfo) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVirtualNetworkLanInfo, - lanName) }, { APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVirtualNetworkLanInfo, lanOwner) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkLanInfo, lanType) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkLanInfo, connectedAdapterList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVirtualNetworkLanInfo, connectedAdapterCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_2, NEST_LEVEL_2, - sizeof(vmApiVirtualNetworkConnectedAdapterInfo) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiVirtualNetworkConnectedAdapterInfo, adapterOwner) }, { - APITYPE_STRING_LEN, 1, 4, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiVirtualNetworkConnectedAdapterInfo, imageDeviceNumber) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_LAN_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanQueryOutput ** outData); - -// Virtual_Network_Query_LAN -typedef struct _vmApiVirtualNetworkQueryLanOutput { - commonOutputFields common; - int lanCount; - vmApiCStringInfo * lanList; -} vmApiVirtualNetworkQueryLanOutput; - -// Parser table for Virtual_Network_Query_LAN -static tableLayout Virtual_Network_Query_LAN_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkQueryLanOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, lanList) }, { - APITYPE_C_STR_ARRAY_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, lanCount) }, { - APITYPE_C_STR_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiCStringInfo) }, { APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiCStringInfo, vmapiString) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_Query_LAN(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryLanOutput ** outData); - -// Virtual_Network_Query_OSA -typedef struct _vmApiVirtualNetworkQueryOsaOutput { - commonOutputFields common; - int osaCount; - vmApiCStringInfo * osaList; -} vmApiVirtualNetworkQueryOsaOutput; - -// Parser table for Virtual_Network_Query_OSA -static tableLayout Virtual_Network_Query_OSA_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkQueryOsaOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, osaList) }, { - APITYPE_C_STR_ARRAY_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, osaCount) }, { - APITYPE_C_STR_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiCStringInfo) }, { APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiCStringInfo, vmapiString) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_Query_OSA(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryOsaOutput ** outData); - -// Virtual_Network_Vswitch_Create -typedef commonOutputFields vmApiVirtualNetworkVswitchCreateOutput; - -// Parser table for Virtual_Network_Vswitch_Create -static tableLayout Virtual_Network_Vswitch_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Vswitch_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char * realDeviceAddress, char * portName, - char * controllerName, char connectionValue, int queueMemoryLimit, - char routingValue, char transportType, int vlanId, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - int nativeVlanId, vmApiVirtualNetworkVswitchCreateOutput ** outData); - -// Virtual_Network_Vswitch_Delete -typedef commonOutputFields vmApiVirtualNetworkVswitchDeleteOutput; - -// Parser table for Virtual_Network_Vswitch_Delete -static tableLayout Virtual_Network_Vswitch_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Vswitch_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char updateSystemConfigIndicator, - char * systemConfigName, char * systemConfigType, char * parmDiskOwner, - char * parmDiskNumber, char * parmDiskPassword, - char * altSystemConfigName, char * altSystemConfigType, - char * altParmDiskOwner, char * altParmDiskNumber, - char * altParmDiskPassword, - vmApiVirtualNetworkVswitchDeleteOutput ** outData); - -// Virtual_Network_Vswitch_Query -typedef struct _vmApiConnectedAdapterInfo { - int userVlanId; -} vmApiVlanInfo; - -typedef struct _vmApiAuthorizedUserInfo { - char * grantUserid; - int vlanCount; - vmApiVlanInfo * vlanList; -} vmApiAuthorizedUserInfo; - -typedef struct _vmApiRealDeviceInfo { - int realDeviceAddress; - char * controllerName; - char * portName; - char deviceStatus; - char deviceErrorStatus; -} vmApiRealDeviceInfo; - -typedef struct _vmApiVswitchInfo { - char * switchName; - char transportType; - char portType; - int queueMemoryLimit; - char routingValue; - int vlanId; - int nativeVlanId; - unsigned long long macId; - char grvpRequestAttribute; - char grvpEnabledAttribute; - char switchStatus; - int realDeviceCount; - vmApiRealDeviceInfo * realDeviceList; - int authorizedUserCount; - vmApiAuthorizedUserInfo * authorizedUserList; - int connectedAdapterCount; - vmApiVirtualNetworkConnectedAdapterInfo * connectedAdapterList; // Shares common structure with Virtual network lan query -} vmApiVswitchInfo; - -typedef struct _vmApiVirtualNetworkVswitchQueryOutput { - commonOutputFields common; - int vswitchCount; - vmApiVswitchInfo * vswitchList; -} vmApiVirtualNetworkVswitchQueryOutput; - -// Parser table for Virtual_Network_Vswitch_Query -static tableLayout Virtual_Network_Vswitch_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, vswitchList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkVswitchQueryOutput, vswitchCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVswitchInfo) }, { APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVswitchInfo, switchName) }, { APITYPE_INT1, - 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - transportType) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVswitchInfo, portType) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - queueMemoryLimit) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVswitchInfo, routingValue) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, vlanId) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, nativeVlanId) }, - { APITYPE_INT8, 8, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, macId) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - grvpRequestAttribute) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - grvpEnabledAttribute) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - switchStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, realDeviceList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVswitchInfo, realDeviceCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_2, NEST_LEVEL_2, - sizeof(vmApiRealDeviceInfo) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, - realDeviceAddress) }, { APITYPE_STRING_LEN, 0, 71, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, - controllerName) }, { APITYPE_STRING_LEN, 0, 16, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, - portName) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_2, - NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, deviceStatus) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiRealDeviceInfo, deviceErrorStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, authorizedUserList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVswitchInfo, authorizedUserCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_3, NEST_LEVEL_2, - sizeof(vmApiAuthorizedUserInfo) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_3, NEST_LEVEL_2, offsetof(vmApiAuthorizedUserInfo, - grantUserid) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_3, NEST_LEVEL_2, offsetof( - vmApiAuthorizedUserInfo, vlanList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_3, NEST_LEVEL_2, - offsetof(vmApiAuthorizedUserInfo, vlanCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_4, NEST_LEVEL_3, - sizeof(vmApiVlanInfo) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_4, - NEST_LEVEL_3, offsetof(vmApiVlanInfo, userVlanId) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, connectedAdapterList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVswitchInfo, connectedAdapterCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_5, NEST_LEVEL_2, - sizeof(vmApiVirtualNetworkConnectedAdapterInfo) }, - { APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_5, NEST_LEVEL_2, offsetof( - vmApiVirtualNetworkConnectedAdapterInfo, adapterOwner) }, { - APITYPE_STRING_LEN, 1, 4, STRUCT_INDX_5, NEST_LEVEL_2, - offsetof(vmApiVirtualNetworkConnectedAdapterInfo, - imageDeviceNumber) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_Vswitch_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, vmApiVirtualNetworkVswitchQueryOutput ** outData); - -// Virtual_Network_Vswitch_Set -typedef commonOutputFields vmApiVirtualNetworkVswitchSetOutput; - -// Parser table for Virtual_Network_Vswitch_Set -static tableLayout Virtual_Network_Vswitch_Set_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchSetOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchSetOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchSetOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchSetOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Vswitch_Set(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * switchName, char * grantUserid, - char * userVlanId, char * revokeUserid, char * realDeviceAddress, - char * portName, char * controllerName, char connectionValue, - int queueMemoryLimit, char routingValue, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - char * macId, vmApiVirtualNetworkVswitchSetOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/BUILD/resource_access/include/wrapperutils.h b/zhcp/BUILD/resource_access/include/wrapperutils.h deleted file mode 100644 index 9dd7dbf..0000000 --- a/zhcp/BUILD/resource_access/include/wrapperutils.h +++ /dev/null @@ -1,19 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include -#include "vmapiImage.h" -#include "vmapiVirtual.h" -#include "smPublic.h" -#include "vmapiSystem.h" -#include "vmapiAsynchronous.h" -#include "vmapiAuthorization.h" -#include "vmapiCheckAuthentication.h" -#include "vmapiDirectoryManager.h" -#include "vmapiProfile.h" - -void releaseContext(VmApiInternalContext* context); -void initializeContext(VmApiInternalContext* context); -int isImageNameInvalid(char* imageName); -int isDevNumberInvalid(char* devNumber); -void trim(char * s); diff --git a/zhcp/BUILD/resource_access/src/add3390.c b/zhcp/BUILD/resource_access/src/add3390.c deleted file mode 100644 index 0612d2d..0000000 --- a/zhcp/BUILD/resource_access/src/add3390.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a 3390 (ECKD) disk to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The name of the disk pool from which a disk is to be allocated - * @param $3: The virtual device address for the newly-allocated volume - * @param $4: The mode under which the disk is to be linked by the user - * @param $5: The size of the new disk, in cylinders - * @param $6: The read password - * @param $7: The write password - * @param $8: The multi password - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC < 6 || argC > 9) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* pool = argV[2]; - char* vdev = argV[3]; - int size = atoi(argV[4]); - char* mode = argV[5]; - - // Read password - char* readPw = ""; - if (argC > 7 && argV[6]) - readPw = argV[6]; - - // Write password - char* writePw = ""; - if (argC > 8 && argV[7]) - writePw = argV[7]; - - // Mutli password - // In order to link to a disk, a multi password must be specified - char* multiPw = ""; - if (argC > 9 && argV[8]) - multiPw = argV[8]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Adding disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateDmOutput* output; - - int rc = smImage_Disk_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, "3390", "AUTOG", pool, 1, // Cylinders - size, mode, 1, "", // Do not format disk. Do not give disk a label. - readPw, writePw, multiPw, // Read, write, and multi passwords. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 408 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 4 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/add3390active.c b/zhcp/BUILD/resource_access/src/add3390active.c deleted file mode 100644 index fdb4388..0000000 --- a/zhcp/BUILD/resource_access/src/add3390active.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a 3390 (ECKD) disk that is defined in a virtual image's directory - * entry to that virtual image's active configuration - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The virtual device address for the newly-allocated volume - * @param $3: The mode under which the disk is to be linked by the user - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - char* mode = argV[3]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Adding disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateOutput * output; - - int rc = smImage_Disk_Create(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, mode, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, - output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/add9336.c b/zhcp/BUILD/resource_access/src/add9336.c deleted file mode 100644 index 8cb91ca..0000000 --- a/zhcp/BUILD/resource_access/src/add9336.c +++ /dev/null @@ -1,116 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a 9336 (FBA) disk to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The name of the disk pool from which a disk is to be allocated - * @param $3: The virtual device address for the newly-allocated volume - * @param $4: The mode under which the disk is to be linked by the user - * @param $5: Block size (512, 1024, 2048, or 4096) - * @param $6: The size of the new disk, in blocks - * @param $7: The read password - * @param $8: The write password - * @param $9: The multi password - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC < 7 || argC > 10) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* pool = argV[2]; - char* vdev = argV[3]; - char* mode = argV[4]; - int blocksize = atoi(argV[5]); - int size = atoi(argV[6]); - - // Read password - char* readPw = ""; - if (argC > 8 && argV[7]) - readPw = argV[7]; - - // Write password - char* writePw = ""; - if (argC > 9 && argV[8]) - writePw = argV[8]; - - // Mutli password - // In order to link to a disk, a multi password must be specified - char* multiPw = ""; - if (argC > 10 && argV[9]) - multiPw = argV[9]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - int unit; - switch (blocksize) { - case 512: - unit = 2; - break; - case 1024: - unit = 3; - break; - case 2048: - unit = 4; - break; - case 4096: - unit = 5; - break; - default: - printf("Error: Block size must be 512, 1024, 2048, or 4096\n"); - return 1; - } - - printf("Adding disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateDmOutput* output; - - int rc = smImage_Disk_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, "9336", "AUTOG", pool, unit, size, mode, 1, "", // Do not format disk. Do not give disk a label. - readPw, writePw, multiPw, // Read, write, and multi passwords. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/addnic.c b/zhcp/BUILD/resource_access/src/addnic.c deleted file mode 100644 index 5697ba5..0000000 --- a/zhcp/BUILD/resource_access/src/addnic.c +++ /dev/null @@ -1,85 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Adds a network adapter to a virtual image's directory entry. - * - * @param $1: The z/VM guest for which a NIC is being allocated - * @param $2: The virtual device address of the NIC being allocated - * @param $3: The type of NIC which is to be allocated - * @param $4: The number of VDEV channels associated with this NIC - * - * @return 0 If the NIC was added successfully - * 1 If given invalid parameters - * 2 If the NIC definition failed - */ -int main(int argC, char * argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - char* type = argV[3]; - int devcount = atoi(argV[4]); - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - int typecode; - if (!strcmp(type, "HiperSockets")) { - typecode = 1; - } else if (!strcmp(type, "QDIO")) { - typecode = 2; - } else { - printf("Error: NIC type must be HiperSockets or QDIO\n"); - return 1; - } - - printf("Adding NIC %s to %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterCreateDmOutput* output; - - int rc = smVirtual_Network_Adapter_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, typecode, devcount, "", // Only relevant for a second-level z/OS. - "", // The MAC identifier. - &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/addprocessor.c b/zhcp/BUILD/resource_access/src/addprocessor.c deleted file mode 100644 index fb6e5f3..0000000 --- a/zhcp/BUILD/resource_access/src/addprocessor.c +++ /dev/null @@ -1,67 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a non-dedicated processor to a virtual image's directory entry. - * - * @param $1: The z/VM guest to which a processor is to be added - * @param $2: The virtual device address for the processor being added - * - * @return 0 If the processor was created - * 1 If given invalid parameters - * 2 If the processor definition failed - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; // Hexedecimal string, 00-3F - - printf("Adding processor %s to %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCpuDefineDmOutput* output; - - int rc = smImage_CPU_Define_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, 0, // Base CPU status unspecified. - "", // The processor identification number. - 1, // Not a dedicated processor. - 0, // Do not specify a cryptographic facility. - &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/addvdisk.c b/zhcp/BUILD/resource_access/src/addvdisk.c deleted file mode 100644 index 72feb27..0000000 --- a/zhcp/BUILD/resource_access/src/addvdisk.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a v-disk to a virtual image’s directory entry. - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The virtual device address for the newly-allocated volume - * @param $3: The size of the new disk, in 512-byte blocks - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return -1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - int size = atoi(argV[3]); - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Adding V-Disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateDmOutput* output; - - int rc = smImage_Disk_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, "FB-512", // Required for V-Disk devices. - "V-DISK", "NONE", // No disk pool (value is ignored). - 2, // Allocation unit is BLK0512. - size, "W", // Writable. - 0, "", // Formatting unspecified, no label. - "", "", "", // Read, write, and multi passwords. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/connectnic2guestlan.c b/zhcp/BUILD/resource_access/src/connectnic2guestlan.c deleted file mode 100644 index 58d25e6..0000000 --- a/zhcp/BUILD/resource_access/src/connectnic2guestlan.c +++ /dev/null @@ -1,72 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Connect network adapter to a GuestLAN. - * - * @param $1: The user for which a NIC is being connected - * @param $2: The virtual device address of the NIC being connected - * @param $3: The name of the LAN to which the NIC is to be connected - * @param $4: The virtual image owning the GuestLAN segment to be connected - * - * @return 0 If the NIC was added successfully - * 1 If given invalid parameters - * 2 If the NIC could not be connected to the VSwitch - */ -int main(int argC, char * argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - char* lan = argV[3]; - char* owner = argV[4]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image) || isImageNameInvalid(owner)) - return 1; - - printf("Connecting NIC %s to GuestLan %s on %s... ", address, lan, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterConnectVswitchDmOutput* output; - - int rc = smVirtual_Network_Adapter_Connect_LAN_DM(&context, "", 0, "", - image, address, lan, owner, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/connectnic2vswitch.c b/zhcp/BUILD/resource_access/src/connectnic2vswitch.c deleted file mode 100644 index b9d04a8..0000000 --- a/zhcp/BUILD/resource_access/src/connectnic2vswitch.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Connect network adapter to a VSwitch. - * - * @param $1: The user for which a NIC is being connected - * @param $2: The virtual device address of the NIC being connected - * @param $3: The name of the VSwitch to which the NIC is to be connected - * - * @return 0 If the NIC was added successfully - * 1 If given invalid parameters - * 2 If the NIC could not be connected to the VSwitch - */ -int main(int argC, char * argV[]) { - - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - char* vswitch = argV[3]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Connecting NIC %s to VSwitch %s on %s... ", address, vswitch, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterConnectVswitchDmOutput* output; - - int rc = smVirtual_Network_Adapter_Connect_Vswitch_DM(&context, "", 0, "", - image, address, vswitch, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/createvs.c b/zhcp/BUILD/resource_access/src/createvs.c deleted file mode 100644 index ec371ae..0000000 --- a/zhcp/BUILD/resource_access/src/createvs.c +++ /dev/null @@ -1,231 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Creates a z/VM guest with the specified name. - * - * @param $1: The name of the guest which is to be created - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int main(int argC, char * argV[]) { - - // Should be only 1 or 2 arguments - if (argC < 2 || argC > 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get image name - char * imageName = argV[1]; - - // Check if image name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Creating user directory entry for %s... ", imageName); - - // Create DirMaint directory entry - int rc; - if (argC == 3) { - rc = createUsingFile(imageName, argV[2]); - } - // If no user directory entry is given, create a NOLOG userID - else { - rc = createNoLog(imageName); - } - - return rc; -} - -/** - * Creates a z/VM guest with the specified name using a directory entry file. - * - * @param $1: The name of the guest which is to be created - * @param $2: The directory entry in a file - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int createUsingFile(char * imageName, char * file) { - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCreateDmOutput * output; - - int rc; - FILE * userProfile; - - // Open file for user directory entry - userProfile = fopen(file, "r"); - if (userProfile == NULL) - printf(" Error: Failed to open %s\n", file); - else { - // Read in user directory entry - int recordCount = 0, i = 0; - char line[100], buffer[30][100]; - char * ptr; - while (!feof(userProfile)) { - // Read in 100 characters - fgets(line, 100, userProfile); - - // Delete new line - ptr = strstr(line, "\n"); - if (ptr != NULL) { - strncpy(ptr, "\0", 1); - } - - // Copy line into buffer - strcpy(buffer[i], line); - i++; - - if (!feof(userProfile)) - recordCount++; - } - - // Check USER line for correct virtual server name - ptr = strstr(buffer[0], imageName); - char newLine[100]; - // If the virtual server name is NOT in the USER line - if (ptr == NULL) { - // Insert virtual server name into the USER line - ptr = strtok(buffer[0], " "); - - int i = 0; - while (ptr != NULL) { - if (i == 1) { - strcat(newLine, imageName); - } else { - strcat(newLine, ptr); - } - strcat(newLine, " "); - ptr = strtok(NULL, " "); - i++; - } - - strcpy(buffer[0], newLine); - } - - // Create image record - vmApiImageRecord record[recordCount]; - // Copy buffer contents into image record - for (i = 0; i < recordCount; i++) { - record[i].imageRecordLength = strlen(buffer[i]); - record[i].imageRecord = buffer[i]; - } - - // Close user directory entry - fclose(userProfile); - - rc = smImage_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - "", // The prototype to use for creating the image. - 0, "", // Initial password length, initial password. - "", recordCount, // Initial account number, image record array length - &record, // Image record. - &output); - } - - if (rc || (output->common.returnCode && output->common.returnCode != 400 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 8 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } - - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; -} - -/** - * Creates a z/VM guest with the specified name with NOLOG. - * - * @param $1: The name of the guest which is to be created - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int createNoLog(char * imageName) { - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCreateDmOutput * output; - - int rc; - char userLine[19] = "USER "; - strcat(userLine, imageName); - strcat(userLine, " NOLOG"); - - vmApiImageRecord record; - record.imageRecordLength = 19; // Length of image_record - record.imageRecord = userLine; // The user or profile entry - - rc = smImage_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - "", // The prototype to use for creating the image. - 0, "", // Initial password length, initial password. - "", 1, // Initial account number, image record array length - &record, // Image record. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 400 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 8 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/dedicatedevice.c b/zhcp/BUILD/resource_access/src/dedicatedevice.c deleted file mode 100644 index b202796..0000000 --- a/zhcp/BUILD/resource_access/src/dedicatedevice.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a dedicated device to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a device is to be added - * @param $2: The virtual device address to be assigned to the device - * @param $3: The device's real address - * - * @return 0 If the dedicated device was added successfully - * 1 If given invalid parameters - * 2 If device dedication failed - */ -int main(int argC, char* argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - char* rdev = argV[3]; - char* mode = argV[4]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - int readonly; - if (strcmp(mode, "RW") == 0 || strcmp(mode, "rw") == 0) { - readonly = 0; - } else if (strcmp(mode, "RO") == 0 || !strcmp(mode, "ro") == 0) { - readonly = 1; - } else { - printf("Error: Mode must be in RW or RO\n"); - return 1; - } - - printf("Adding device %s as %s to %s... ", rdev, vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeviceDedicateDmOutput* output; - - int rc = smImage_Device_Dedicate_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, rdev, readonly, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/deleteipl.c b/zhcp/BUILD/resource_access/src/deleteipl.c deleted file mode 100644 index 5b4062b..0000000 --- a/zhcp/BUILD/resource_access/src/deleteipl.c +++ /dev/null @@ -1,65 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Deletes the IPL statement for the z/VM guest with the specified name. - * - * @param $1: The name of the guest from which the IPL statement is to be removed - * - * @return 0 If the no IPL statement exists upon completion - * 1 If given invalid parameters - * 2 If IPL statement removal failed - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Removing IPL statement on %s... ", image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageIplDeleteDmOutput* output; - - int rc = smImage_IPL_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/deletevs.c b/zhcp/BUILD/resource_access/src/deletevs.c deleted file mode 100644 index 8f703db..0000000 --- a/zhcp/BUILD/resource_access/src/deletevs.c +++ /dev/null @@ -1,72 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Deletes the specified z/VM virtual server. - * - * @param $1: The name of the virtual server which is to be deleted - * - * @return 0 If the image is not present in the directory upon completion - * 1 If given invalid parameters - * 2 If image deletion failed - */ -int main(int argC, char* argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - // Get the virtual server name - char* imageName = argV[1]; - // Check if the virtual server name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Deleting virtual server %s... ", imageName); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeleteDmOutput* output; - - // Delete z/VM virtual server - int rc = smImage_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - 1, // Do not erase data from disks being released. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 400 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 4 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} - diff --git a/zhcp/BUILD/resource_access/src/disconnectnic.c b/zhcp/BUILD/resource_access/src/disconnectnic.c deleted file mode 100644 index b698f9c..0000000 --- a/zhcp/BUILD/resource_access/src/disconnectnic.c +++ /dev/null @@ -1,69 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Disconnect network adapter. - * - * @param $1: The user for which a NIC is being disconnected - * @param $2: The virtual device address of the NIC being disconnected - * - * @return 0 If the NIC was successfully disconnected - * 1 If given invalid parameters - * 2 If the NIC could not be disconnected - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Disconnecting NIC %s on %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterDisconnectDmOutput* output; - - int rc = smVirtual_Network_Adapter_Disconnect_DM(&context, "", 0, "", - image, address, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/getdiskpool.c b/zhcp/BUILD/resource_access/src/getdiskpool.c deleted file mode 100644 index 9a4262d..0000000 --- a/zhcp/BUILD/resource_access/src/getdiskpool.c +++ /dev/null @@ -1,100 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Get the free and used space in a given disk pool. - * - * @param $1: The name of the guest to get the disk pool from - * @param $2: The name of the disk pool - * @param $2: Free or used space in the disk pool - * - * @return 0 If the disk pool was successfully printed - * 1 If given invalid parameters - * 2 If the disk pool could not be retrieved - */ -int main(int argC, char * argV[]) { - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char * image = argV[1]; - char * pool = argV[2]; - char * spaceStr = argV[3]; - - // Get the disk space - int space; - if (strcmp(spaceStr, "free") == 0) { - space = 2; - } else if (strcmp(spaceStr, "used") == 0) { - space = 3; - } else { - printf("Error: Disk pool space must be free or used\n"); - return 1; - } - - VmApiInternalContext context; - vmApiImageRecord * record; - char temp[1024]; - char * token; - char diskStr[256]; - int i; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageVolumeSpaceQueryDmOutput * output; - - // Get disk pool used space - int rc = smImage_Volume_Space_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, space, // Used space - 3, // Query group - pool, &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - record = output->recordList; - for (i = 0; i < output->recordCount; i++) { - strncpy(temp, record->imageRecord, record->imageRecordLength); - - token = strtok_r(temp, " ", &context); // VolId - strcpy(diskStr, token); - strcat(diskStr, " "); - token = strtok_r(NULL, " ", &context); // Device type - strcat(diskStr, token); - strcat(diskStr, " "); - token = strtok_r(NULL, " ", &context); // Start address - strcat(diskStr, token); - strcat(diskStr, " "); - token = strtok_r(NULL, " ", &context); // Size - strcat(diskStr, token); - - printf("%s\n", diskStr); - record++; - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/getdiskpoolnames.c b/zhcp/BUILD/resource_access/src/getdiskpoolnames.c deleted file mode 100644 index ad957c4..0000000 --- a/zhcp/BUILD/resource_access/src/getdiskpoolnames.c +++ /dev/null @@ -1,73 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Get a list of defined disk pools. - * - * @param $1: The name of the guest to get a list of disk pools for - * - * @return 0 If the disk pools were successfully printed - * 1 If given invalid parameters - * 2 If the disk pools could not be retrieved - */ -int main(int argC, char * argV[]) { - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - - VmApiInternalContext context; - vmApiImageRecord * record; - char * poolName; - int i; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageVolumeSpaceQueryDmOutput * output; - - int rc = smImage_Volume_Space_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, 1, // Query definition - 3, // Query group - "*", // All areas - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - record = output->recordList; - for (i = 0; i < output->recordCount; i++) { - // Get disk pool name from each record - poolName = strtok_r(record->imageRecord, " ", &context); - if (poolName) { - printf("%s\n", poolName); - } - record++; - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/getipl.c b/zhcp/BUILD/resource_access/src/getipl.c deleted file mode 100644 index e7d91c3..0000000 --- a/zhcp/BUILD/resource_access/src/getipl.c +++ /dev/null @@ -1,63 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out the specified DirMaint profile entry. - * - * @param $1: The name of the profile which is to be listed - * - * @return 0 If the IPL entry was successfully printed - * 1 If given invalid parameters - * 2 If the IPL entry could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageIplQueryDmOutput* output; - - int rc = smImage_IPL_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("IPL target: %s\n" - "LoadParms: %s\n" - "Parameters: %s\n", output->savedSystem, output->loadParameter, - output->parameters); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/getuserentry.c b/zhcp/BUILD/resource_access/src/getuserentry.c deleted file mode 100644 index ca185dd..0000000 --- a/zhcp/BUILD/resource_access/src/getuserentry.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out the specified DirMaint directory entry. - * - * @param $1: The name of the z/VM guest which is to be listed - * - * @return 0 If the image record was successfully printed - * 1 If given invalid parameters - * 2 If the image could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Image name - char * image = argV[1]; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageQueryDmOutput * output; - - // Query DirMaint directory entry - int rc = smImage_Query_DM(&context, "", 0, "", image, &output, false); - - // Handle return code and reason code - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return code: %d\n", rc) : printf(" Return code: %d\n" - " Reason code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - // Print out DirMaint directory entry - int recCount = output->imageRecordCount; - int recLen = output->imageRecordList[0].imageRecordLength - 8; - - // Line to print - char line[recLen], chs[4]; - - if (recCount > 0) { - int i; - int token = 0; - - // Loop through image record and print out directory entry - for (i = 0; i < recCount; i++) { - memset(line, 0, recLen); - memcpy(line, output->imageRecordList[i].imageRecord, recLen); - - // Print lines that are not comment - trim(line); - - // Copy first 4 characters - strncpy(chs, line, 4); - - // If first 4 characters does not have * (comment) - if (!strstr(chs, "*")) { - // Print directory entry line - printf("%s\n", line); - } - } - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/getuserentrynames.c b/zhcp/BUILD/resource_access/src/getuserentrynames.c deleted file mode 100644 index 473a2c5..0000000 --- a/zhcp/BUILD/resource_access/src/getuserentrynames.c +++ /dev/null @@ -1,62 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "wrapperutils.h" - -/** - * Prints out a list of defined image names on a z/VM system. - * - * @return 0 If the list of image names was successfully printed - * 1 If given invalid parameters - * 2 If the image name list could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC > 1) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageNameQueryDmOutput* output; - - int rc = smImage_Name_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - "NA", // Doesn't matter what image name we use. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - int i; - int n = output->nameCount; - for (i = 0; i < n; i++) { - printf("%s\n", output->nameList[i]); - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/getuserprofile.c b/zhcp/BUILD/resource_access/src/getuserprofile.c deleted file mode 100644 index 0bedf31..0000000 --- a/zhcp/BUILD/resource_access/src/getuserprofile.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out the specified profile. - * - * @param $1: The name of the profile which is to be listed - * - * @return 0 If the profile was successfully printed - * 1 If given invalid parameters - * 2 If the profile could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Image name - char * profile = argV[1]; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiProfileQueryDmOutput * output; - - // Query DirMaint profile - int rc = smProfile_Query_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - profile,// Profile name - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return code: %d\n", rc) : printf(" Return code: %d\n" - " Reason code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - // Print out DirMaint directory entry - int i; - int recCount = output->profileRecordCount; - int recLen = 72; - - // Line to print - char line[recLen], chs[4]; - - if (recCount > 0) { - // Loop through image record and print out directory entry - for (i = 0; i < recCount; i++) { - memset(line, 0, recLen); - memcpy(line, output->profileRecordList[i].recordData, recLen); - - // Print lines that are not comment - trim(line); - - // Copy first 4 characters - strncpy(chs, line, 4); - - // If first 4 characters does not have * (comment) - if (!strstr(chs, "*")) { - printf("%s\n", line); - } - } // End of for - } - } // End of else - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; -} diff --git a/zhcp/BUILD/resource_access/src/queryvolumes.c b/zhcp/BUILD/resource_access/src/queryvolumes.c deleted file mode 100644 index 37d262f..0000000 --- a/zhcp/BUILD/resource_access/src/queryvolumes.c +++ /dev/null @@ -1,93 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out information about disk spaces on a z/VM system. - * - * @param $1: The type of query to run - * @param $2: The type of space to query - * - * @return 0 If the virtual image was created - * 1 If given invalid parameters - * 2 If the image name list could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* queryType = argV[1]; - char* entryType = argV[2]; - - int iQueryType; - if (!strcmp(queryType, "definition")) { - iQueryType = 1; - } else if (!strcmp(queryType, "free")) { - iQueryType = 2; - } else if (!strcmp(queryType, "used")) { - iQueryType = 3; - } else { - return 1; - } - - int iEntryType; - if (!strcmp(entryType, "volume")) { - iEntryType = 1; - } else if (!strcmp(entryType, "region")) { - iEntryType = 2; - } else if (!strcmp(entryType, "group")) { - iEntryType = 3; - } else { - return 1; - } - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageVolumeSpaceQueryDmOutput* output; - - int rc = smImage_Volume_Space_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - "NA", // Doesn't matter what image name we use. - iQueryType, iEntryType, "*", // List all spaces of specified type. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - int i, l; - int n = output->recordCount; - int p = 0; - for (i = 0; i < n; i++) { - l = output->recordList[i].imageRecordLength; - printf("%.*s\n", l, output->recordList[0].imageRecord + p); - p = p + l; - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/removemdisk.c b/zhcp/BUILD/resource_access/src/removemdisk.c deleted file mode 100644 index 1cd8114..0000000 --- a/zhcp/BUILD/resource_access/src/removemdisk.c +++ /dev/null @@ -1,69 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Removes a disk from a virtual image's directory entry - * - * @param $1: The name of the guest from which a disk is to be removed - * @param $2: The virtual device address of the volume which is to be removed - * - * @return 0 If the disk is not in the image's directory entry upon completion - * 1 If given invalid parameters - * 2 If the disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image) || isDevNumberInvalid(vdev)) - return 1; - - printf("Removing disk %s on %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskDeleteDmOutput* output; - - int rc = smImage_Disk_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, 0, // Use default setting for whether to erase data. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/removenic.c b/zhcp/BUILD/resource_access/src/removenic.c deleted file mode 100644 index d57e6d0..0000000 --- a/zhcp/BUILD/resource_access/src/removenic.c +++ /dev/null @@ -1,68 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Removes a network adapter from a virtual image's directory entry. - * - * @param $1: The z/VM guest from which the NIC is to be removed - * @param $2: The virtual device address of the NIC which is to be removed - * - * @return 0 If the NIC was removed successfully - * 1 If given invalid parameters - * 2 If the NIC removal failed - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - - if (isImageNameInvalid(image)) - return 1; - - printf("Removing NIC %s on %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterDeleteDmOutput* output; - - int rc = smVirtual_Network_Adapter_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/removeprocessor.c b/zhcp/BUILD/resource_access/src/removeprocessor.c deleted file mode 100644 index 980556d..0000000 --- a/zhcp/BUILD/resource_access/src/removeprocessor.c +++ /dev/null @@ -1,64 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Removes a processor to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a processor is to be removed - * @param $2: The virtual address of the processor which is to be removed - * - * @return 0 If the processor was successfully removed - * 1 If given invalid parameters - * 2 If the specified processor remains after attempted removal - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; // Hexedecimal string, 00-3F - - printf("Removing processor %s on %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCpuDeleteDmOutput* output; - - int rc = smImage_CPU_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, &output); - - if (rc || (output->returnCode && output->returnCode != 520 - || (output->reasonCode && output->reasonCode != 30))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/replacevs.c b/zhcp/BUILD/resource_access/src/replacevs.c deleted file mode 100644 index d716b36..0000000 --- a/zhcp/BUILD/resource_access/src/replacevs.c +++ /dev/null @@ -1,202 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Replace specified user directory entry. - * - * @param $1: Name of the z/VM guest to replace the directory entry - * @param $2: Text file containing the new directory entry - * - * @return 0 If directory entry was successfully replaced - * 1 If given invalid parameters - * 2 If directory entry replace failed - */ -int main(int argC, char* argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get user name - char* image = argV[1]; - char* file = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - // Lock user directory entry - int rc = lockImage(image, &context); - - FILE * userDirEntry; - - // Open file for user directory entry - userDirEntry = fopen(file, "r"); - if (userDirEntry == NULL) - printf("Error: Failed to open %s\n", file); - else { - // Read in user directory entry - int recordCount = 0; - int i = 0; - char line[100], buffer[30][100]; - char * ptr; - while (!feof(userDirEntry)) { - // Read in 100 characters - fgets(line, 100, userDirEntry); - - // Delete new line - ptr = strstr(line, "\n"); - if (ptr != NULL) { - strncpy(ptr, "\0", 1); - } - - // Copy line into buffer - strcpy(buffer[i], line); - i++; - - if (!feof(userDirEntry)) - recordCount++; - } - - // Close user directory entry - fclose(userDirEntry); - - // Create image record - vmApiImageRecord record[recordCount]; - - // Copy buffer contents into image record - for (i = 0; i < recordCount; i++) { - record[i].imageRecordLength = strlen(buffer[i]); - record[i].imageRecord = buffer[i]; - } - - // Replace user directory entry - rc = replaceImage(image, &context, &record, recordCount); - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return rc; -} - -/** - * Lock specified user directory entry. - * - * @param $1: Name of the z/VM guest directory entry to lock - * - * @return 0 If directory entry was successfully locked - * 1 If given invalid parameters - * 2 If directory entry lock failed - */ -int lockImage(char * image, VmApiInternalContext context) { - printf("Locking %s... ", image); - - vmApiImageLockDmOutput * lockOutput; - int rc = smImage_Lock_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - image, // Image name - "", // Device virtual address - &lockOutput); - - if (rc || (lockOutput->returnCode && lockOutput->returnCode != 400 - || (lockOutput->reasonCode && lockOutput->reasonCode != 12))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", lockOutput->returnCode, - lockOutput->reasonCode); - - return 2; - } else { - printf("Done\n"); - return 0; - } -} - -/** - * Unlock specified user directory entry. - * - * @param $1: Name of the z/VM guest directory entry to unlock - * - * @return 0 If directory entry was successfully unlocked - * 1 If given invalid parameters - * 2 If directory entry unlock failed - */ -int unlockImage(char * image, VmApiInternalContext context) { - printf("Unlocking %s... ", image); - - vmApiImageUnlockDmOutput * unlockOutput; - int rc = smImage_Unlock_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - image, // Image name - "", // Device virtual address - &unlockOutput); - - if (rc || unlockOutput->returnCode || unlockOutput->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", unlockOutput->returnCode, - unlockOutput->reasonCode); - - return 2; - } else { - printf("Done\n"); - return 0; - } -} - -/** - * Replace specified user directory entry. - * - * @param $1: Name of the z/VM guest to replace the directory entry - * - * @return 0 If directory entry was successfully unlocked - * 1 If given invalid parameters - * 2 If directory entry unlock failed - */ -int replaceImage(char * image, VmApiInternalContext context, - vmApiImageRecord * record, int recordCount) { - printf("Replacing directory entry of %s... ", image); - - vmApiImageReplaceDmOutput* replaceOutput; - int rc = smImage_Replace_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - image, // Image name - recordCount, // Record count - record, // Record array - &replaceOutput); - - if (rc || replaceOutput->returnCode || replaceOutput->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", replaceOutput->returnCode, - replaceOutput->reasonCode); - - // Unlock user directory entry - rc = unlockImage(image, context); - return 2; - } else { - printf("Done\n"); - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/setipl.c b/zhcp/BUILD/resource_access/src/setipl.c deleted file mode 100644 index 97008ad..0000000 --- a/zhcp/BUILD/resource_access/src/setipl.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Sets the IPL statement for the z/VM guest with the specified name. - * - * @param $1: The name of the guest for which the IPL statement is to be set. - * @param $2: The new IPL statement's IPL target string. - * @param $3: The new IPL statement's load parameter string. - * @param $4: The new IPL statement's parameter string. - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int main(int argC, char * argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* ipltarget = argV[2]; - char* loadparms = argV[3]; - char* parms = argV[4]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Setting IPL statement on %s... ", image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageIplSetDmOutput* output; - - int rc = smImage_IPL_Set_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, ipltarget, loadparms, parms, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/setpassword.c b/zhcp/BUILD/resource_access/src/setpassword.c deleted file mode 100644 index 6bbf67c..0000000 --- a/zhcp/BUILD/resource_access/src/setpassword.c +++ /dev/null @@ -1,67 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Sets the password for the z/VM guest with the specified name. - * - * @param $1: The name of the guest for which a password is to be set - * @param $2: The guest's new password - * - * @eeturn 0 If the password was set - * 1 If given invalid parameters - * 2 If setting the password failed - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* password = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Setting password for %s... ", image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImagePasswordSetDmOutput* output; - - int rc = smImage_Password_Set_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, strlen(password), password, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/smMemoryGroup.c b/zhcp/BUILD/resource_access/src/smMemoryGroup.c deleted file mode 100644 index 338b4bf..0000000 --- a/zhcp/BUILD/resource_access/src/smMemoryGroup.c +++ /dev/null @@ -1,140 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "smPublic.h" - -int quantum = 64; - -int smMemoryGroupInitialize(struct _VmApiInternalContext* vmapiContextP) { - smMemoryGroupContext * context = vmapiContextP->memContext; - // Set up a tracking array with no allocated chunks yet - context->arraySize = quantum; - context->chunks = (void **) malloc(context->arraySize * sizeof(void *)); - if (context->chunks == 0) { - errorLine(vmapiContextP, "smMemoryGroupInitialize: out of memory"); - return MEMORY_ERROR; - } - context->lastChunk = -1; - - // Return successfully - return 0; -} - -void * smMemoryGroupAlloc(struct _VmApiInternalContext* vmapiContextP, - size_t size) { - int rc; - smMemoryGroupContext * context = vmapiContextP->memContext; - - // Check that memory structure is initialized, if not then call to init. - if (context->arraySize < quantum || context->chunks == 0) { - rc = smMemoryGroupInitialize(vmapiContextP); - if (rc != 0) - return 0; // Return of 0 is error in this case - } - // Increment to the next unused entry in the tracking array - context->lastChunk = context->lastChunk + 1; - - // If we're past the end of the array, enlarge it by the quantum - if (context->lastChunk == context->arraySize) { - context->arraySize = context->arraySize + quantum; - void ** reallocated = (void **) realloc(context->chunks, - context->arraySize * sizeof(void *)); - if (NULL == reallocated) { - errorLine(vmapiContextP, "smMemory realloc: out of memory"); - return NULL; - } else { - context->chunks = reallocated; - } - } - - // Obtain the memory and record it in the tracking array - context->chunks[context->lastChunk] = malloc(size); - - // clear out the memory chunk if obtained - if (context->chunks[context->lastChunk]) { - memset(context->chunks[context->lastChunk], 0, size); - } - - // Return the pointer - return context->chunks[context->lastChunk]; -} - -void * smMemoryGroupRealloc(struct _VmApiInternalContext* vmapiContextP, - void * chunk, size_t size) { - smMemoryGroupContext * context = vmapiContextP->memContext; - // Variables - int i; - int rc; - void * newChunk; - - // Check that memory structure is initialized, if not then call to init - if (context->arraySize < quantum || context->chunks == 0) { - rc = smMemoryGroupInitialize(vmapiContextP); - if (rc != 0) - return 0; // Return of 0 is error in this case - } - - // Find this chunk in the tracking array and reallocate it - newChunk = NULL; - for (i = 0; (i <= context->lastChunk) && (newChunk == NULL); i++) { - if (context->chunks[i] == chunk) { - char *reallocated = realloc(context->chunks[i], size); - if (NULL == reallocated) { - errorLine(vmapiContextP, - "smMemory group realloc: out of memory"); - return NULL; - } else { - context->chunks[i] = reallocated; - } - newChunk = context->chunks[i]; - } - } - - // Return the new pointer - return newChunk; - -} - -int smMemoryGroupFreeAll(struct _VmApiInternalContext* vmapiContextP) { - smMemoryGroupContext * context = vmapiContextP->memContext; - // Variables - int i; - - // Check that memory structure is initialized, if not then just return - if (context->arraySize < quantum || context->chunks == 0) { - return 0; - } - - // Free all the memory recorded in the tracking array - for (i = 0; i <= context->lastChunk; i++) { - if (context->chunks[i]) - FREE_MEMORY(context->chunks[i]); - } - - // Reset the tracking array to empty - if (context->arraySize != quantum) { - context->arraySize = quantum; - context->chunks = (void **) realloc(context->chunks, context->arraySize - * sizeof(void *)); - } - context->lastChunk = -1; - - // Return successfully - return 0; - -} - -int smMemoryGroupTerminate(struct _VmApiInternalContext* vmapiContextP) { - smMemoryGroupContext * context = vmapiContextP->memContext; - - // Check that memory structure is initialized, if not then just return - if (context->arraySize < quantum || context->chunks == 0) { - return 0; - } - - // Free the tracking array - FREE_MEMORY(context->chunks); - - // Return successfully - return 0; -} diff --git a/zhcp/BUILD/resource_access/src/smSocket.c b/zhcp/BUILD/resource_access/src/smSocket.c deleted file mode 100644 index 6544274..0000000 --- a/zhcp/BUILD/resource_access/src/smSocket.c +++ /dev/null @@ -1,659 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef AF_IUCV -#define AF_IUCV 32 -#endif - -#ifndef PF_IUCV -#define PF_IUCV AF_IUCV -#endif - -struct sockaddr_iucv { - sa_family_t siucv_family; - unsigned short siucv_port; - unsigned int siucv_addr; - char siucv_nodeid[8]; - char siucv_userid[8]; - char siucv_name[8]; -}; - -// This macro is used to check return values on close -// and do one retry if the close had an EINTR error -#define CHECK_SOCKET_CLOSE(_SOCKETID_) \ -if (retValue)\ -{\ - saveCloseErrno = errno;\ - sprintf(line, "close() error on socket %d return value %d errno %d\n", _SOCKETID_,retValue, saveCloseErrno);\ - errorLog(vmapiContextP,\ - __func__,\ - TO_STRING(__LINE__),\ - RcIucv,\ - retValue,\ - line);\ - if (EINTR == saveCloseErrno)\ - {\ - retValue = close(_SOCKETID_);\ - if (retValue)\ - {\ - saveCloseErrno = errno;\ - sprintf(line, "retried close() error on socket %d return value %d errno %d\n", _SOCKETID_,retValue, saveCloseErrno);\ - errorLog(vmapiContextP,\ - __func__,\ - TO_STRING(__LINE__),\ - RcIucv,\ - retValue,\ - line);\ - }\ - }\ -} - -static const char* default_IUCV_server = "VSMREQIU"; -static const char* IUCV_programName = "DMSRSRQU"; - -int smSocketInitialize(struct _VmApiInternalContext* vmapiContextP, - int * sockId) { - -#define RETRY_CONNECTION_LIMIT 10 - const int SLEEP_TIMES[RETRY_CONNECTION_LIMIT] = { 0, 0, 1, 1, 2, 2, 8, 8, - 16, 32 }; - int retValue; - char line[LINESIZE]; - int length; - int retryConnection; - int saveErrno, saveCloseErrno; - struct sockaddr_iucv serverSockAddr; - struct timeval timeoutValue; - - // If the trace file has not been read yet, do it - if (!(vmapiContextP->smTraceDetails->traceFileRead)) { - readTraceFile(vmapiContextP); - } - - // Place holders for context and background starting - if (1 != vmapiContextP->contextCreatedFlag) { - retValue = initializeThreadSemaphores(vmapiContextP, "", 1); // Create context using no name to override current context name - if (retValue) { - sprintf( - line, - "smSocketInitialize(): context reserve() returned error: %d\n", - retValue); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, line); - return PROCESSING_ERROR; - } - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "smSocketInitialize: initializeThreadSemaphores completed successfully.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - // If the backend is not marked as running, check it - if (!vmapiContextP->checkBackendFlag) { - retValue = vmbkendCheck(vmapiContextP); - if (retValue) - return retValue; // If any error return - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - // Get a local socket - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketInitialize: trying to obtain local socket.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - *sockId = socket(PF_IUCV, SOCK_STREAM, IPPROTO_IP); - if (*sockId == -1) { - sprintf(line, "smSocketInitialize(): socket() returned errno: %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, *sockId, - line); - return SOCKET_OBTAIN_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "smSocketInitialize: local socket id %d obtained. Now trying connect loop. \n", - *sockId); - TRACE_END_DEBUG(vmapiContextP, line); - - // Initialize the server IUCV socket structure - memset(&serverSockAddr, 0, sizeof(serverSockAddr)); - serverSockAddr.siucv_family = AF_IUCV; - serverSockAddr.siucv_port = 0; - serverSockAddr.siucv_addr = 0; - memset(&serverSockAddr.siucv_nodeid, ' ', - sizeof(serverSockAddr.siucv_nodeid)); - memset(&serverSockAddr.siucv_userid, ' ', - sizeof(serverSockAddr.siucv_userid)); - memset(&serverSockAddr.siucv_name, ' ', sizeof(serverSockAddr.siucv_name)); - - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = 60; // Changed to 60 now that AF IUCV and CMS are working better - retValue = setsockopt(*sockId, SOL_SOCKET, SO_SNDTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): connect timeout returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Do we have an IUCV userID or just use the default? - // Do not copy in the null terminator on strings - length = strlen(vmapiContextP->IucvUserid); - if (length <= 0 || length > 8) { - memcpy(&serverSockAddr.siucv_userid, default_IUCV_server, strlen( - default_IUCV_server)); - } else { - memcpy(&serverSockAddr.siucv_userid, &vmapiContextP->IucvUserid, - strlen(vmapiContextP->IucvUserid)); - } - - // Add in the iucv program name constant - memcpy(&serverSockAddr.siucv_name[0], IUCV_programName, strlen( - IUCV_programName)); - - // Try to connect to the IUCV server - for (retryConnection = 1;; retryConnection++) { - retValue = connect(*sockId, (struct sockaddr *) &serverSockAddr, - sizeof(serverSockAddr)); - if (retValue != 0) { - saveErrno = errno; - sprintf(line, "connect() of socket %d returned %d errno %d\n", - *sockId, retValue, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - retValue, line); - // If we have exceeded the retry limit, then shutdown, close and return with error - if (retryConnection >= RETRY_CONNECTION_LIMIT) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "smSocketInitialize: connect retry limit exceeded.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId); - switch (saveErrno) { - case ECONNREFUSED: - return SOCKET_CONNECT_REFUSED_ERROR; - case EAGAIN: - return SOCKET_CONNECT_TRYAGAIN_ERROR; - default: - return SOCKET_PROCESSING_ERROR; - } - } - - // Is this an errno that we can retry? If so continue the loop - switch (saveErrno) { - case ECONNREFUSED: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "====>>ECONNREFUSED, going to close and retry connect.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - case EAGAIN: - if (saveErrno == EAGAIN) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "====>>EAGAIN, going to close and retry connect.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - } - // Close the current socket - // Get a new one, and retry the connect - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "====>>closing the socket before retry.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId) - ; - - // Delay for a while to give SMAPI some time to restart - if (SLEEP_TIMES[retryConnection] > 0) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "+++++++++ Sleeping for %d seconds\n", - SLEEP_TIMES[retryConnection]); - TRACE_END_DEBUG(vmapiContextP, line); - sleep(SLEEP_TIMES[retryConnection]); - } - - *sockId = socket(PF_IUCV, SOCK_STREAM, IPPROTO_IP); - if (*sockId == -1) { - sprintf( - line, - "smSocketInitialize(): socket() returned errno: %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcIucv, *sockId, line); - return SOCKET_OBTAIN_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "smSocketInitialize: retry obtained new local socket id %d. Now retrying connect.\n", - *sockId); - TRACE_END_DEBUG(vmapiContextP, line); - // Reset the return and reason codes in the context - vmapiContextP->rc = 0; - vmapiContextP->reason = 0; - - continue; // Try to connect again - - default: - break; // Shutdown the socket and return with error if errno is not listed - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "====>>closing the socket \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "====>>return from closing the socket \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return SOCKET_PROCESSING_ERROR; - } else - break; // Got a good connection, leave loop - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "smSocketInitialize: Socket connect completed successfully.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - return 0; -} - -int smSocketWrite(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * data, int dataLen) { - - int retValue; - char line[LINESIZE]; - struct timeval timeoutValue; - int onValue = 1; - int saveErrno, saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_BUFFER_OUT); - dumpArea(vmapiContextP, data, dataLen); - TRACE_END; - - // Set the send socket timeout value - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = Socket_Timeout; - retValue = setsockopt(sockId, SOL_SOCKET, SO_SNDTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): send timeout returned errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Set the reuse socket address value - onValue = 1; - retValue = setsockopt(sockId, SOL_SOCKET, SO_REUSEADDR, (int *) &onValue, - sizeof(int)); - if (retValue < 0) { - sprintf(line, "setsockopt(): reuse addr returned errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Write the data to the socket - while (dataLen > 0) { - retValue = send(sockId, (void *) data, dataLen, 0); - if (retValue < 0) { - saveErrno = errno; - // Log a special message and set the return and reason code if a timeout - if (errno == EAGAIN) { - sprintf(line, "smSocketWrite(): timeout errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsSocketTimeout, line); - } else { - sprintf(line, "smSocketWrite(): send() returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - errno, line); - } - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - if (saveErrno == EAGAIN) - return SOCKET_TIMEOUT_ERROR; - if (saveErrno == ENOTCONN) - return SOCKET_WRITE_RETRYABLE_ERROR; - return SOCKET_WRITE_ERROR; - } - data = data + retValue; - dataLen = dataLen - retValue; - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return 0; -} - -int smSocketRead(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len) { - - int retValue; - int lenRead; - int retryNoData; - char line[LINESIZE]; - retryNoData = 0; - struct timeval timeoutValue; - unsigned long ulTimeoutSeconds; - long ulTimeoutSecondsRequested = 0; - char * ptrTimeOutValue; - int onValue = 1; - void * buffPtr; - int buffLength; - int saveErrno, saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - buffPtr = (void *) buff; - buffLength = len; - ulTimeoutSeconds = Socket_Timeout; - - // Obtain read timeout environment variable - ptrTimeOutValue = getenv("ZVMMAP_READ_TIMEOUT_SECONDS"); - if (ptrTimeOutValue) { - ulTimeoutSecondsRequested = atol(ptrTimeOutValue); - if (ulTimeoutSecondsRequested > 0) { - ulTimeoutSeconds = ulTimeoutSecondsRequested; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "Socket read timeout set from enviromentVariable. %lu seconds.\n", - ulTimeoutSeconds); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - - // Set the read socket timeout value - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = ulTimeoutSeconds; - retValue = setsockopt(sockId, SOL_SOCKET, SO_RCVTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): receive timeout returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Set the reuse socket address value - onValue = 1; - retValue = setsockopt(sockId, SOL_SOCKET, SO_REUSEADDR, (int *) &onValue, - sizeof(int)); - if (retValue < 0) { - sprintf(line, "setsockopt(): reuse addr returned errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - /* Read the data from the socket */ - lenRead = 0; - while (lenRead < len) { - retValue = recv(sockId, buffPtr, buffLength, 0); - if (retValue < 0) { - saveErrno = errno; - // Log a special message and set the return and reason code if a timeout - if (errno == EAGAIN) { - sprintf(line, "smSocketRead(): timeout errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsSocketTimeout, line); - } else { - sprintf(line, "smSocketRead(): recv() returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - errno, line); - } - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - if (saveErrno == EAGAIN) - return SOCKET_TIMEOUT_ERROR; - if (saveErrno == ENOTCONN) - return SOCKET_READ_RETRYABLE_ERROR; - return SOCKET_READ_ERROR; - } - - // No data returned? - // Retry 10 times if we haven't received any data - if (retValue == 0) { - retryNoData++; - if (retryNoData > 10 && lenRead == 0) { - sprintf(line, - "smSocketRead(): recv() returned no data after 10 retries.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsUnexpected, line); - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_READ_ERROR; - } - } - lenRead += retValue; - buffPtr += retValue; - buffLength -= retValue; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_BUFFER_IN); - dumpArea(vmapiContextP, buff, lenRead); - TRACE_END; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketRead(): read %d bytes of data \n", lenRead); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - return 0; -} - -int smSocketReadLoop(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len) { - - int retValue; - int lenRead; - int retryNoData; - char line[LINESIZE]; - retryNoData = 0; - struct timeval timeoutValue; - unsigned long ulTimeoutSeconds; - long ulTimeoutSecondsRequested = 0; - char * ptrTimeOutValue; - void * buffPtr; - int buffLength; - int saveErrno, saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "--> Inside smSocketReadLoop:.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - buffPtr = (void *) buff; - buffLength = len; - - ulTimeoutSeconds = Socket_Indication_Timeout; - - // Obtain read timeout environment variable - ptrTimeOutValue = getenv("ZVMMAP_READ_INDICATION_TIMEOUT_SECONDS"); - if (ptrTimeOutValue) { - ulTimeoutSecondsRequested = atol(ptrTimeOutValue); - if (ulTimeoutSecondsRequested > 0) { - ulTimeoutSeconds = ulTimeoutSecondsRequested; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "Socket read indication timeout set from enviromentVariable. %lu seconds.\n", - ulTimeoutSeconds); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - - // Set the read socket timeout value - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = ulTimeoutSeconds; - retValue = setsockopt(sockId, SOL_SOCKET, SO_RCVTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): receive timeout returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Read the data from the socket - lenRead = 0; - while (lenRead < len) { - retValue = recv(sockId, buffPtr, buffLength, 0); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "--> return value of recv inside socketReadLoop = %d \n", - retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - if (retValue < 0) { - saveErrno = errno; - // Log a special message and set the return and reason code if a timeout - if (errno == EAGAIN) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "--> Errno inside socketReadLoop = %d for recv() return value = %d \n", - errno, retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - return CUSTOM_DEFINED_SOCKET_RETRY; - - } else { - sprintf(line, "smSocketRead(): recv() returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - errno, line); - } - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - if (saveErrno == EAGAIN) - return SOCKET_TIMEOUT_ERROR; - if (saveErrno == ENOTCONN) - return SOCKET_READ_RETRYABLE_ERROR; - return SOCKET_READ_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketRead(): retValue %d \n", retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - // No data returned? - //Retry 100 times if we haven't received any data - if (retValue == 0) { - retryNoData++; - if (retryNoData > 100 && lenRead == 0) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "--> Errno inside socketReadLoop = %d for recv() return value = %d \n", - errno, retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - return CUSTOM_DEFINED_SOCKET_RETRY; - } - } - lenRead += retValue; - buffPtr += retValue; - buffLength -= retValue; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_BUFFER_IN); - dumpArea(vmapiContextP, buff, lenRead); - TRACE_END; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketRead(): read %d bytes of data \n", lenRead); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return 0; -} - -int smSocketTerminate(struct _VmApiInternalContext* vmapiContextP, int sockId) { - int retValue; - char line[LINESIZE]; - int saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - retValue = close(sockId); - if (retValue != 0) { - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return 0; -} diff --git a/zhcp/BUILD/resource_access/src/smapiTableParser.c b/zhcp/BUILD/resource_access/src/smapiTableParser.c deleted file mode 100644 index 1d8b02a..0000000 --- a/zhcp/BUILD/resource_access/src/smapiTableParser.c +++ /dev/null @@ -1,929 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smapiTableParser.h" -#include -#include -#include -#include "smPublic.h" -#include "smSocket.h" - -// Internal function to handle imbedded arrays in smapi output -static int handleArrays(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, int * tableStartingIndex, - tableLayout table, tableParserParms * parms); - -int parseBufferWithTable(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, tableLayout table, tableParserParms *parms) { - int temp, dataType, i, rc, iSize, reachedByteCount; - int cStringArrayPtrOffset, cStringArrayPtrIndex; - int cStringCounterFieldOffset, cStringCounterFieldIndex; - int cStringStructIndex, cStringStructSize; - int cStringFieldIndex, cStringFieldOffset, cStringCurrentStructCount; - char line[LINESIZE]; - - reachedByteCount = 0; // Set this if we are at the end of the data - - // If this is a SCAN mode; clear out the output fields - if (mode == scan) { - parms->outStringByteCount = 0; - for (i = 0; i < MAX_STRUCT_ARRAYS; i++) { - parms->outStructCount[i] = 0; - parms->outStructSizes[i] = 0; - } - } - - parms->byteCount = 0; - - // First entry in the table must be the base structure size - if (table[0][COL_1_TYPE] != APITYPE_BASE_STRUCT_LEN) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - - // If this is scan mode, fill in the output array size for top level structure - if (mode == scan) { - parms->outStructSizes[0] = table[0][COL_6_SIZE_OR_OFFSET]; - parms->outStructCount[0] = 1; - } - - for (i = 1; (table[i][COL_1_TYPE] != APITYPE_END_OF_TABLE) - && (parms->byteCount < parms->dataBufferSize); i++) { - dataType = table[i][COL_1_TYPE]; - switch (dataType) { - case APITYPE_INT1: - if (mode == populate) { - memcpy((parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET]), - parms->smapiBufferCursor, 1); - } - parms->smapiBufferCursor += 1; - parms->byteCount += 1; - break; - - case APITYPE_INT4: - if (mode == populate) { - GET_INT(*((int *) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "int 4 found Value %d stored at %p(+%d) \n", - *((int *) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])), - parms->inStructAddrs[0], table[i][COL_6_SIZE_OR_OFFSET]); - TRACE_END_DEBUG(vmapiContextP, line); - - } else - parms->smapiBufferCursor += 4; - parms->byteCount += 4; - break; - - case APITYPE_INT8: - if (mode == populate) { - GET_64INT(*((long long*) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - } else - parms->smapiBufferCursor += 8; - parms->byteCount += 8; - break; - - case APITYPE_STRING_LEN: - case APITYPE_CHARBUF_LEN: - case APITYPE_C_STR_PTR: - if (APITYPE_C_STR_PTR == dataType) { - temp = strlen(parms->smapiBufferCursor); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "C string found of length %d <%s>\n", temp, - parms->smapiBufferCursor); - TRACE_END_DEBUG(vmapiContextP, line); - parms->byteCount += (temp + 1); - } else { - GET_INT(temp, parms->smapiBufferCursor); - parms->byteCount += 4; - parms->byteCount += temp; - } - // If the string size is incorrect, display error and return. - if (temp < table[i][COL_2_MINSIZE]) // Check for less than min first - { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[i][COL_2_MINSIZE], table[i][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - // If max is not -1, then check for max - if (-1 != table[i][COL_3_MAXSIZE] && temp > table[i][COL_3_MAXSIZE]) { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[i][COL_2_MINSIZE], table[i][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - // If scan update the string byte count - if (mode == scan) { - if (temp > 0) { - parms->outStringByteCount += (temp + 1); - } - if (APITYPE_CHARBUF_LEN == dataType) // Skip past the buf count row in table - { - i++; - (parms->outStringByteCount)--; // Don't need null terminator for char buf - } - } else { // If populate then set the char * in struct; copy the string/charbuf into the buffer - if (temp > 0) { - *((char **) ((parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET]))) - = parms->inStringCursor; - - // If this ia a null terminated string just just strcpy, else use memcpy - if (APITYPE_C_STR_PTR == dataType) { - strcpy(parms->inStringCursor, parms->smapiBufferCursor); - parms->inStringCursor += temp + 1; - } else { - // copy the string/charbuf into the string buffer and add zero terminator if a string - memcpy(parms->inStringCursor, parms->smapiBufferCursor, - temp); - parms->inStringCursor += temp; - if (APITYPE_STRING_LEN == dataType) { - *(parms->inStringCursor) = '\0'; - parms->inStringCursor++; - } else // Char buffer, so no need to add null terminator, but must update count field - { - i++; - *((int*) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])) = temp; - } - } - } else { - *((char**) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])) = NULL; - if (APITYPE_CHARBUF_LEN == dataType) // Set char buf count to 0 - { - i++; - *((int*) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])) = 0; - } - } - } - if (APITYPE_C_STR_PTR == dataType) { - temp++; // Add on a byte for zero terminator - } - parms->smapiBufferCursor += temp; - break; - - case APITYPE_ARRAY_LEN: - // Call a subroutine to handle this - if (0 != (rc = handleArrays(vmapiContextP, mode, &i, table, parms))) - return rc; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "** Finished handling an array in parseBufferwithTable. Buffer pointer %p \n", - parms->smapiBufferCursor); - TRACE_END_DEBUG(vmapiContextP, line); - - break; - - // If null terminated strings are in the base structure, we need to - // find them all until we use up the buffer. They must be the last - // type of data in the stream. - // For scan mode we need to add up all the string lengths (adding in a byte - // for the null terminator) until the buffer is empty. - // The static table will have the APITYPE_C_STR_ARRAY_PTR, then APITYPE_C_STR_ARRAY_COUNT, - // APITYPE_C_STR_STRUCT_LEN, APITYPE_C_STR_PTR in that order. - case APITYPE_C_STR_ARRAY_PTR: - - cStringArrayPtrOffset = table[i][COL_6_SIZE_OR_OFFSET]; // Get the offset where the array ptr will be stored - cStringArrayPtrIndex = table[i][COL_4_STRUCT_INDEX];// Get the index of this field (should be 0 for this level) - - i++; // Get next table value; which must be the counter info - if (APITYPE_C_STR_ARRAY_COUNT != table[i][COL_1_TYPE]) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - cStringCounterFieldOffset = table[i][COL_6_SIZE_OR_OFFSET]; - cStringCounterFieldIndex = table[i][COL_4_STRUCT_INDEX]; - - i++; // Get next table value; which must be the c array structure size info - if (APITYPE_C_STR_STRUCT_LEN != table[i][COL_1_TYPE]) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - cStringStructSize = table[i][COL_6_SIZE_OR_OFFSET]; - cStringStructIndex = table[i][COL_4_STRUCT_INDEX]; - - i++; // Get next table value; which must be the char * offset in the structure - if (APITYPE_C_STR_PTR != table[i][COL_1_TYPE]) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - cStringFieldIndex = table[i][COL_4_STRUCT_INDEX]; - cStringFieldOffset = table[i][COL_6_SIZE_OR_OFFSET]; - - cStringCurrentStructCount = 0; // Used in populate - - // Look through the rest of the buffer. - while (parms->byteCount < parms->dataBufferSize) { - iSize = strlen(parms->smapiBufferCursor) + 1; - // If this is scan, then increment the c string structure count, - // add the output size of the string + byte for zero terminator, and - // move buffer pointer past the string. Increment our count of data bytes - // processed also. - if (mode == scan) { - parms->outStringByteCount += iSize; - parms->smapiBufferCursor += iSize; - parms->outStructCount[cStringStructIndex]++;// Structures hold the char * - - // If the size of the char * structure has not been filled in, do that now - if (0 == parms->outStructSizes[cStringStructIndex]) { - parms->outStructSizes[cStringStructIndex] - = cStringStructSize; - } - } - // If populate, copy the string to the storage area, - // store the pointer to the string in the correct array structure, - // then move to next string. - else { - // If this is the first string/structure, then set the structure pointer to to the - // starting address. The array notation will handle the rest of the addresses. - if (0 == cStringCurrentStructCount) { - *(char **) (parms->inStructAddrs[cStringArrayPtrIndex] - + cStringArrayPtrOffset) - = parms->inStructAddrs[cStringStructIndex]; - - // Copy the struct count from the scan (input to this populate) into the - // count field - *((int *) (parms->inStructAddrs[cStringCounterFieldIndex] - + cStringCounterFieldOffset)) - = parms->outStructCount[cStringStructIndex]; - } - - // Copy the string into the string buffer - strcpy(parms->inStringCursor, parms->smapiBufferCursor); - - // Set the char * pointer in the c structure of char *'s - memcpy((parms->inStructAddrs[cStringStructIndex] - + (cStringCurrentStructCount * cStringStructSize) - + cStringFieldOffset), &(parms->inStringCursor), - sizeof(char *)); - - // Advance to next string storage location and structure counter - parms->inStringCursor += iSize; - parms->smapiBufferCursor += iSize; - - cStringCurrentStructCount++; - } - parms->byteCount += iSize; - }// End while buffer has data - - break; - - case APITYPE_ARRAY_STRUCT_COUNT: // Should not get here, subroutine should be handling this - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - - default: // Error - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - }// End switch on table type - - if (parms->byteCount >= parms->dataBufferSize) { - reachedByteCount = 1; - break; // End of for loop (Will we always get here vs find the last entry in the table?) - } - }// For loop until end of table - return 0; -} - -/** - * Routine for doing all processing when an array is found. - * Can be recursively called if nested arrays - */ -static int handleArrays(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, int * tableStartingIndex, - tableLayout table, tableParserParms *parms) { - // At our calling the table index should be at the arrayLen field, and next field should be - // struct len details. - int arrayByteMax, arrayByteCount, arrayPointerOffset, arrayPointerIndex, j, - dataType; - int dataBuffStructSize, outStructSize, structIndex, structByteCount; - int tableIndex, tableMaxIndex, temp, rc, arrayNestLevel; - int structCounter, structCounterField, structCounterIndex; - int noBufferStructLen; // set to 1 if SMAPI array doesn't have an inner structure length - char * structStorage; - char line[LINESIZE]; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, - "** Array found. Starting table index is %d buffer pointer %p \n", - *tableStartingIndex, parms->smapiBufferCursor); - TRACE_END_DEBUG(vmapiContextP, line); - - arrayByteCount = 0; - tableMaxIndex = 0; // Used to find end of table entries for this structure - structCounter = 0; // Used for populate of structure (an address multiplier) - - GET_INT(arrayByteMax, parms->smapiBufferCursor);// Actual size of SMAPI array data - - arrayPointerOffset = table[*tableStartingIndex][COL_6_SIZE_OR_OFFSET]; - arrayPointerIndex = table[*tableStartingIndex][COL_4_STRUCT_INDEX]; - arrayNestLevel = table[*tableStartingIndex][COL_5_NEST_LEVEL]; - (*tableStartingIndex)++; // Position at the struct len in this table (or struct count) - - // If the struct count field was specified, then make a note of that for populate step - if (APITYPE_ARRAY_STRUCT_COUNT == table[*tableStartingIndex][COL_1_TYPE]) { - if (mode == populate) { - structCounterField - = table[*tableStartingIndex][COL_6_SIZE_OR_OFFSET]; - structCounterIndex = table[*tableStartingIndex][COL_4_STRUCT_INDEX]; - } else { - structCounterField = 0; - structCounterIndex = 0; - } - (*tableStartingIndex)++; // Position at the struct length APITYPE_STRUCT_LEN - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "SMAPI buffer array found: %d bytes \n", arrayByteMax); - TRACE_END_DEBUG(vmapiContextP, line); - - structIndex = table[*tableStartingIndex][COL_4_STRUCT_INDEX]; - outStructSize = table[*tableStartingIndex][COL_6_SIZE_OR_OFFSET]; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Output struct size is %d \n", outStructSize); - TRACE_END_DEBUG(vmapiContextP, line); - - // Figure out where is the ending index of the structure. This will be used in case the - // array is empty or the size of the structure is larger than we expect. (The actual - // structure could be bigger if the next release of SMAPI adds more fields at the end.) - tableMaxIndex = *tableStartingIndex; - while (arrayNestLevel < table[tableMaxIndex + 1][COL_5_NEST_LEVEL] - && APITYPE_END_OF_TABLE != table[tableMaxIndex + 1][COL_1_TYPE]) { - tableMaxIndex++; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Structure's table max index is %d \n", tableMaxIndex); - TRACE_END_DEBUG(vmapiContextP, line); - - // Find each structure until we reach array max - while (arrayByteCount < arrayByteMax) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Loop to scan buffer for structure data. \n"); - TRACE_END_DEBUG(vmapiContextP, line); - noBufferStructLen = 0; - tableIndex = *tableStartingIndex; - // Start at the field past the array in the table - // next table field should be the array structure size or if no nested inner structure - // the NOBUFFER keyword - if ((APITYPE_STRUCT_LEN != table[tableIndex][COL_1_TYPE]) - && (APITYPE_NOBUFFER_STRUCT_LEN - != table[tableIndex][COL_1_TYPE])) { - printf("table index %d column1 type: %d \n", tableIndex, - table[tableIndex][COL_1_TYPE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - structByteCount = 0; - - GET_INT(dataBuffStructSize, parms->smapiBufferCursor); - // If the SMAPI buffer does not contain a nested structure size, then set - // the data pointer back to make the "implied" structure. - if (APITYPE_NOBUFFER_STRUCT_LEN == table[tableIndex][COL_1_TYPE]) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - " There is no inner structure length, so this length %d is first item, back up to re-read it later. \n", - dataBuffStructSize); - TRACE_END_DEBUG(vmapiContextP, line); - parms->smapiBufferCursor -= 4; - noBufferStructLen = 1; // set flag so that correct count at bottom of loop is done - } - - if (mode == scan) { - parms->outStructCount[structIndex]++; - // If the size of the structure has not been filled in, do that now - if (0 == parms->outStructSizes[structIndex]) { - parms->outStructSizes[structIndex] - = table[tableIndex][COL_6_SIZE_OR_OFFSET]; - } - } else { // If populate and structCounterField specified, then fill it in - if (0 == structCounter) { - *(char **) (parms->inStructAddrs[arrayPointerIndex] - + arrayPointerOffset) - = parms->inStructAddrs[structIndex]; - } - if (structCounterField) { - *((int *) (parms->inStructAddrs[structCounterIndex] - + structCounterField)) - = parms->outStructCount[structIndex]; - } - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - if (noBufferStructLen == 1) { - sprintf( - line, - " table index %d implied Array struct index %d first data item size %d\n", - tableIndex, structIndex, dataBuffStructSize); - } else { - sprintf(line, - " table index %d Array struct index %d data size %d\n", - tableIndex, structIndex, dataBuffStructSize); - } - TRACE_END_DEBUG(vmapiContextP, line); - if (dataBuffStructSize == 0) - continue; // Probably rare? - - - tableIndex++; - // Loop until reaching the end of the table or if an imbedded structure size, - // When the data has been all read. - while ((noBufferStructLen == 0 - && (structByteCount < dataBuffStructSize)) - || (noBufferStructLen && (tableIndex <= tableMaxIndex))) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - " noBufferStructLen %d structByteCount %d table index %d \n", - noBufferStructLen, structByteCount, tableIndex); - TRACE_END_DEBUG(vmapiContextP, line); - - // If we are at the end of this table, then adjust the byte count and leave - // this loop. This would happen if there is more data than we expect. (A newer - // version of SMAPI may of added more fields at the end. - if (tableIndex > tableMaxIndex) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - " Reached the end of the table. Unexpected condition. Table index %d \n", - tableIndex); - TRACE_END_DEBUG(vmapiContextP, line); - structByteCount = dataBuffStructSize; - break; - } - - dataType = table[tableIndex][0]; - switch (dataType) { - case APITYPE_INT1: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Int1 found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - if (mode == populate) { - memcpy((parms->inStructAddrs[structIndex] + (structCounter - * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET]), - parms->smapiBufferCursor, 1); - } - parms->smapiBufferCursor += 1; - structByteCount += 1; - break; - - case APITYPE_INT4: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Int4 found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - if (mode == populate) { - GET_INT(*((int*) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "int 4 found Value %d stored at %p(+%d) \n", - *((int *) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->inStructAddrs[structIndex], - table[tableIndex][COL_6_SIZE_OR_OFFSET]); - TRACE_END_DEBUG(vmapiContextP, line); - } else - parms->smapiBufferCursor += 4; - - structByteCount += 4; - break; - - case APITYPE_INT8: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Int8 found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - if (mode == populate) { - GET_64INT(*((long long*) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - } else - parms->smapiBufferCursor += 8; - structByteCount += 8; - break; - - case APITYPE_STRING_LEN: - case APITYPE_CHARBUF_LEN: - case APITYPE_C_STR_PTR: - if (APITYPE_C_STR_PTR == dataType) { - temp = strlen(parms->smapiBufferCursor); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " C string found. Length %d\n", temp); - TRACE_END_DEBUG(vmapiContextP, line); - } else { - GET_INT(temp, parms->smapiBufferCursor); - structByteCount += 4; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - if (dataType == APITYPE_CHARBUF_LEN) { - sprintf(line, " Charbuf with length %d found.\n", temp); - } else { - sprintf(line, " String with length %d found.\n", temp); - } - TRACE_END_DEBUG(vmapiContextP, line); - } - - // If the string size is incorrect, display error and return. - if (temp < table[tableIndex][COL_2_MINSIZE]) // Check for less than min first - { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[tableIndex][COL_2_MINSIZE], - table[tableIndex][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - // If max is not -1, then check for max - if (-1 != table[tableIndex][COL_3_MAXSIZE] && temp - > table[tableIndex][COL_3_MAXSIZE]) { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[tableIndex][COL_2_MINSIZE], - table[tableIndex][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - - // If scan update the string byte count - if (mode == scan) { - if (temp > 0) { - parms->outStringByteCount += (temp + 1); - } - if (dataType == APITYPE_CHARBUF_LEN) { - tableIndex++; // Position at the char buf count in the table - } - } else { // If populate then set the char * in struct; copy the string into the buffer - if (temp > 0) { - *((char **) ((parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET]))) - = parms->inStringCursor; - - // If this ia a null terminated string just just strcpy, else use memcpy - if (APITYPE_C_STR_PTR == dataType) { - strcpy(parms->inStringCursor, - parms->smapiBufferCursor); - parms->inStringCursor += temp + 1; - } else { - // Copy the string into the string buffer and add zero terminator - TRACE_START(vmapiContextP, - TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "Memcopying string data from %p into %p for length %d \n", - parms->smapiBufferCursor, - parms->inStringCursor, temp); - TRACE_END_DEBUG(vmapiContextP, line); - memcpy(parms->inStringCursor, - parms->smapiBufferCursor, temp); - parms->inStringCursor += temp; - - if (APITYPE_STRING_LEN == dataType) { - *parms->inStringCursor = '\0'; - parms->inStringCursor++; - TRACE_START(vmapiContextP, - TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "String found Value '%s' next avail struct pointer %p \n", - *((char**) (parms->inStructAddrs[structIndex] - + (structCounter - * outStructSize) - + +table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->inStringCursor); - TRACE_END_DEBUG(vmapiContextP, line); - } else // Char buffer, so no need to add null terminator, but must update count field - { - tableIndex++; // Position at the char buf count in the table - *((int*) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])) - = temp; - TRACE_START(vmapiContextP, - TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "Charbuf count at table index %d updated \n", - tableIndex); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - } else { - *((char**) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])) - = NULL; - } - } - if (APITYPE_C_STR_PTR == dataType) { - temp++; // Add on a byte for zero terminator - } - parms->smapiBufferCursor += temp; - structByteCount += temp; - break; - - case APITYPE_ARRAY_LEN: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Array found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - // Call a subroutine to handle this - if (0 != (rc = handleArrays(vmapiContextP, mode, &tableIndex, - table, parms))) - return rc; - - break; - - case APITYPE_ARRAY_STRUCT_COUNT: // Should not get here, subroutine should be handling this - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - - default: // Error - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - } - tableIndex++; - } - structCounter++; - - if (noBufferStructLen) { - arrayByteCount += structByteCount; - } else { - arrayByteCount += structByteCount + 4; // Add in struct len field also - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " current arrayByteCount subtotal is %d \n", - arrayByteCount); - TRACE_END_DEBUG(vmapiContextP, line); - } - *tableStartingIndex = tableMaxIndex; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "table starting Index on return is %d \n", - *tableStartingIndex); - TRACE_END_DEBUG(vmapiContextP, line); - return 0; -} - -/** - * This helper function will handle connecting and reading of the SMAPI buffer data. - */ -int getAndParseSmapiBuffer( - struct _VmApiInternalContext* vmapiContextP, - char * * inputPp, // input buffer pointer pointer - int inputSize, tableLayout parserTable, char * parserTableName, - char * * outData //Output pointer for base structure -) { - int sockDesc; - tableParserParms parserParms; - int requestId; - int tempSize; - int * pReturnCode; - int * pReasonCode; - int rc, i, j; - char line[BUFLEN]; - char * smapiOutputP = 0; - rc = 0; - const int SLEEP_TIMES[SEND_RETRY_LIMIT] = { 0, 8, 16, 16 }; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "Table being parsed: <%s> \n", parserTableName); - TRACE_END_DEBUG(vmapiContextP, line); - - // Initialize our socket - if (0 != (rc = smSocketInitialize(vmapiContextP, &sockDesc))) { - FREE_MEMORY(*inputPp); - return rc; - } - TRACE_START(vmapiContextP, TRACEAREA_SMAPI_ONLY, TRACELEVEL_DETAILS); - sprintf(line, "Socket write starting for <%s> \n", parserTableName); - TRACE_END_DEBUG(vmapiContextP, line); - - // Retry the send if the error detected is ok to retry - for (j = 0;; j++) { - if (0 != (rc = smSocketWrite(vmapiContextP, sockDesc, *inputPp, - inputSize))) { - if (rc == SOCKET_WRITE_RETRYABLE_ERROR) { - if (j < SEND_RETRY_LIMIT) { - // Delay for a while to give SMAPI some time to restart - if (SLEEP_TIMES[j] > 0) { - sleep(SLEEP_TIMES[j]); - } - continue; - } - // Change the internal return code to general write one - rc = SOCKET_WRITE_ERROR; - } - FREE_MEMORY(*inputPp); - TRACE_START(vmapiContextP, TRACEAREA_SMAPI_ONLY, TRACELEVEL_DETAILS); - sprintf( - line, - "Socket write for <%s> did not complete after %d retries \n", - parserTableName, SEND_RETRY_LIMIT); - TRACE_END_DEBUG(vmapiContextP, line); - return rc; - } - break; - } - - FREE_MEMORY(*inputPp); - - // Get the request id - if (0 - != (rc = smSocketRead(vmapiContextP, sockDesc, (char*) &requestId, - 4))) { - sprintf(line, "Socket %d receive of the requestId failed\n", sockDesc); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsUnexpected, line); - return rc; - } - - // Read in the output length - if (0 - != (rc = smSocketRead(vmapiContextP, sockDesc, (char *) &tempSize, - 4))) { - sprintf(line, "Socket %d receive of the buffer length failed\n", - sockDesc); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsUnexpected, line); - return rc; - } - tempSize = ntohl(tempSize); - - // Read in the rest of the output buffer - if (tempSize >= (3* 4 )) // Must have at least 3 more ints - { - if (0 == (smapiOutputP = malloc(tempSize))) { - sprintf(line, "Insufficiant memory (request=%d bytes)\n", tempSize); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsNoMemory, line); - return MEMORY_ERROR; - } - - if (0 != (rc = smSocketRead(vmapiContextP, sockDesc, smapiOutputP, - tempSize))) { - FREE_MEMORY(smapiOutputP); - return rc; - } - - if (0 != (rc = smSocketTerminate(vmapiContextP, sockDesc))) { - FREE_MEMORY(smapiOutputP); - return rc; - } - - TRACE_START(vmapiContextP, TRACEAREA_SMAPI_ONLY, TRACELEVEL_DETAILS); - pReturnCode = (int *) (smapiOutputP + 4); - pReasonCode = (int *) (smapiOutputP + 8); - sprintf(line, "SMAPI return code %d reason code %d \n", *pReturnCode, - *pReasonCode); - TRACE_END_DEBUG(vmapiContextP, line); - - // Scan the SMAPI output data to get sizes of structures and strings. - // A non zero return code indicates errors. - parserParms.smapiBufferCursor = smapiOutputP; - parserParms.dataBufferSize = tempSize; - - rc = parseBufferWithTable(vmapiContextP, scan, parserTable, - &parserParms); - if (rc != 0) { - // If we have an error because of invalid string size, dump out the - // buffer to help with diagnosis. Limit the dump to 5000 characters - if (rc == PARSER_ERROR_INVALID_STRING_SIZE) { - if (tempSize > 5000) { - dumpArea(vmapiContextP, smapiOutputP, 5000); - } else { - dumpArea(vmapiContextP, smapiOutputP, tempSize); - } - - } - FREE_MEMORY(smapiOutputP); - return rc; - } - - // We can add up all the storage or get each structure independently, do independent for now - for (i = 0; i < MAX_STRUCT_ARRAYS; i++) { - if (parserParms.outStructSizes[i] == 0 - || parserParms.outStructCount[i] == 0) - continue; - parserParms.inStructAddrs[i] = smMemoryGroupAlloc(vmapiContextP, - parserParms.outStructSizes[i] - * parserParms.outStructCount[i]); - if (parserParms.inStructAddrs[i] == 0) { - FREE_MEMORY(smapiOutputP); - sprintf(line, "Insufficiant memory (request=%d bytes)\n", - parserParms.outStructSizes[i] - * parserParms.outStructCount[i]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return MEMORY_ERROR; - } - } - - // If any string data, just get one chunk of storage for that - if (parserParms.outStringByteCount > 0) { - parserParms.inStringCursor = smMemoryGroupAlloc(vmapiContextP, - parserParms.outStringByteCount); - if (parserParms.inStringCursor == 0) { - FREE_MEMORY(smapiOutputP); - sprintf(line, "Insufficiant memory (request=%d bytes)\n", - parserParms.outStringByteCount); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return MEMORY_ERROR; - } - } - - // Set the output pointer to the level 0 structure's storage - *outData = parserParms.inStructAddrs[0]; - - parserParms.smapiBufferCursor = smapiOutputP; // reset the output cursor pointer - - rc = parseBufferWithTable(vmapiContextP, populate, parserTable, - &parserParms); - if (rc != 0) { - FREE_MEMORY(smapiOutputP); - return rc; - } - - } else { - sprintf(line, "Insufficiant memory (request=%d bytes)/n", - parserParms.outStringByteCount); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, line); - return INVALID_DATA; // Not enough data returned - } - FREE_MEMORY(smapiOutputP); - return 0; -} diff --git a/zhcp/BUILD/resource_access/src/smapiUtilities.c b/zhcp/BUILD/resource_access/src/smapiUtilities.c deleted file mode 100644 index 5dca5fa..0000000 --- a/zhcp/BUILD/resource_access/src/smapiUtilities.c +++ /dev/null @@ -1,2265 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smPublic.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "vmapiSystem.h" -#include "vmapiAsynchronous.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include "smSocket.h" - -#define VMAPILIB "libvmapi.so" - -int vmbkendSockaddrFileInfo(struct _VmApiInternalContext* vmapiContextP, - int readOrWrite, struct sockaddr_in *saddr); - -// Externally visible storage for trace -smTrace externSmapiTraceFlags = { 0 }; - -// Semaphore locking fields for trace and the backend -enum SemaphoreIndex { - ContextSemaphoreIndex = 0, TraceSemaphoreIndex = 1, - BackendSemaphoreIndex = 2, NumberOfSemaphores -}; - -// ------------ Context ones ------------ -static struct sembuf contextSemaphoreReserve[] = { ContextSemaphoreIndex, -1, - SEM_UNDO }; -static const int contextSemaphoreReserveN = sizeof(contextSemaphoreReserve) - / sizeof(contextSemaphoreReserve[0]); - -static struct sembuf contextSemaphoreRelease[] = { ContextSemaphoreIndex, 1, - SEM_UNDO }; -static const int contextSemaphoreReleaseN = sizeof(contextSemaphoreRelease) - / sizeof(contextSemaphoreRelease[0]); - -// ------------ Trace ones ------------ -static struct sembuf traceSemaphoreReserve[] = { TraceSemaphoreIndex, -1, - SEM_UNDO }; -static const int traceSemaphoreReserveN = sizeof(traceSemaphoreReserve) - / sizeof(traceSemaphoreReserve[0]); - -static struct sembuf traceSemaphoreRelease[] = { TraceSemaphoreIndex, 1, - SEM_UNDO }; -static const int traceSemaphoreReleaseN = sizeof(traceSemaphoreRelease) - / sizeof(traceSemaphoreRelease[0]); - -// ------------ VMbackend ones ------------ -static struct sembuf backendSemaphoreReserve[] = { BackendSemaphoreIndex, -1, - SEM_UNDO }; -static const int backendSemaphoreReserveN = sizeof(backendSemaphoreReserve) - / sizeof(backendSemaphoreReserve[0]); - -static struct sembuf backendSemaphoreRelease[] = { BackendSemaphoreIndex, 1, - SEM_UNDO }; -static const int backendSemaphoreReleaseN = sizeof(backendSemaphoreRelease) - / sizeof(backendSemaphoreRelease[0]); - -pthread_mutex_t mutex; -pthread_cond_t thread_initialized_cv; - -int checkAbbreviation(const char* aStringP, - const Abbreviation* anAbbreviationListP, int anAbbreviationN) { - - int x; - int checkL; - int stringL; - - int isAbbreviation = 0; - if (aStringP == 0) - return 0; - - stringL = strlen(aStringP); - - for (x = 0; x < anAbbreviationN; ++x) { - checkL = anAbbreviationListP[x].minimum; - if (checkL > stringL) - continue; - if (0 == strncasecmp(aStringP, anAbbreviationListP[x].nameP, checkL)) { - isAbbreviation = 1; - break; - } - } - - return isAbbreviation; - -} - -int checkBoolean(const char* aStringP) { - - const Abbreviation booleanTrues[] = { { "TRUE", 1 }, { "YES", 1 }, - { "1", 1 } }; - - return checkAbbreviation(aStringP, booleanTrues, (sizeof(booleanTrues) - / sizeof(booleanTrues[0]))); - -} - -int checkPrefixCommand(const char* aCommandP) { - - const Abbreviation prefixCommands[] = { { "REQUEST", 3 }, { "TOSYS", 5 }, { - "TONODE", 6 }, { "ASUSER", 2 }, { "BYUSER", 2 }, { "FORUSER", 3 }, - { "PRESET", 6 }, { "MULTIUSER", 5 }, { "ATNODE", 6 }, - { "ATSYS", 5 } }; - - return checkAbbreviation(aCommandP, prefixCommands, (sizeof(prefixCommands) - / sizeof(prefixCommands[0]))); - -} - -const char* -contextGetMessageFilename(struct _VmApiInternalContext* vmapiContextP, - char* aBufferP, int aBufferS) { - - char line[LINESIZE]; - int len = 0; - const char* msgName = "messages"; - const char* msgSuffixName = ".eng"; // Language-dependent - char* pathP = 0; - int pathL = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Obtain VMAPI environment variable - memset(aBufferP, 0, aBufferS); - pathP = getenv("VMAPI"); - - if (pathP) { - pathL = strlen(pathP); - len = pathL + 12; // Adjust once we know NLS file structure - if (len > aBufferS) { - sprintf( - line, - "contextGetMessageFilename: Insufficient path buffer size; needed %d, have %d.", - len, (aBufferS - 1)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcContext, - RsInternalBufferTooSmall, line); - } - strncpy(aBufferP, pathP, pathL); - if (aBufferP[pathL - 1] == '/') { - strcat(aBufferP, ".cimvm/"); - } else { - strcat(aBufferP, "/.cimvm/"); - } - } else { - strcpy(aBufferP, "/root/.cimvm/"); - } - - strcat(aBufferP, msgName); // Adjust when we know real NLS stuff - strcat(aBufferP, msgSuffixName); - - return aBufferP; - -} - -int createDirectories(const char* aFilenameP) { - - int filenameL = strlen(aFilenameP); - char filename[LINESIZE]; - int rc; - char* sP = 0; - char* eP = 0; - - if (filenameL >= (sizeof(filename) - 1)) - return 0; - - memset(filename, 0, sizeof(filename)); - strcpy(filename, aFilenameP); - - sP = filename; - eP = filename + sizeof(filename) - 1; - while ((sP < eP) && (sP = strchr(sP + 1, '/'))) { - *sP = '\0'; - mkdir(filename, S_IRWXU); - *sP = '/'; - } - - return 0; - -} - -int initializeThreadSemaphores(struct _VmApiInternalContext* vmapiContextP, - const char* aContextNameP, int aCreateFlag) { - char pathAndFile[PATHLENGTH + strlen(CACHE_SEMAPHORE_FILENAME)]; - FILE* idFileP = 0; - int len = 0; - char line[LINESIZE]; - const char* logFilenameP = 0; - union semun { - int val; - struct semid_ds* buf; - ushort* array; - } semArgument; - int semInitRequired = 0; - int pathLength = 0; - char* pathPtr = 0; - int rc = 0; - int savedSize = 0; - - memset(vmapiContextP->path, 0, sizeof(vmapiContextP->path)); // Clear out path string - memset(pathAndFile, 0, sizeof(pathAndFile)); - - // Save the name passed in; into the context if specified - if (strlen(aContextNameP) > 0) { - strncpy(vmapiContextP->name, aContextNameP, sizeof(vmapiContextP->name) - - 1); - } - - // Obtain VMAPI environment variable - pathPtr = getenv("ZVMMAP_VAR"); - if (pathPtr) { // ZVMMAP_VAR is defined - pathLength = strlen(pathPtr); - len = pathLength + strlen(CACHE_SEMAPHORE_DIRECTORY); - if (len > sizeof(pathAndFile)) { - sprintf( - line, - "contextReserve: Insufficient path buffer size; needed %d, have %d.", - len, sizeof(pathAndFile) - 1); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcContext, - RsInternalBufferTooSmall, line); - return PROCESSING_ERROR; - } - strncpy(vmapiContextP->path, pathPtr, sizeof(vmapiContextP->path) - - (strlen(CACHE_SEMAPHORE_DIRECTORY) + 2)); - len = strlen(vmapiContextP->path); - if (vmapiContextP->path[len - 1] == '/') { - strcat(vmapiContextP->path, CACHE_SEMAPHORE_DIRECTORY); // Add on .vmapi/ directory - } else { - strcat(vmapiContextP->path, "/"); - strcat(vmapiContextP->path, CACHE_SEMAPHORE_DIRECTORY); - } - } else { // ZVMMAP_VAR is undefined, set default - strcpy(vmapiContextP->path, CACHE_PATH_DEFAULT); - } - - // Create or obtain semaphore set - strcpy(pathAndFile, vmapiContextP->path); - strcat(pathAndFile, CACHE_SEMAPHORE_FILENAME); - createDirectories(pathAndFile); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: Semaphore file name is %s \n", - pathAndFile); - TRACE_END_DEBUG(vmapiContextP, line); - - // Try to open or create a file that can be used for semaphore handle - FILE* semFileP = fopen(pathAndFile, "r"); - if (!semFileP) { - semFileP = fopen(pathAndFile, "w"); - } - if (semFileP) { - fclose(semFileP); - } - - vmapiContextP->semKey = ftok(pathAndFile, 'V'); - vmapiContextP->semId = semget(vmapiContextP->semKey, 2, 0600); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: semKey = %d \n", - vmapiContextP->semKey); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: semId = %d \n", - vmapiContextP->semId); - TRACE_END_DEBUG(vmapiContextP, line); - - if ((0 > vmapiContextP->semId) && (ENOENT == errno)) { - semInitRequired = 1; - vmapiContextP->semId = semget(vmapiContextP->semKey, - NumberOfSemaphores, 0600 | IPC_CREAT); - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: semInitRequired = %d \n", - semInitRequired); - TRACE_END_DEBUG(vmapiContextP, line); - - if (0 > vmapiContextP->semId) { - sprintf( - line, - "contextReserve: Unable to create semaphore array identified by %s; errno=%d text: %s", - pathAndFile, errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - - if (semInitRequired) { - semArgument.val = 1; - rc = semctl(vmapiContextP->semId, TraceSemaphoreIndex, SETVAL, - semArgument); - if (0 > rc) { - sprintf(line, - "Unable to initialize Trace semaphore; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - - rc = semctl(vmapiContextP->semId, BackendSemaphoreIndex, SETVAL, - semArgument); - if (0 > rc) { - sprintf( - line, - "Unable to initialize Backend semaphore; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - rc = semctl(vmapiContextP->semId, ContextSemaphoreIndex, SETVAL, - semArgument); - if (0 > rc) { - sprintf( - line, - "Unable to initialize context semaphore; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - } - - // Obtain the Context semaphore before manipulating context related stuff - rc = semop(vmapiContextP->semId, contextSemaphoreReserve, - contextSemaphoreReserveN); - if (rc < 0) { - sprintf(line, - "contextReserve: semop (decrement) failed; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotObtained, line); - return PROCESSING_ERROR; - } - - // Create or obtain context for the name passed in - strcpy(pathAndFile, vmapiContextP->path); - strcat(pathAndFile, CACHE_DIRECTORY); - createDirectories(pathAndFile); - - // Release the Context semaphore after manipulating context related stuff - rc = semop(vmapiContextP->semId, contextSemaphoreRelease, - contextSemaphoreReleaseN); - if (rc < 0) { - sprintf(line, - "contextReserve: semop (increment) failed, errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotReleased, line); - return PROCESSING_ERROR; - } - vmapiContextP->contextCreatedFlag = 1; // Set flag to indicate context set up - return 0; -} - -/** - * Unit test code - */ -void dumpArea(struct _VmApiInternalContext* vmapiContextP, void * pstor, - int len) { - unsigned int offset, i, j, k; - char trans[17]; - char line[LINESIZE]; - char phrase[80]; - unsigned char storByte; - int transAvail; - offset = 0; - transAvail = 0; - for (k = 0; k < sizeof(trans); k++) { - trans[k] = '\0'; - } - - storByte = *((char *) pstor); - sprintf(line, "=== dump of area %p for length %d ", pstor, len); - for (i = 0; i < len; i++) { - j = i % 16; - if (j == 0) { - if (transAvail) { - sprintf(phrase, " %s", trans); - strcat(line, phrase); - for (k = 0; k < sizeof(trans); k++) { - trans[k] = '\0'; - } - transAvail = 0; - } - strcat(line, "\n"); - logLine(vmapiContextP, LOGLINE_DEBUG, line); - sprintf(line, "%6d %14p ", offset, (pstor + offset)); - offset += 16; - } else if (0 == (k = i % 4)) { - strcat(line, " "); - } - storByte = *((char*) (pstor + i)); - if (isprint(storByte)) { - trans[j] = storByte; - } else { - trans[j] = '.'; - } - transAvail = 1; - - sprintf(phrase, "%02X", storByte); - strcat(line, phrase); - - } - if (transAvail) { - for (k = j + 1; k < 16; k++) { - if (0 == k % 4) { - strcat(line, " "); - } - strcat(line, " "); - } - sprintf(phrase, " %s", trans); - strcat(line, phrase); - } - strcat(line, "\n"); - logLine(vmapiContextP, LOGLINE_DEBUG, line); -} - -void errorLog(struct _VmApiInternalContext* vmapiContextP, - const char * functionName, const char * lineNumber, int aRc, - int aReason, const char* aLineP) { - - char line[LINESIZE]; - - sprintf(line, "%s:%s %s", functionName, lineNumber, aLineP); - - vmapiContextP->rc = aRc; - vmapiContextP->reason = aReason; - errorLine(vmapiContextP, line); - -} - -void errorLine(struct _VmApiInternalContext* vmapiContextP, const char* aLineP) { - int lineL = strlen(aLineP); - - logLine(vmapiContextP, 'E', aLineP); - - // If this is the first error for this context, save it - if (!vmapiContextP->firstFailureCaptured) { - strncpy(vmapiContextP->strFirstFailureMsg, aLineP, - FIRST_FAILURE_MESSAGE_MAX_LEN); - vmapiContextP->strFirstFailureMsg[FIRST_FAILURE_MESSAGE_MAX_LEN] = '\0'; - vmapiContextP->firstFailureCaptured = 1; // 1:true - } - -} - -char* -getArg(int anIndex, int anArgc, const char** anArgvPP, const char* aDefaultP) { - - int x = anIndex; - - if (x > (anArgc - 1)) - return (char*) aDefaultP; - - return (char*) (anArgvPP[x] ? anArgvPP[x] : aDefaultP); - -} - -Dedicate* -getDedicates(struct _VmApiInternalContext* vmapiContextP) { - - char* itemP = 0; - Record* recordP = 0; - - char* lastP = 0; - char line[LINESIZE]; - char tokenLine[LINESIZE]; - - Dedicate* currentDedicateP = 0; - Dedicate* dedicatesP = 0; - Dedicate* newDedicateP = 0; - - recordP = vmapiContextP->outputStream.currentP; - - while (recordP) { - - strncpy(tokenLine, recordP->data, sizeof(tokenLine)); - - itemP = strtok_r(tokenLine, " ", &lastP); - - if (itemP && (0 == strcmp(itemP, "DEDICATE"))) { - - newDedicateP = calloc(1, sizeof(Dedicate)); - if (newDedicateP == 0) { - while (dedicatesP != 0) { - currentDedicateP = dedicatesP->nextP; - free(dedicatesP); - dedicatesP = currentDedicateP; - } - sprintf(line, "%s: Insufficiant memory (request=%d bytes)", - "getDedicates", sizeof(Dedicate)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return 0; - } - - if (currentDedicateP == 0) { - dedicatesP = newDedicateP; - currentDedicateP = newDedicateP; - } else { - currentDedicateP->nextP = newDedicateP; - currentDedicateP = newDedicateP; - } - newDedicateP->nextP = 0; - - itemP = strtok_r(0, " ", &lastP); - if (itemP) { - sscanf(itemP, "%x", &(newDedicateP->vnum)); - itemP = strtok_r(0, " ", &lastP); - } - - if (itemP) { - sscanf(itemP, "%x", &(newDedicateP->rnum)); - itemP = strtok_r(0, " ", &lastP); - } - - } - - recordP = recordP->nextP; - - } - - return dedicatesP; - -} - -Minidisk* -getMinidisks(struct _VmApiInternalContext* vmapiContextP) { - - char* itemP; - Record* recordP = 0; - - char* lastP = 0; - char line[LINESIZE]; - char tokenLine[LINESIZE]; - - Minidisk* currentMinidiskP = 0; - Minidisk* minidisksP = 0; - Minidisk* newMinidiskP = 0; - - recordP = vmapiContextP->outputStream.firstP; - - while (recordP) { - - strncpy(tokenLine, recordP->data, sizeof(tokenLine)); - itemP = strtok_r(tokenLine, " ", &lastP); - - if (itemP && (0 == strcmp(itemP, "MDISK"))) { - - newMinidiskP = calloc(1, sizeof(Minidisk)); - if (newMinidiskP == 0) { - while (minidisksP != 0) { - currentMinidiskP = minidisksP->nextP; - free(minidisksP); - minidisksP = currentMinidiskP; - } - sprintf(line, "%s: Insufficiant memory (request=%d bytes)", - "getMinidisks", sizeof(Minidisk)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return 0; - } - - if (currentMinidiskP == 0) { - minidisksP = newMinidiskP; - currentMinidiskP = newMinidiskP; - } else { - currentMinidiskP->nextP = newMinidiskP; - currentMinidiskP = newMinidiskP; - } - - newMinidiskP->nextP = 0; - itemP = strtok_r(0, " ", &lastP); - if (itemP) { - sscanf(itemP, "%x", &(newMinidiskP->address)); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - strncpy(newMinidiskP->type, itemP, sizeof(newMinidiskP->type)); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - sscanf(itemP, "%d", &newMinidiskP->location); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - sscanf(itemP, "%d", &newMinidiskP->extent); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - strncpy(newMinidiskP->volser, itemP, - sizeof(newMinidiskP->volser)); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - strncpy(newMinidiskP->mode, itemP, sizeof(newMinidiskP->mode)); - } - - } - - recordP = recordP->nextP; - - } - - return minidisksP; - -} - -/** - * Return 1 If a real device number is of an OSA type - * 0 Otherwise (or on failure to check) - */ -int isOSA(struct _VmApiInternalContext* vmapiContextP, char* rdev) { - smMemoryGroupContext localMemoryGroup; - smMemoryGroupContext * saveMemoryGroup; - vmApiSystemIoQueryOutput * ptrCommandOutput; - char *tokptr; - char *delim = " "; - char *tok; - int osaFound = 0; - int x; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - - smMemoryGroupInitialize(vmapiContextP); - - if (smSystem_IO_Query(vmapiContextP, rdev, &ptrCommandOutput)) { - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - return osaFound; - } - - // Loop through all the output found looking for "OSA", "OSD", or "IQDC" - // Output string will be "chpid string" or just "chpid" - for (x = 0; x < ptrCommandOutput->chipidCount; x++) { - // Get the chipid id first - tok = strtok_r(ptrCommandOutput->chipidList->vmapiString, delim, - &tokptr); - // See if there is data for this chipid - if (tok = strtok_r(NULL, delim, &tokptr)) { - if (!strcmp(tok, "OSA") || !strcmp(tok, "OSD") || !strcmp(tok, - "IQDC")) { - osaFound = 1; - } - } - } - - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - return osaFound; - -} - -/** - * Append data to a list - */ -void listAppendLine(struct _VmApiInternalContext* vmapiContextP, List* aListP, - const char* aLineP) { - - int lineL = strlen(aLineP); - - Record* newRecordP = smMemoryGroupAlloc(vmapiContextP, sizeof(Record) - + lineL + 1); - if (newRecordP == 0) - return; - - strncpy(newRecordP->data, aLineP, lineL); - - listAppendRecord(aListP, newRecordP); - -} - -/** - * Append data to a list - */ -void listAppendRecord(List* aListP, Record* aRecordP) { - - if (aListP->firstP == 0) { - aListP->firstP = aRecordP; - } else { - if (aListP->currentP == 0) { - aListP->currentP = aListP->firstP; - while (aListP->currentP->nextP) { - aListP->currentP = aListP->currentP->nextP; - } - } - aListP->currentP->nextP = aRecordP; - } - aListP->currentP = aRecordP; - ++(aListP->size); - aRecordP->nextP = 0; - -} - -/** - * Delete the current record from the list - */ -void listDeleteCurrent(List* aListP) { - - Record* currentP = 0; - Record* prevP = 0; - - if (aListP == 0) - return; - - if (aListP->firstP == 0) - return; - - // Current not set yet ? - if (aListP->currentP == 0) - return; - - currentP = aListP->currentP; - if (aListP->firstP == aListP->currentP) { - aListP->currentP = aListP->firstP->nextP; - aListP->firstP = aListP->firstP->nextP; - } else { - // Find the record before aListP->currentP - prevP = aListP->firstP; - while (prevP && (prevP->nextP != currentP)) { - prevP = prevP->nextP; - } - // Remove recordP from list - if (prevP) { - prevP->nextP = currentP->nextP; - } - } - - free(currentP); - --(aListP->size); - -} - -/** - * Dequeue a line from the front of the list - */ -Record* -listDequeueRecord(List* aListP) { - - Record* recordP = 0; - - if (aListP == 0) - return 0; - - if (aListP->firstP == 0) - return 0; - - recordP = aListP->firstP; - - if (recordP == aListP->currentP) { - aListP->currentP = recordP->nextP; - } - - aListP->firstP = recordP->nextP; - - --(aListP->size); - - return recordP; - -} - -/** - * Free all records from a list - */ -void listFree(List* aListP) { - - Record* recordP = aListP->firstP; - Record* nextP = 0; - - while (recordP) { - nextP = recordP->nextP; - free(recordP); - recordP = nextP; - } - - aListP->firstP = 0; - aListP->currentP = 0; - aListP->size = 0; - -} - -/** - * Return Append data to a list - */ -const char* -listNextLine(List* aListP) { - - const Record* recordP = listNextRecord(aListP); - if (recordP == 0) - return 0; - return recordP->data; - -} - -/** - * Return Append data to a list - */ -const Record* -listNextRecord(List* aListP) { - - if (aListP == 0) - return 0; - - if (aListP->currentP == 0) { - // This causes a wrap around after the 0 record was returned once, - // that is, after "end of list" was returned once. - aListP->currentP = aListP->firstP; - } else { - aListP->currentP = aListP->currentP->nextP; - } - - return aListP->currentP; - -} - -/** - * Free all records from a list - */ -void listReset(List* aListP) { - - if (aListP == 0) - return; - - aListP->currentP = 0; - -} - -void logLine(struct _VmApiInternalContext* vmapiContextP, char aSeverity, - const char* aLineP) { - - int blankN = 0; - const char* blanks = " "; - char line[LINESIZE]; - const char* prefix = "+ "; - int prefixL = 0; - int syslogSeverity = LOG_INFO; - struct tm *tP; - struct tm tm; - time_t timeValue; - pid_t pidTrace; - pthread_t myThread; - int temp; - - pidTrace = getpid(); - myThread = pthread_self(); - - switch (aSeverity) { - case 'D': - syslogSeverity = LOG_DEBUG; - break; - case 'E': - syslogSeverity = LOG_ERR; - break; - case 'I': - syslogSeverity = LOG_INFO; - break; - case 'N': - syslogSeverity = LOG_NOTICE; - break; - case 'W': - syslogSeverity = LOG_WARNING; - break; - case 'X': - syslogSeverity = LOG_ERR; - break; - default: - syslogSeverity = LOG_INFO; - break; - } - - if (vmapiContextP->printOffset <= 0) { - sprintf(line, "%d.%lu ", pidTrace, myThread); // add process id and blank - temp = strlen(line); - strncpy(line + temp, aLineP, LINESIZE - temp); - } else { - prefixL = 2 * vmapiContextP->printOffset; - if (prefixL > 10) - prefixL = 10; - snprintf(line, LINESIZE, "%*.s%s\n", prefixL, prefix, aLineP); - } - - openlog(NULL, 0, LOG_LOCAL7); - syslog(syslogSeverity, "%s", line); - closelog(); -} - -void outputLine(struct _VmApiInternalContext* vmapiContextP, - const char* aLineP, int aLogFlag) { - - if (aLogFlag) - logLine(vmapiContextP, ' ', aLineP); - listAppendLine(vmapiContextP, &vmapiContextP->outputStream, aLineP); - -} - -/** - * This function will read the trace file if found and set all the - * trace flags to what is in the file. If a flag is not set in the file - * then that trace is left as it was in the trace structure. - * If the trace file is not found, then this function only sets the - * flag in the context to indicate that this function has been called. - */ -void readTraceFile(struct _VmApiInternalContext* vmapiContextP) { - char pathAndFile[PATHLENGTH + strlen(TRACE_LEVELS_FILE)]; - char* pathP = 0; - int pathLength = 0; - unsigned int newTraceFlags[TRACE_AREAS_COUNT]; - unsigned int newTraceFlagFound[TRACE_AREAS_COUNT]; - char lineData[LINESIZE]; - int lineDataLength; - char line[BUFLEN]; - FILE* traceFileP = 0; - int keywordIndex; - int traceSettingIndex; - int x; - int rc; - char * targetPtr; - - // Init new trace flags array - for (x = 0; x < TRACE_AREAS_COUNT; x++) { - newTraceFlags[x] = 0; - newTraceFlagFound[x] = 0; - } - - // Get the path and file name string for the trace command input - // Default it to the root .cimvm dir - memset(pathAndFile, 0, sizeof(pathAndFile)); - strcpy(pathAndFile, TRACE_LEVELS_FILE_DIRECTORY); // initialize to default path - strcat(pathAndFile, TRACE_LEVELS_FILE); // add on file name - - pathP = getenv("VMAPI"); // Is there a VMAPI environment variable set? - if (pathP) { - pathLength = strlen(pathP) + sizeof(TRACE_LEVELS_FILE) + 1; - if (pathLength > sizeof(pathAndFile)) { - sprintf( - line, - "readTraceFile: Insufficient path buffer size; needed %d, have %d.", - pathLength, sizeof(pathAndFile)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcContext, - RsInternalBufferTooSmall, line); - return; - } - strncpy(pathAndFile, pathP, pathLength); - if (pathAndFile[pathLength - 1] == '/') { - strcat(pathAndFile, TRACE_LEVELS_FILE); - } else { - strcat(pathAndFile, "/"); - strcat(pathAndFile, TRACE_LEVELS_FILE); - } - } - - // Now open the file and figure out the trace flags to set/reset - traceFileP = fopen(pathAndFile, "r"); - if (traceFileP) { - // Look for keywords and comments in the trace command file - while (fgets(lineData, sizeof(lineData), traceFileP)) { - lineDataLength = strlen(lineData); - - // Ignore all 0 length input - if (0 == lineDataLength) { - continue; - } - - // Ignore comment lines - begin with '#' - if (0 != strncmp(lineData, "#", 1)) { - // Try to find a keyword match - keywordIndex = -1; - for (x = 0; x < TRACE_AREAS_COUNT; x++) { - if (0 == strncmp(lineData, TRACE_KEYWORDS[x], strlen( - TRACE_KEYWORDS[x]))) { - keywordIndex = x; - break; - } - } - // If no keyword found, log an error - if (keywordIndex == -1) { - sprintf(line, - "readTraceFile: Unknown keyword on line: <%s> \n", - lineData); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsFunctionUnknown, line); - return; - } - - targetPtr = strstr(lineData, "="); // Find the = sign - if (0 == targetPtr) { - sprintf(line, "readTraceFile: Missing = on line: <%s> \n", - lineData); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsFunctionUnknown, line); - return; - } - - // Look for a trace settings value - traceSettingIndex = -1; - for (x = 0; x < TRACE_LEVELS_COUNT; x++) { - if (0 != strstr(targetPtr, TRACE_LEVELS[x])) { - traceSettingIndex = x; - break; - } - } - - // If no trace setting keyword found, log an error - if (traceSettingIndex == -1) { - sprintf( - line, - "readTraceFile: Unknown trace setting on line: <%s> \n", - lineData); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsFunctionUnknown, line); - return; - } - - // Now set or reset the bits in the new trace flags variable - if (TRACELEVEL_OFF == traceSettingIndex) // if the trace is to be turned off - { - newTraceFlags[keywordIndex] = 0; - newTraceFlagFound[keywordIndex] = 1; - } else { - newTraceFlags[keywordIndex] - |= TRACE_FLAG_VALUES[traceSettingIndex]; - newTraceFlagFound[keywordIndex] = 1; - } - } - } - - // Set the trace flags pointed to from the context - // If there was a keyword found otherwise skip setting it - for (x = 0; x < TRACE_AREAS_COUNT; x++) { - if (newTraceFlagFound[x]) { - vmapiContextP->smTraceDetails->traceFlags[x] = newTraceFlags[x]; - } - } - - fclose(traceFileP); - - } - vmapiContextP->smTraceDetails->traceFileRead = 1; // Set flag that said we read/tried to read trace settings - return; -} - -char* -strip(char* aLineP, char anOption, char aChar) { - - char* lineP = aLineP; - char* lastP = 0; - int lineL = 0; - int x; - - if (lineP == 0) - return lineP; - - // Strip leading chars - if ((anOption == 'L') || (anOption == 'B')) { - - lineL = strlen(lineP); - if (lineL > 0) { - for (x = 0; x < lineL; ++x, ++lineP) { - if (*lineP != aChar) - break; - } - } - - } - - // Strip trailing chars - if ((anOption == 'T') || (anOption == 'B')) { - - lineL = strlen(lineP); - if (lineL > 0) { - lastP = lineP + lineL - 1; - for (x = lineL; x > 0; --x, --lastP) { - if (*lastP != aChar) - break; - *lastP = 0; - } - } - - } - - return lineP; -} - -void sysinfo(struct _VmApiInternalContext* vmapiContextP, int anArgc, - const char** anArgvPP) { - - char buffer[LINESIZE]; - char* bufferP = 0; - int len = 0; - - FILE* sysinfoP = fopen("/proc/sysinfo", "r"); - if (sysinfoP) { - rewind(sysinfoP); - while (bufferP = fgets(buffer, sizeof(buffer), sysinfoP)) { - len = strlen(bufferP); - if ((len > 0) && (bufferP[len - 1] == '\n')) { - bufferP[len - 1] = 0; - } - outputLine(vmapiContextP, bufferP, 0); - } - fclose(sysinfoP); - } - -} - -int testDigit(char aChar) { - - static char digits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; - int x; - for (x = 0; x < (sizeof(digits) / sizeof(digits[0])); ++x) { - if (aChar == digits[x]) - return 1; - } - - return 0; - -} - -const char* -vmApiMessageText(VmApiInternalContext* contextP) { - const char* noCtxMsgP = "(No message available - VmApi context missing)"; - const char* noMsgP = "(No message available for return/reason code pair)"; - - char emsg[LINESIZE]; - int rc = 0; - int rs = 0; - int x = 0; - - const char* msgFilenameP = 0; - FILE* msgFileP = 0; - char completeMatch[20]; - char rcMatch[20]; - char* msgP = 0; - char* targetP = 0; - char* rcP = 0; - char* rsP = 0; - char rcS[6]; - char rsS[6]; - - if (contextP == 0) - return noCtxMsgP; - - strcpy(contextP->emsg, noMsgP); // Default - - char filename[sizeof(contextP->path) + 15]; // Adjust once NLS filenames settled - - // Message text comes from the translatable message file - char resultLine[LINESIZE]; - int resultLineL = 0; - msgFilenameP = contextGetMessageFilename(contextP, filename, - sizeof(filename)); - if (msgFilenameP) { - msgFileP = fopen(msgFilenameP, "r"); - if (msgFileP) { - // Look for matching 'VMAPI rc reason' in message file - while (fgets(resultLine, sizeof(resultLine), msgFileP)) { - resultLineL = strlen(resultLine); - if (0 != strncmp(resultLine, "#", 1)) { // Ignore comment lines - begin with '#' - if (0 == strncmp(resultLine, "VMAPI", 5)) { // Only if component is VMAPI //strip off second word (rc) and third word (reason) - targetP = strstr(resultLine, " "); // First blank - if (targetP) { - rcP = targetP + 1; - while (rcP && (*rcP != ' ')) - ++rcP; // First blank after rc - strncpy(rcS, targetP + 1, ((rcP) - (targetP + 1) - + 1)); - rc = atoi(rcS); - rsP = rcP + 1; // Skip blank - while (rsP && (*rsP != ' ')) - ++rsP; // First blank after rs - strncpy(rsS, rcP + 1, ((rsP) - (rcP + 1) + 1)); - rs = atoi(rsS); - - if ((rc == contextP->rc) - && (rs == contextP->reason)) { - - strcpy(contextP->emsg, resultLine); - break; - } - - // If no specific reason code matches, use return-code-only - // message. This requires that the rs=0 message for a specific - // return code be placed as the last message for that return - // code in the message file. - if ((rc == contextP->rc) && (rs == 0)) { - strcpy(contextP->emsg, resultLine); - break; - } - } - } - } - - } - // If message file can't be opened or msg isn't in file - return - // with the defaule message set above - } - - } - fclose(msgFileP); - return contextP->emsg; -} - -/** - * Procedure: vmbkendcacheEntryInvalidate - * - * Purpose: Mark the specified cache entry as invalid. - * - * Input: pointer to cache path - * name of the user ID to invalidate - * Output: - * 0 : invalidate performed successfully. - * 1 : invalidate unsuccessful because stat indicated ENOENT - * 2 : invalidate unsuccessful because stat got some other error - * 3 : invalidated by removing cache entry due to fopen failure. - * 4 : the fopen failed and the remove failed also. - * - * Operation: - * . Generate the name of the cache file based on the inputs - * . If the cache file can be opened, write 'Invalid' status to beginning - * . Else try to remove the file - */ -int vmbkendCacheEntryInvalidate(struct _VmApiInternalContext* vmapiContextP, - char *pathP, char *useridP) { - - char cacheEntry[CACHEENTRYLEN]; - char status[] = "INVALID"; - FILE* cFP; - int rc; - int exitrc; - struct stat statBuf; - char line[LINESIZE]; - int scaffold = 0; // If scaffolding wanted: No (0) Yes (1) - - int cacheFileFd; - struct flock fl; - - exitrc = 0; // Initialize to success - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - sprintf(cacheEntry, "%s%.8s.direct", pathP, useridP); - - // If the cache file doesn't exist, nothing to do - rc = stat(cacheEntry, &statBuf); - if (rc == -1) { - // Can't continue but check the reason for the stat failing. - if (errno == ENOENT) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: cache file (%s) does not exist.\n", - cacheEntry); - TRACE_END_DEBUG(vmapiContextP, line); - - return 1; - } else { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: stat() on (%s) got errno (0x%x)\n", - cacheEntry, errno); - TRACE_END_DEBUG(vmapiContextP, line); - - return 2; - } - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: About to invalidate cache entry (%s)\n", - cacheEntry); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = remove(cacheEntry); - if (rc == -1) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: remove error on (%s), errno (0x%x)\n", - cacheEntry, errno); - TRACE_END_DEBUG(vmapiContextP, line); - - exitrc = 4; - } else { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendCacheEntryInvalidate: removed cache file (%s)\n", - cacheEntry); - TRACE_END_DEBUG(vmapiContextP, line); - - exitrc = 3; - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return exitrc; -} - -int vmbkendCheck(struct _VmApiInternalContext* vmapiContextP) { - - pid_t pid1, pid2, ppid; - int rc, status; - char buf[LINESIZE + LINESIZE]; - char line[LINESIZE]; - - pthread_t thread; - pthread_attr_t attr; - - rc = 0; - - int backendSemaphoreValue = 0; - void *vmapiPtr = NULL; - - // Check if backend already running and return in this case - backendSemaphoreValue = semctl(vmapiContextP->semId, BackendSemaphoreIndex, - GETVAL, 0); - - if (1 != backendSemaphoreValue) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendCheck: Backend apparently running; passing backend start \n"); - TRACE_END_DEBUG(vmapiContextP, line); - vmapiContextP->checkBackendFlag = 1; // Mark the backend as running - return rc; // Backend running - } - - // If vmbkend daemon not started, start it - // Create a pthread and call the vmbkendMain - vmapiPtr = (void*) dlopen(VMAPILIB, RTLD_NOW); // Load the library - - if (vmapiPtr == NULL) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendCheck: Loading library failed %s .\n", dlerror()); - TRACE_END_DEBUG(vmapiContextP, line); - } - - pthread_attr_init(&attr); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendCheck: Creating a pthread \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - - pthread_mutex_lock(&mutex); - rc = pthread_create(&thread, &attr, vmbkendMain, (void *) vmapiContextP); - - pthread_cond_wait(&thread_initialized_cv, &mutex); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendCheck: pthread created with rc = %d \n", rc); - TRACE_END_DEBUG(vmapiContextP, line); - - return 0; -} - -/** - * Procedure: vmbkendgetCachePath - * - * Purpose: Return the path to the $VMAPI/.vmapi/cache directory, where - * $VMAPI is the VMAPI environment variable. If VMAPI is not - * defined, the current working directory '.' is used. - * - * An example of the directory returned is as follows (note the - * slash at the end): - * - * /foo/bar/.vmapi/cache/ - * - * Input: pointer to string for where to put the cache path - * Output: none - * - * Operation: - * . Get VMAPI environment variable - * . Pull together the cache directory using the VMAPI value. - * - */ -void vmbkendGetCachePath(struct _VmApiInternalContext* vmapiContextP, - char *pathP) { - - char *getenvP = 0; - char line[LINESIZE]; - int retValue; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Obtain path to $VMAPI/.vmapi/cache - // If no (context) path string call to initialize things. - if (1 != vmapiContextP->contextCreatedFlag) { - retValue = initializeThreadSemaphores(vmapiContextP, "", 1); // Create context using no name to override current context name - if (retValue) { - sprintf( - line, - "vmbkendGetCachePath(): context reserve() returned error: %d\n", - retValue); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, line); - return; - } - } - strcpy(pathP, vmapiContextP->path); - - strcat(pathP, CACHE_DIRECTORY); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendGetCachePath: The cache path is (%s)\n", pathP); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return; - -} - -void *vmbkendMain(void *context) { - - int argIndex; - int serverSock; - struct sockaddr_in serverSockaddr; - struct sockaddr_in serverSockaddr1; - struct sockaddr_in clientSockaddr; - struct sockaddr_in notificationSocketInfo; - struct sockaddr_in previousSockaddr; - - int socklen; - int rc; - int clientLen; - char readBuffer[BUFLEN]; - char userID[BUFLEN]; - unsigned int useridLength; - int bytesRead; - struct sembuf operations[1]; - - char cmd[BUFLEN]; - unsigned int cmdLength; - char subData[BUFLEN]; - unsigned int subDataLength; - struct in_addr inaddr; - int x; - - int clientSock; - int totalRead; - - char hostid[20]; - unsigned char *ipP = 0; - char path[BUFLEN + 1]; - char cachePath[BUFLEN + 1]; - char userListPath[BUFLEN + 1]; - - time_t ltime; - char line[LINESIZE + LINESIZE]; - pid_t pid; - - char ourIpAddr[20]; - unsigned int ourPort; - smMemoryGroupContext localMemoryGroup; - smMemoryGroupContext * saveMemoryGroup; - vmApiAsynchronousNotificationEnableDmOutput * ptrEnableOutputData; - vmApiAsynchronousNotificationDisableDmOutput * ptrDisableOutputData; - - VmApiInternalContext *vmapiContextP; - - VmApiInternalContext vmapiContext; - smMemoryGroupContext memContext; - extern struct _smTrace externSmapiTraceFlags; - int smrc; - pthread_mutex_lock(&mutex); - - // Expand the macro for time being - memset(&vmapiContext, 0, sizeof(*(&vmapiContext))); - memset(&memContext, 0, sizeof(*(&memContext))); - (&vmapiContext)->memContext = &memContext; - (&vmapiContext)->smTraceDetails - = (struct _smTrace *) &externSmapiTraceFlags; - smrc = smMemoryGroupInitialize(&vmapiContext); - - if (0 == smrc) { - readTraceFile(&vmapiContext); - } else { - logLine(&vmapiContext, 'E', "Unexpected smMemoryGroupInitializeError!"); - } - - vmapiContextP = &vmapiContext; - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "Inside back end thread \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - if (1 != vmapiContextP->contextCreatedFlag) { - rc = initializeThreadSemaphores(vmapiContextP, "", 1); // create context using no name to override current context name - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "Inside back end thread retValue = %d \n", rc); - TRACE_END_DEBUG(vmapiContextP, line); - } - - // Indicate this is the backend - vmapiContextP->isBackend = 1; - - // Obtain the Backend semaphore to before manipulating context related stuff - operations[0].sem_num = BackendSemaphoreIndex; - operations[0].sem_op = -1; - operations[0].sem_flg = SEM_UNDO; - rc = semop(vmapiContextP->semId, operations, sizeof(operations) - / sizeof(operations[0])); - if (rc < 0) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: semop (decrement) failed, errno=%d text: %s", - errno, strerror(errno)); - TRACE_END_DEBUG(vmapiContextP, line); - } - - // OK: ready to go - time(<ime); - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Entry to --> at %s", ctime(<ime)); - TRACE_END_DEBUG(vmapiContextP, line); - - // Build path to the cache directory. - memset(path, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - - // Call routine to remove the cache. - vmbkendRemoveEntireCache(vmapiContextP, cachePath); - - // Do the necessary socket server setup - serverSock = socket(AF_INET, SOCK_DGRAM, 0); - exit_if_error(Socket, serverSock, serverSock); - - memset(&serverSockaddr, 0, sizeof serverSockaddr); - - // Read and use any previous port number that may have - // been set by a previous run of vmbkend. If no previous - // run or error, the value zero is returned. - vmbkendSockaddrFileInfo(vmapiContextP, 0, &previousSockaddr); - serverSockaddr.sin_port = previousSockaddr.sin_port; - serverSockaddr.sin_family = AF_INET; - serverSockaddr.sin_addr.s_addr = htonl(INADDR_ANY); - - rc = bind(serverSock, (struct sockaddr *) &serverSockaddr, - sizeof serverSockaddr); - - if (-1 == rc) { // Bind failure - if (0 == serverSockaddr.sin_port) { - // The bind for an ephemeral port failed. - exit_if_error(Bind, rc, serverSock); - } else { - // We used a previous port and this failed, - // Retry the bind for any ephemeral port. - memset(&serverSockaddr, 0, sizeof serverSockaddr); - serverSockaddr.sin_port = 0; - serverSockaddr.sin_addr.s_addr = htonl(INADDR_ANY); - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - TRACE_END_DEBUG(vmapiContextP, - "vmbkendMain: Retrying bind for sin_port <0>\n"); - rc = bind(serverSock, (struct sockaddr *) &serverSockaddr, - sizeof serverSockaddr); - - exit_if_error(Bind, rc, serverSock); - } - } - - memset(&serverSockaddr1, 0, sizeof serverSockaddr1); - socklen = sizeof serverSockaddr1; - - rc - = getsockname(serverSock, (struct sockaddr *) &serverSockaddr1, - &socklen); - exit_if_error(Getsockname, rc, serverSock); - - // Show the IP address for our system - get_myaddress(¬ificationSocketInfo); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - // Show what port number we are listening on - sprintf(line, "vmbkendMain: Listening on %s:%u", inet_ntoa( - notificationSocketInfo.sin_addr), (unsigned) ntohs( - serverSockaddr1.sin_port)); - TRACE_END_DEBUG(vmapiContextP, line); - - // Set port for notification - notificationSocketInfo.sin_port = serverSockaddr1.sin_port; - - // If we used different information from a previous run - // then: - // - write new info to the file PORT_FILENAME - // - unregister old info with the directory manager. - if ((previousSockaddr.sin_port != notificationSocketInfo.sin_port) - || (previousSockaddr.sin_addr.s_addr - != notificationSocketInfo.sin_addr.s_addr)) { - - // Write new info to PORT_FILENAME - vmbkendSockaddrFileInfo(vmapiContextP, 1, ¬ificationSocketInfo); - - // If previous registration, unregister it - if (0 != previousSockaddr.sin_port) { - sprintf(ourIpAddr, "%s", inet_ntoa(previousSockaddr.sin_addr)); - ourPort = previousSockaddr.sin_port; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - smMemoryGroupInitialize(vmapiContextP); - - rc = smAsynchronous_Notification_Disable_DM(vmapiContextP, "", // IUCV userID and password not needed - 0, // Password length - "", // Password - "ALL", // Target identifier - 1, // Entity_type directory - 2, // UDP communication_type, - ourPort, // Port_number, - ourIpAddr, // IP_address string, - 1, // ASCII encoding, - 0, // Subscriber_data_length, - "", // Subscriber_data, - &ptrDisableOutputData); - if (0 != rc || 0 != ptrDisableOutputData->returnCode) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendMain: call to asynch unregister got rc1 %d rc2 %d \n", - rc, ptrDisableOutputData->returnCode); - TRACE_END_DEBUG(vmapiContextP, line); - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - } - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - } - } // Used different port number - - // Call asynchronous notify RPC to register with the - // directory manager. - sprintf(ourIpAddr, "%s", inet_ntoa(notificationSocketInfo.sin_addr)); - ourPort = notificationSocketInfo.sin_port; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - smMemoryGroupInitialize(vmapiContextP); - - rc = smAsynchronous_Notification_Enable_DM(vmapiContextP, "", // IUCV userID and password not needed - 0, // Password length - "", // Password - "ALL", // Target identifier - 1, // Entity_type directory - 1, // Include subscription type - 2, // UDP subscription_type - ourPort, // Port_number - ourIpAddr, // IP_address - 1, // ASCII encoding - 0, // Subscriber_data_length - "", // Subscriber_data - &ptrEnableOutputData); - if (0 == rc && 0 != ptrEnableOutputData->returnCode) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendMain: call to asynch register got rc1 %d rc2 %d and rs %d\n", - rc, ptrEnableOutputData->returnCode, - ptrEnableOutputData->reasonCode); - TRACE_END_DEBUG(vmapiContextP, line); - - // If Subscription exists... Do not do anything. - if (!ptrEnableOutputData->returnCode == 428) { - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - } - } else if (0 != rc) { - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - - } - - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - // Wait for and handle incoming requests from the - // directory manager. - pthread_cond_signal(&thread_initialized_cv); - pthread_mutex_unlock(&mutex); - for (;;) { - time(<ime); - - // UDP - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: About to receive on %s", ctime(<ime)); - TRACE_END_DEBUG(vmapiContextP, line); - - memset(readBuffer, 0, sizeof readBuffer); - memset(&clientSockaddr, 0, sizeof clientSockaddr); - clientLen = sizeof clientSockaddr; - bytesRead = 0; - useridLength = 0; - - bytesRead = recvfrom(serverSock, readBuffer, sizeof(readBuffer), 0, - (struct sockaddr *) &clientSockaddr, &clientLen); - - if (bytesRead == -1) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: recvfrom got errno %d\n", errno); - TRACE_END_DEBUG(vmapiContextP, line); - break; - } - continue_if_error(Recvfrom, bytesRead, bytesRead); - - strcpy(path, cachePath); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Read %d bytes from %s at time: %s\n", - bytesRead, inet_ntoa(clientSockaddr.sin_addr), ctime(<ime)); - TRACE_END_DEBUG(vmapiContextP, line); - - // If the message is too small, this is an error, go get - // the next message. - if (bytesRead <= LENGTH_OF_USERID_LENGTH_FIELD) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Message is too short"); - TRACE_END_DEBUG(vmapiContextP, line); - continue; - } - - // Pull out the user ID length - useridLength = *(int *) &readBuffer; - useridLength = ntohl(useridLength); - - // Get the user ID - memset(userID, 0, sizeof userID); - strncpy(userID, readBuffer + 4, useridLength); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: User ID length is >%d< and User ID is >%s<\n", - useridLength, userID); - TRACE_END_DEBUG(vmapiContextP, line); - - // Get the command length - cmdLength = *(int *) (readBuffer + 4 + useridLength); - cmdLength = ntohl(cmdLength); - - // Get the command - memset(cmd, 0, sizeof cmd); - strncpy(cmd, readBuffer + 4 + useridLength + 4, cmdLength); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Command is >%s<\n", cmd); - TRACE_END_DEBUG(vmapiContextP, line); - - if (strcasecmp(cmd, "add") == 0 || strcasecmp(cmd, "purge") == 0) { - strcpy(userListPath, cachePath); - strcat(userListPath, "users.list"); - rc = remove(userListPath); - if (rc == -1) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: remove error on (%s), errno (0x%x)\n", - userListPath, errno); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - - // Get the subscriber data length - subDataLength - = *(int *) (readBuffer + 4 + useridLength + 4 + cmdLength); - subDataLength = ntohl(subDataLength); - - // Invalidate the cache entry - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Invalidating cache for user ID (%s)\n", - userID); - TRACE_END_DEBUG(vmapiContextP, line); - - for (x = 0; x < useridLength; ++x) { - userID[x] = tolower(userID[x]); - } - - vmbkendCacheEntryInvalidate(vmapiContextP, path, userID); - - // Clear out the .scan files - } - - // Call asynchronous notify RPC to unregister with the - // directory manager. - sprintf(ourIpAddr, "%s", inet_ntoa(notificationSocketInfo.sin_addr)); - ourPort = notificationSocketInfo.sin_port; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - smMemoryGroupInitialize(vmapiContextP); - - rc = smAsynchronous_Notification_Disable_DM(vmapiContextP, "", // IUCV userID and password not needed - 0, // Password length - "", // password - "ALL", // Target identifier - 1, // Entity_type directory - 2, // UDP communication_type, - ourPort, // Port_number, - ourIpAddr, // IP_address, - 1, // ASCII encoding, - 0, // Subscriber_data_length, - "", // Subscriber_data, - &ptrDisableOutputData); - if (0 != rc || 0 != ptrDisableOutputData->returnCode) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: call to asynch unregister got rc1 %d rc2 %d \n", - rc, ptrDisableOutputData->returnCode); - TRACE_END_DEBUG(vmapiContextP, line); - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - } - - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - // Close the server socket - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - TRACE_END_DEBUG(vmapiContextP, - "vmbkendMain: About to close() server socket\n"); - rc = close(serverSock); - exit_if_error(Close, rc, rc); - pthread_exit(NULL); -} - -/** - * Procedure: vmbkendremoveCachedScanFiles - * - * Purpose: Remove the ***.scan files. - * - * Input: pointer to cache path - * Output: none - * - * Operation: - * . Build the rm command from the input path - * . Issue the rm command via system() - */ -int vmbkendRemoveCachedScanFiles(struct _VmApiInternalContext* vmapiContextP, - char *pathP) { - - char command[300]; - char line[LINESIZE]; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build the remove command - sprintf(command, "rm -f %s%s", pathP, ALL_SCAN_FILES); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendRemoveCachedScanFiles: About to issue: system(%s)\n", - command); - TRACE_END_DEBUG(vmapiContextP, line); - - if (system(command)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendRemoveCachedScanFiles: Error removing scan files, errno 0x%X: reason(%s)\n", - errno, strerror(errno)); - TRACE_END_DEBUG(vmapiContextP, line); - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - return 0; - -} - -/** - * Procedure: vmbkendremoveEntireCache - * - * Purpose: Remove all cache entries from the cache directory. - * - * Input: pointer to the cache directory - * Output: none - * - * Operation: - * . Build rm command from input cache directory - * . Issue the rm command via system() - */ -void vmbkendRemoveEntireCache(struct _VmApiInternalContext* vmapiContextP, - char *cachePathP) { - - char command[300]; - char line[LINESIZE]; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build the remove command - sprintf(command, "rm -rf %s*", cachePathP); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendRemoveEntireCache: About to issue: system(%s)\n", - command); - TRACE_END_DEBUG(vmapiContextP, line); - - if (system(command)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendRemoveEntireCache: Error removing file, errno 0x%X: reason(%s)\n", - errno, strerror(errno)); - TRACE_END_DEBUG(vmapiContextP, line); - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return; -} - -/** - * Procedure: vmbkendSockaddrFileInfo - * - * Purpose: Save new or retrieve previous bind information to or from - * the file defined by $VMAPI/PORT_FILENAME. - * - * Input: int readOrWrite : 0 = read it; 1 = write it - * sockaddr_in saddr: If readOrWrite is read, then on input this is - * is the address of where to store the retrieved bind info. - * If readOrWrite is write, then on input this is the address of - * the sockaddr_in containing the bind info to save. - * - * Output: rc = 0 ; success; if read then saddr contains the read value. - * if write, then the file is updated. - * rc = -1 ; failure; if read, saddr value returned is zeroes. - * if write, saddr is unchanged. - * - * Operation: - * . Get the path to the file $VMAPI/.vmapi/PORT_FILENAME - * . Open the file read or write based on the value of readOrWrite input - * . If error, - * - if read, set saddr to zeroes - * - return -1 - * . If read then read the info - * Else write the info - * . Close the file. - */ -int vmbkendSockaddrFileInfo(struct _VmApiInternalContext* vmapiContextP, - int readOrWrite, struct sockaddr_in *saddr) { - - FILE *fileP = (FILE *) NULL; - char fName[BUFLEN + 1]; - char *getenvP = 0; - int rc = 0; - char line[LINESIZE]; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - strcpy(fName, vmapiContextP->path); - strcat(fName, PORT_FILENAME); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: PORT_FILENAME %s \n", fName); - TRACE_END_DEBUG(vmapiContextP, line); - - errno = 0; - if (0 == readOrWrite) { // Read - // If error reading record, return saddr value of zeroes - memset(saddr, 0, sizeof(struct sockaddr_in)); - fileP = fopen(fName, "r"); - } else { - fileP = fopen(fName, "w"); - } - - if (fileP == (FILE *) NULL) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendSockaddrFileInfo: Errno %d opening %s for %s()\n", - errno, fName, (readOrWrite == 0 ? "read" : "write")); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = -1; - goto exit_error2; - } - - if (readOrWrite == 0) { // read - if (EOF == fscanf(fileP, "%x:%hu", &(saddr->sin_addr.s_addr), - &(saddr->sin_port))) { - // If error reading record, return saddr value of zeroes - memset(saddr, 0, sizeof(struct sockaddr_in)); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendSockaddrFileInfo: Errno %d reading file %s\n", - errno, fName); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = -1; - goto exit_error1; - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: Read %x:%hu\n", - saddr->sin_addr.s_addr, saddr->sin_port); - TRACE_END_DEBUG(vmapiContextP, line); - - } else { // Write - if (-1 == fprintf(fileP, "%x:%hu", saddr->sin_addr.s_addr, - saddr->sin_port)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendSockaddrFileInfo: Errno %d writing %x:%hu to %s\n", - errno, saddr->sin_addr.s_addr, saddr->sin_port, fName); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = -1; - goto exit_error1; - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: Wrote %x:%hu\n", - saddr->sin_addr.s_addr, saddr->sin_port); - TRACE_END_DEBUG(vmapiContextP, line); - } - - exit_error1: if (EOF == fclose(fileP)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: Errno %d closing file %s()\n", - errno, fName); - TRACE_END_DEBUG(vmapiContextP, line); - } - exit_error2: TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - return (rc); -} - -void waitForPendingWorkunits(struct _VmApiInternalContext* vmapiContextP, - int waitIntervalInSeconds) // 0 = wait forever -{ - - int argN = 2; - const char* args[2]; - char line[LINESIZE]; - int maxRc = 0; - int maxReason = 0; - int x = 0; - int workunitsPending = 1; - int workunitId; - int duration; - int interval; - int rc; - time_t startTime; - - smMemoryGroupContext localMemoryGroup; - smMemoryGroupContext * saveMemoryGroup; - vmApiQueryAsynchronousOperationDmOutput * ptrQueryAsynchOutputData; - - // Duration == 0 is assumed as infinite duration - duration = waitIntervalInSeconds; - time(&startTime); - - while (workunitsPending && duration >= 0) { - - workunitsPending = 0; - - for (x = 0; (x < (sizeof(vmapiContextP->pendingWorkunits) - / sizeof(vmapiContextP->pendingWorkunits[0]))); ++x) { - - if (vmapiContextP->pendingWorkunits[x] == 0) - continue; - - workunitId = vmapiContextP->pendingWorkunits[x]; - - vmapiContextP->rc = 0; - vmapiContextP->reason = 0; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - - smMemoryGroupInitialize(vmapiContextP); - if (0 != (rc = smQuery_Asychronous_Operation_DM(vmapiContextP, - "", // Userid is not required for IUCV - 0, // Length 0; no password of IUCV - "", // No password - vmapiContextP->useridForAsynchNotification, workunitId, - &ptrQueryAsynchOutputData))) { - } - - vmapiContextP->rc = ptrQueryAsynchOutputData->returnCode; - vmapiContextP->reason = ptrQueryAsynchOutputData->reasonCode; - - // Since the only result data we care about is the return and reason codes, we can - // free any working memory now. - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - // check for finished operation - if ((vmapiContextP->rc == 0) && (vmapiContextP->reason == 100)) { - vmapiContextP->pendingWorkunits[x] = 0; - continue; - } - - // Check for ongoing operation - if ((vmapiContextP->rc == 0) && (vmapiContextP->reason == 104)) { - workunitsPending = 1; // At least this one - continue; - } - - // Check for failed operation - if ((vmapiContextP->rc == 0) && (vmapiContextP->reason == 108)) { - vmapiContextP->rc = 200; // Set failed image operation error code - vmapiContextP->reason = 0; - } - - // Here when an error occurred - // The workunit is assumed to be either finished or failed, - // that is it is not assumed to be ongoing any more. - if ((vmapiContextP->rc == maxRc) && (vmapiContextP->reason - > maxReason)) { - maxReason = vmapiContextP->reason; - } else if (vmapiContextP->rc > maxRc) { - maxRc = vmapiContextP->rc; - maxReason = vmapiContextP->reason; - } - - } - - interval = SleepInterval; - if ((duration > 0) && (interval > duration)) - interval = duration; - - if (workunitsPending && (interval > 0)) { - - sleep(interval); - - } - - if (duration > 0) { - duration -= interval; - // Since == 0 is assumed to be indefinite set -1 in this case - if (duration == 0) - duration = -1; - } - - } - - // Quickfix to overcome problems on tmcc system - sleep(5); - - vmapiContextP->rc = maxRc; - vmapiContextP->reason = maxReason; - -} - -/** - * A valid cache file has good time interval and no "INVALID" PAS0304 - * file is closed for stat to work - */ -int cacheFileValid(struct _VmApiInternalContext* vmapiContextP, - const char* cFNameP) { - - int defaultTimeLimit = 5000; // Seconds = approx 1.5 hours - int timeLimit = 0; - struct stat statbuf; - time_t currentTime; - double fileAgeSeconds = 0; - time_t fileTime = 0; - unsigned int x = 0; - - if (getenv("EPP_CACHE_TIMELIMIT")) { - timeLimit = atoi(getenv("EPP_CACHE_TIMELIMIT")); - } else { - timeLimit = defaultTimeLimit; - } - - if (-1 == time(¤tTime)) - return 0; // Current time failed - - if (-1 == stat(cFNameP, &statbuf)) - return 0; // Stat failed - - fileTime = statbuf.st_mtime; - - fileAgeSeconds = difftime(currentTime, fileTime); - - if ((fileAgeSeconds < 0) || (fileAgeSeconds > timeLimit)) - return 0; - - return 1; -} diff --git a/zhcp/BUILD/resource_access/src/startvs.c b/zhcp/BUILD/resource_access/src/startvs.c deleted file mode 100644 index 73a3cc9..0000000 --- a/zhcp/BUILD/resource_access/src/startvs.c +++ /dev/null @@ -1,73 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Logs on the specified virtual server. - * - * @param $1: The name of the guest which is to be logged on - * - * @return 0 If the image is powered on upon completion - * 1 If given invalid parameters - * 2 If power-on failed - */ -int main(int argC, char* argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get the virtual server name - char* imageName = argV[1]; - // Check if the virtual server name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Starting %s... ", imageName); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageActivateOutput* output; - - // Log on virtual server - int rc = smImage_Activate(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - &output); - - int rtnCode = output->common.returnCode; - int rsnCode = output->common.reasonCode; - - // If return code = 200 and reason code = 8, virtual server is logged on - if (rc || (output->common.returnCode && output->common.returnCode != 200 - || (output->common.reasonCode && output->common.reasonCode != 8))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/stopvs.c b/zhcp/BUILD/resource_access/src/stopvs.c deleted file mode 100644 index a28d9f5..0000000 --- a/zhcp/BUILD/resource_access/src/stopvs.c +++ /dev/null @@ -1,69 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Log off the specified virtual server. - * - * @param $1: The z/VM guest ID of the virtual server which is to be stopped - * - * @return 0 If the image is powered off upon completion - * 1 If given invalid parameters - * 2 If power-off failed - */ -int main(int argC, char* argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get the virtual server name - char* imageName = argV[1]; - // Check if the virtual server name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Stopping %s... ", imageName); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeactivateOutput* output; - - // Log off virtual server - int rc = smImage_Deactivate(&context, "", 0, "", // Authorizing user, password length, password. - imageName, "IMMED", // Immediate deactivation. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 200 - || (output->common.reasonCode && output->common.reasonCode != 12))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/undedicatedevice.c b/zhcp/BUILD/resource_access/src/undedicatedevice.c deleted file mode 100644 index 82683b6..0000000 --- a/zhcp/BUILD/resource_access/src/undedicatedevice.c +++ /dev/null @@ -1,66 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Removes a dedicated device from a virtual image's directory entry. - * - * @param $1: The name of the guest from which a device is to be removed - * @param $2: The virtual device address assigned to the device - * - * @return 0 If the dedicated device was removed successfully - * 1 If given invalid parameters - * 2 If device undedication failed. - */ -int main(int argC, char* argV[]) { - - if (argC != 6) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - - if (isImageNameInvalid(image)) - return 1; - - printf("Removing device %s on %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeviceUndedicateDmOutput* output; - - int rc = smImage_Device_Undedicate_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/BUILD/resource_access/src/virtualImage.h b/zhcp/BUILD/resource_access/src/virtualImage.h deleted file mode 100644 index 48b5416..0000000 --- a/zhcp/BUILD/resource_access/src/virtualImage.h +++ /dev/null @@ -1,70 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "smPublic.h" -#include "vmapiSystem.h" -#include "vmapiImage.h" -#include "vmapiVirtual.h" -#include "smPublic.h" -#include "vmapiAsynchronous.h" -#include "vmapiAuthorization.h" -#include "vmapiCheckAuthentication.h" -#include "vmapiDirectoryManager.h" -#include "vmapiName.h" -#include "vmapiProfile.h" -#include "vmapiPrototype.h" - -/* Check if Smapi is up and running - *****************************************************************************************/ -int checkSmapi(VmApiInternalContext vmapiContext); - -/* Use Profile_Create_DM to create a profile directory entry to be included in - * the definition of a virtual image in the directory. - *****************************************************************************************/ -int createProfile(VmApiInternalContext vmapiContext); - -/* Use Prototype_Create_DM to create a new virtual image prototype - *****************************************************************************************/ -int createProto(VmApiInternalContext vmapiContext); - -/* Use Image_Create_DM to define a new virtual image in the directory - *****************************************************************************************/ -int createImage(VmApiInternalContext vmapiContext, char * argV); - -/* Use Prototype_Name_Query_DM to obtain a list of names of defined prototypes - *****************************************************************************************/ -int queryProto(VmApiInternalContext vmapiContext, char * argV); - -/* Use Profile_Query_DM to query a profile directory entry - *****************************************************************************************/ -int queryProfile(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Query_DM to obtain a virtual image’s directory entry - *****************************************************************************************/ -int queryImage(VmApiInternalContext vmapiContext, char * argV); - -/* Use Profile_Delete_DM to delete a profile directory entry - *****************************************************************************************/ -int deleteProfile(VmApiInternalContext vmapiContext, char * argV); - -/* Use Prototype_Delete_DM to delete an image prototype - *****************************************************************************************/ -int deleteProto(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Delete_DM to delete a virtual image's definition from the directory - *****************************************************************************************/ -int deleteImage(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Disk_Create_DM to add a disk to a virtual image’s directory entry - *****************************************************************************************/ -int addDisk(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Query_DM to obtain a virtual image’s directory entry - *****************************************************************************************/ -void getImage(VmApiInternalContext vmapiContext, - vmApiImageRecord imageRecord[], char * argV); - -/* Internal function to display error text to console - *****************************************************************************************/ -static void displayErrorText(int errorCode); - diff --git a/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationDisableDm.c b/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationDisableDm.c deleted file mode 100644 index fae3fa1..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationDisableDm.c +++ /dev/null @@ -1,105 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAsynchronous.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Asynchronous_Notification_Disable_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAsynchronousNotificationDisableDmOutput - -/** - * Asynchronous_Notification_Disable_DM SMAPI interface - */ -int smAsynchronous_Notification_Disable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationDisableDmOutput ** outData) { - const char * const functionName = "Asynchronous_Notification_Disable_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - // The input buffer size of the VMAPI socket call is calculated by adding up all the - // field lengths and data (see System management application programming manual for details) - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 + 1 + 4 + 4 - + strlen(ip_address) + 1 + 4 + subscriber_data_length; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = entity_type; // Entity_type int1 - cursor++; - - *cursor = communication_type; // Communication_type int1 - cursor++; - - PUT_INT(port_number, cursor); // Port_number int4 - - tempSize = strlen(ip_address); // IP_address 7..15 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, ip_address, tempSize); - cursor += tempSize; - - *cursor = encoding; // Encoding - cursor++; - - tempSize = subscriber_data_length; // Subscriber_data 0..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, subscriber_data, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationEnableDm.c b/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationEnableDm.c deleted file mode 100644 index ecc62af..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationEnableDm.c +++ /dev/null @@ -1,106 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAsynchronous.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Asynchronous_Notification_Enable_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAsynchronousNotificationEnableDmOutput - -/** - * Asynchronous_Notification_Enable_DM SMAPI interface - */ -int smAsynchronous_Notification_Enable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char subscription_type, char communication_type, - int port_number, char * ip_address, char encoding, - int subscriber_data_length, char * subscriber_data, - vmApiAsynchronousNotificationEnableDmOutput ** outData) { - const char * const functionName = "Asynchronous_Notification_Enable_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 + 1 + 1 + 4 + 4 - + strlen(ip_address) + 1 + 4 + subscriber_data_length; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = entity_type; // Entity_type int1 - cursor++; - - *cursor = subscription_type; // Subscription_type int1 - cursor++; - - *cursor = communication_type; // Communication_type int1 - cursor++; - - PUT_INT(port_number, cursor); // Port_number int4 - - tempSize = strlen(ip_address); // IP_address 7..15 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, ip_address, tempSize); - cursor += tempSize; - - *cursor = encoding; // Encoding - cursor++; - - tempSize = subscriber_data_length; // Subscriber_data 0..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, subscriber_data, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationQueryDm.c deleted file mode 100644 index c148a76..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiAsynchronousNotificationQueryDm.c +++ /dev/null @@ -1,105 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAsynchronous.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Asynchronous_Notification_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAsynchronousNotificationQueryDmOutput - -/** - * Asynchronous_Notification_Query_DM SMAPI interface - */ -int smAsynchronous_Notification_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationQueryDmOutput ** outData) { - const char * const functionName = "Asynchronous_Notification_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 + 1 + 4 + 4 - + strlen(ip_address) + 1 /* Encoding */+ 4 + subscriber_data_length; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - tempSize = strlen(functionName); - - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = entity_type; // Entity_type int1 - cursor++; - - *cursor = communication_type; // Communication_type int1 - cursor++; - - PUT_INT(port_number, cursor); // Port_number int4 - - tempSize = strlen(ip_address); // IP_address 7..15 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, ip_address, tempSize); - cursor += tempSize; - - *cursor = encoding; // Encoding - cursor++; - - tempSize = subscriber_data_length; // Subscriber_data 0..64 chars - PUT_INT(tempSize, cursor); - - if (tempSize > 0) { - memcpy(cursor, subscriber_data, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiAuthorizationListAdd.c b/zhcp/BUILD/resource_access/src/vmapiAuthorizationListAdd.c deleted file mode 100644 index d22c0fd..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiAuthorizationListAdd.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAuthorization.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Authorization_List_Add_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAuthorizationListAddOutput - -/** - * Authorization_List_Add SMAPI interface - */ -int smAuthorization_List_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListAddOutput ** outData) { - const char * const functionName = "Authorization_List_Add"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + strlen(for_id) + 4 + strlen(function_id); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(for_id); // For_id 1..8 or 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, for_id, tempSize); - cursor += tempSize; - - tempSize = strlen(function_id); // Function_id 1..64 OR 1..* chars - PUT_INT(tempSize, cursor); - memcpy(cursor, function_id, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiAuthorizationListQuery.c b/zhcp/BUILD/resource_access/src/vmapiAuthorizationListQuery.c deleted file mode 100644 index 0e493e4..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiAuthorizationListQuery.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAuthorization.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Authorization_List_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAuthorizationListQueryOutput - -/** - * Authorization_List_Query SMAPI interface - */ -int smAuthorization_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListQueryOutput ** outData) { - const char * const functionName = "Authorization_List_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + strlen(for_id) + 4 + strlen(function_id); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(for_id); // For_id 0..8 or 0..64 or 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, for_id, tempSize); - cursor += tempSize; - - tempSize = strlen(function_id); // Function_id 0..64 OR 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, function_id, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiAuthorizationListRemove.c b/zhcp/BUILD/resource_access/src/vmapiAuthorizationListRemove.c deleted file mode 100644 index 64a3415..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiAuthorizationListRemove.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAuthorization.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Authorization_List_Remove_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAuthorizationListRemoveOutput - -/** - * Authorization_List_Remove SMAPI interface - */ -int smAuthorization_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListRemoveOutput ** outData) { - const char * const functionName = "Authorization_List_Remove"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + strlen(for_id) + 4 + strlen(function_id); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(for_id); // For_id 1..8 or 1..64 or 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, for_id, tempSize); - cursor += tempSize; - - tempSize = strlen(function_id); // Function_id 1..64 OR 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, function_id, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiCheckAuthentication.c b/zhcp/BUILD/resource_access/src/vmapiCheckAuthentication.c deleted file mode 100644 index 1c3132d..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiCheckAuthentication.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiCheckAuthentication.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Check_Authentication_Layout -#define OUTPUT_STRUCTURE_NAME vmApiCheckAuthenticationOutput - -/** - * Check_Authentication_DM SMAPI interface - */ -int smCheck_Authentication(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - vmApiCheckAuthenticationOutput ** outData) { - const char * const functionName = "Check_Authentication"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c b/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c deleted file mode 100644 index e262981..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagDefineDmOutput - -/** - * Directory_Manager_Local_Tag_Define_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_ordinal, char createOrChange, - vmApiDirectoryManagerLocalTagDefineDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name) + 4 + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - PUT_INT(tag_ordinal, cursor); - - *cursor = createOrChange; // Create or change request - *cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c deleted file mode 100644 index 394561c..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagDeleteDmOutput - -/** - * Directory_Manager_Local_Tag_Delete_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, vmApiDirectoryManagerLocalTagDeleteDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c deleted file mode 100644 index 2a9f18b..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagQueryDmOutput - -/** - * Directory_Manager_Local_Tag_Query_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, vmApiDirectoryManagerLocalTagQueryDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c b/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c deleted file mode 100644 index 18d20fb..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Set_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagSetDmOutput - -/** - * Directory_Manager_Local_Tag_Set_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Set_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_value_length, char * tag_value, - vmApiDirectoryManagerLocalTagSetDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Set_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name) + 4 + tag_value_length; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - tempSize = tag_value_length; // Tag_value 1..240 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_value, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerSearchDm.c b/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerSearchDm.c deleted file mode 100644 index fbf9bab..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerSearchDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Search_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerSearchDmOutput - -/** - * Directory_Manager_Search_DM SMAPI interface - */ -int smDirectory_Manager_Search_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int search_pattern_length, - char * search_pattern, vmApiDirectoryManagerSearchDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Search_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + search_pattern_length; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = search_pattern_length; // Search_pattern 1..72 charNA - PUT_INT(tempSize, cursor); - memcpy(cursor, search_pattern, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c b/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c deleted file mode 100644 index cc1f6b8..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Task_Cancel_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerTaskCancelDmOutput - -/** - * Directory_Manager_Task_Cancel_DM SMAPI interface - */ -int smDirectory_Manager_Task_Cancel_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operation_id, vmApiDirectoryManagerTaskCancelDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Task_Cancel_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - PUT_INT(operation_id, cursor); - cursor += 4; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiIPaddrGet.c b/zhcp/BUILD/resource_access/src/vmapiIPaddrGet.c deleted file mode 100644 index 84ac556..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiIPaddrGet.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiSystem.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME IPaddr_Get_Layout -#define OUTPUT_STRUCTURE_NAME vmApiIPaddrGetOutput - -/** - * Virtual_Network_Query_OSA SMAPI interface - */ -int smIPaddr_Get(struct _VmApiInternalContext* vmapiContextP, - vmApiIPaddrGetOutput ** outData) { - const char * const functionName = "IPaddr_Get"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageActivate.c b/zhcp/BUILD/resource_access/src/vmapiImageActivate.c deleted file mode 100644 index a94498f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageActivate.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Activate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageActivateOutput - -/** - * Image_Activate SMAPI interface - */ -int smImage_Activate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageActivateOutput ** outData) { - const char * const functionName = "Image_Activate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 or 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageActiveConfigurationQuery.c b/zhcp/BUILD/resource_access/src/vmapiImageActiveConfigurationQuery.c deleted file mode 100644 index 7561e1e..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageActiveConfigurationQuery.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Active_Configuration_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageActiveConfigurationQueryOutput - -/** - * Image_Active Configiration Query SMAPI interface - */ -int smImage_Active_Configuration_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageActiveConfigurationQueryOutput ** outData) { - const char * const functionName = "Image_Active_Configuration_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (userid) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuDefine.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuDefine.c deleted file mode 100644 index 5bd08bf..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuDefine.c +++ /dev/null @@ -1,87 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Define_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDefineOutput - -/** - * Image_CPU_Define SMAPI interface - */ -int smImage_CPU_Define(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char cpuType, - vmApiImageCpuDefineOutput ** outData) { - const char * const functionName = "Image_CPU_Define"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress) + 1; /* CPU type */ - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - *cursor = cpuType; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuDefineDm.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuDefineDm.c deleted file mode 100644 index e293d50..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuDefineDm.c +++ /dev/null @@ -1,102 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDefineDmOutput - -/** - * Image_CPU_Define_DM SMAPI interface - */ -int smImage_CPU_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char baseCpu, char * cpuId, - char dedicateCpu, char cryptoCpu, - vmApiImageCpuDefineDmOutput ** outData) { - const char * const functionName = "Image_CPU_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress) + 1 /* Base CPU */+ 4 + strlen(cpuId) + 1 - /* Dedicate CPU */+ 1; /* Crypto */ - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - *cursor = baseCpu; - cursor++; - - tempSize = strlen(cpuId); // CPU ID 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, cpuId, tempSize); - cursor += tempSize; - } - - *cursor = dedicateCpu; - cursor++; - - *cursor = cryptoCpu; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuDelete.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuDelete.c deleted file mode 100644 index 7931c0f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuDelete.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDeleteOutput - -/** - * Image_CPU_Delete SMAPI interface - */ -int smImage_CPU_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteOutput ** outData) { - const char * const functionName = "Image_CPU_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuDeleteDm.c deleted file mode 100644 index 5f499b5..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuDeleteDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDeleteDmOutput - -/** - * Image_CPU_Delete_DM SMAPI interface - */ -int smImage_CPU_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteDmOutput ** outData) { - const char * const functionName = "Image_CPU_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuQuery.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuQuery.c deleted file mode 100644 index 90c6067..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuQuery.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuQueryOutput - -/** - * Image_CPU_Query SMAPI interface - */ -int smImage_CPU_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageCpuQueryOutput ** outData) { - const char * const functionName = "Image_CPU_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuQueryDm.c deleted file mode 100644 index d53e93b..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuQueryDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuQueryDmOutput - -/** - * Image_CPU_Query_DM SMAPI interface - */ -int smImage_CPU_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuQueryDmOutput ** outData) { - const char * const functionName = "Image_CPU_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCpuSetMaximumDm.c b/zhcp/BUILD/resource_access/src/vmapiImageCpuSetMaximumDm.c deleted file mode 100644 index e2b3995..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCpuSetMaximumDm.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Set_Maximum_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuSetMaximumDmOutput - -/** - * Image_CPU_Set_Maximum_DM SMAPI interface - */ -int smImage_CPU_Set_Maximum_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int maxCpus, - vmApiImageCpuSetMaximumDmOutput ** outData) { - const char * const functionName = "Image_CPU_Set_Maximum_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* Max CPUs */; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - PUT_INT(maxCpus, cursor); - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageCreateDm.c b/zhcp/BUILD/resource_access/src/vmapiImageCreateDm.c deleted file mode 100644 index 3064b28..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageCreateDm.c +++ /dev/null @@ -1,122 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCreateDmOutput - -/** - * Image_Create_DM SMAPI interface - */ -int smImage_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * prototypeName, - int initialPasswordLength, char * initialPassword, - char * initialAccountNumber, int imageRecordCount, - vmApiImageRecord * imageRecordList, vmApiImageCreateDmOutput ** outData) { - const char * const functionName = "Image_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - prototypeName) + 4 + initialPasswordLength + 4 + strlen( - initialAccountNumber) + 4; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int imageRecordTotal = 0; - for (i = 0; i < imageRecordCount; i++) { - inputSize += 4; // Record length integer - inputSize += imageRecordList[i].imageRecordLength; // Data length - - imageRecordTotal += 4; - imageRecordTotal += imageRecordList[i].imageRecordLength; - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(prototypeName); // Prototype name 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, prototypeName, tempSize); - cursor += tempSize; - } - - tempSize = initialPasswordLength; // Initial password 0..200 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, initialPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(initialAccountNumber); // Initial account number 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, initialAccountNumber, tempSize); - cursor += tempSize; - } - - // Add in the length of images array then the data if available - PUT_INT(imageRecordTotal, cursor); - if (imageRecordTotal > 0) { - for (i = 0; i < imageRecordCount; i++) { - tempSize = imageRecordList[i].imageRecordLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, imageRecordList[i].imageRecord, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeactivate.c b/zhcp/BUILD/resource_access/src/vmapiImageDeactivate.c deleted file mode 100644 index ac0f4e9..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeactivate.c +++ /dev/null @@ -1,86 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Deactivate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeactivateOutput - -/** - * Image_Deactivate SMAPI interface - */ -int smImage_Deactivate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * forceTime, - vmApiImageDeactivateOutput ** outData) { - const char * const functionName = "Image_Deactivate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - forceTime); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 or 1..64 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(forceTime); // Force time 0..12 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, forceTime, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDeleteDm.c deleted file mode 100644 index b60a58a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeleteDm.c +++ /dev/null @@ -1,82 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeleteDmOutput - -/** - * Image_Delete_DM SMAPI interface - */ -int smImage_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dataSecurityErase, - vmApiImageDeleteDmOutput ** outData) { - const char * const functionName = "Image_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1; - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Data security erase byte - *cursor = dataSecurityErase; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicate.c b/zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicate.c deleted file mode 100644 index d79cdec..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicate.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Dedicate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceDedicateOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Dedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateOutput ** outData) { - const char * const functionName = "Image_Device_Dedicate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(realDeviceNumber) + 1; // For readonly char - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(realDeviceNumber); // Real device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, realDeviceNumber, tempSize); - cursor += tempSize; - - // Readonly byte - *cursor = readonly; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicateDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicateDm.c deleted file mode 100644 index e16b105..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeviceDedicateDm.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Dedicate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceDedicateDmOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Dedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateDmOutput ** outData) { - const char * const functionName = "Image_Device_Dedicate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(realDeviceNumber) + 1; // For readonly char - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(realDeviceNumber); // Real device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, realDeviceNumber, tempSize); - cursor += tempSize; - - // Readonly byte - *cursor = readonly; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeviceReset.c b/zhcp/BUILD/resource_access/src/vmapiImageDeviceReset.c deleted file mode 100644 index b23345a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeviceReset.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Reset_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceResetOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Reset(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceResetOutput ** outData) { - const char * const functionName = "Image_Device_Reset"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicate.c b/zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicate.c deleted file mode 100644 index acb863a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicate.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Undedicate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceUndedicateOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Undedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateOutput ** outData) { - const char * const functionName = "Image_Device_Undedicate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicateDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicateDm.c deleted file mode 100644 index 198564d..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDeviceUndedicateDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Undedicate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceUndedicateOutput - -/** - * Image_Device_Undedicate_DM SMAPI interface - */ -int smImage_Device_Undedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateDmOutput ** outData) { - const char * const functionName = "Image_Device_Undedicate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskCopy.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskCopy.c deleted file mode 100644 index f3e65bb..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskCopy.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Copy_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCopyOutput - -/** - * Image_Device_Undedicate_DM SMAPI interface - */ -int smImage_Disk_Copy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskCopyOutput ** outData) { - const char * const functionName = "Image_Disk_Copy"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskCopyDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskCopyDm.c deleted file mode 100644 index 2c2805d..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskCopyDm.c +++ /dev/null @@ -1,144 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Copy_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCopyDmOutput - -/** - * Image_Disk_Copy_DM - */ -int smImage_Disk_Copy_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * sourceImageName, char * sourceImageDiskNumber, - char * imageDiskAllocationType, char * allocationAreaName, - char * imageDiskMode, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCopyDmOutput ** outData) { - const char * const functionName = "Image_Disk_Copy_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(sourceImageName) + 4 + strlen( - sourceImageDiskNumber) + 4 + strlen(imageDiskAllocationType) + 4 - + strlen(allocationAreaName) + 4 + strlen(imageDiskMode) + 4 - + strlen(readPassword) + 4 + strlen(writePassword) + 4 + strlen( - multiPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(sourceImageName); // Image name 1..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, sourceImageName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(sourceImageDiskNumber); // Source image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, sourceImageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskAllocationType); // Image allocation type 0..10 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskAllocationType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(allocationAreaName); // Allocation area name 0..10 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, allocationAreaName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(imageDiskMode); // Image disk mode 0..5 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskMode, tempSize); - cursor += tempSize; - } - - tempSize = strlen(readPassword); // Read password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(writePassword); // Write password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, writePassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(multiPassword); // Multi password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, multiPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskCreate.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskCreate.c deleted file mode 100644 index 8522ff4..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskCreate.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCreateOutput - -/** - * Image_Disk_Create SMAPI interface - */ -int smImage_Disk_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, char * imageDiskMode, - vmApiImageDiskCreateOutput ** outData) { - const char * const functionName = "Image_Disk_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(imageDiskMode); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskMode); // Image disk mode 0..5 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskMode, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskCreateDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskCreateDm.c deleted file mode 100644 index c7ce7a6..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskCreateDm.c +++ /dev/null @@ -1,150 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCreateDmOutput - -/** - * Image_Disk_Create_DM SMAPI interface - */ -int smImage_Disk_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * imageDiskDeviceType, char * imageDiskAllocationType, - char * allocationAreaNameOrVolser, char allocationUnitSize, - int imageDiskSize, char * imageDiskMode, char imageDiskFormatting, - char * imageDiskLabel, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCreateDmOutput ** outData) { - const char * const functionName = "Image_Disk_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(imageDiskDeviceType) + 4 + strlen( - imageDiskAllocationType) + 4 + strlen(allocationAreaNameOrVolser) - + 1 + /* allocationUnitSize */4 /* imageDiskSize */+ 4 + strlen( - imageDiskMode) + 1 /* imageDiskFormatting */+ 4 + strlen( - imageDiskLabel) + 4 + strlen(readPassword) + 4 + strlen( - writePassword) + 4 + strlen(multiPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskDeviceType); // Image disk device type 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskDeviceType, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskAllocationType); // Image disk allocation type 1..10 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskAllocationType, tempSize); - cursor += tempSize; - - tempSize = strlen(allocationAreaNameOrVolser); // Allocation area name or volser 0..8, 0..6 or 0..4 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, allocationAreaNameOrVolser, tempSize); - cursor += tempSize; - } - - *cursor = allocationUnitSize; // Allocation Unit size - cursor++; - - PUT_INT(imageDiskSize, cursor); // Image disk size - - tempSize = strlen(imageDiskMode); // Image disk mode 1..5 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskMode, tempSize); - cursor += tempSize; - - *cursor = imageDiskFormatting; // Image disk formatting - cursor++; - - tempSize = strlen(imageDiskLabel); // Image disk label 0..6 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskLabel, tempSize); - cursor += tempSize; - } - - tempSize = strlen(readPassword); // Read password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(writePassword); // Write password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, writePassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(multiPassword); // Multi password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, multiPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskDelete.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskDelete.c deleted file mode 100644 index 7d2f260..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskDelete.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskDeleteOutput - -/** - * Image_Disk_Delete SMAPI interface - */ -int smImage_Disk_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskDeleteOutput ** outData) { - const char * const functionName = "Image_Disk_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskDeleteDm.c deleted file mode 100644 index f8a4558..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskDeleteDm.c +++ /dev/null @@ -1,86 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskDeleteDmOutput - -/** - * Image_Disk_Delete SMAPI interface - */ -int smImage_Disk_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char dataSecurityErase, vmApiImageDiskDeleteDmOutput ** outData) { - const char * const functionName = "Image_Disk_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 1 /* dataSecurityErase */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - *cursor = dataSecurityErase; // Data security erase byte - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskShare.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskShare.c deleted file mode 100644 index 273ff39..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskShare.c +++ /dev/null @@ -1,111 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Share_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskShareOutput - -/** - * Image_Disk_Share SMAPI interface - */ -int smImage_Disk_Share(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareOutput ** outData) { - const char * const functionName = "Image_Disk_Share"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(targetImageName) + 4 + strlen( - targetImageDiskNumber) + 4 + strlen(readWriteMode) + 4 + strlen( - optionalPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageName); // Target image name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageDiskNumber); // Target image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(readWriteMode); // Read write mode 0-4 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readWriteMode, tempSize); - cursor += tempSize; - } - - tempSize = strlen(optionalPassword); // Optional password to share the disk 0-8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, optionalPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskShareDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskShareDm.c deleted file mode 100644 index 7fc9fe3..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskShareDm.c +++ /dev/null @@ -1,111 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Share_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskShareDmOutput - -/** - * Image_Disk_Share_DM SMAPI interface - */ -int smImage_Disk_Share_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareDmOutput ** outData) { - const char * const functionName = "Image_Disk_Share_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(targetImageName) + 4 + strlen( - targetImageDiskNumber) + 4 + strlen(readWriteMode) + 4 + strlen( - optionalPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageName); // Target image name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageDiskNumber); // Target image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(readWriteMode); // Read write mode 0-4 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readWriteMode, tempSize); - cursor += tempSize; - } - - tempSize = strlen(optionalPassword); // Optional password to share the disk 0-8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, optionalPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskUnshare.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskUnshare.c deleted file mode 100644 index 6fd5b66..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskUnshare.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Unshare_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskUnshareOutput - -/** - * Image_Disk_Unshare SMAPI interface - */ -int smImage_Disk_Unshare(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskUnshareOutput ** outData) { - const char * const functionName = "Image_Disk_Unshare"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageDiskUnshareDm.c b/zhcp/BUILD/resource_access/src/vmapiImageDiskUnshareDm.c deleted file mode 100644 index 01a663a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageDiskUnshareDm.c +++ /dev/null @@ -1,95 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Unshare_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskUnshareDmOutput - -/** - * Image_Disk_Unshare_DM SMAPI interface - */ -int smImage_Disk_Unshare_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - vmApiImageDiskUnshareDmOutput ** outData) { - const char * const functionName = "Image_Disk_Unshare_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(targetImageName) + 4 + strlen( - targetImageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageName); // Target image name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageDiskNumber); // Target image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageIplDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiImageIplDeleteDm.c deleted file mode 100644 index b01b79e..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageIplDeleteDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplDeleteDmOutput - -/** - * Image_IPL_Delete_DM SMAPI interface - */ -int smImage_IPL_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplDeleteDmOutput ** outData) { - const char * const functionName = "Image_IPL_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageIplDeviceQuery.c b/zhcp/BUILD/resource_access/src/vmapiImageIplDeviceQuery.c deleted file mode 100644 index f9aebb0..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageIplDeviceQuery.c +++ /dev/null @@ -1,62 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Device_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplDeviceQueryOutput - -/** - * Image_IPL_Device_Query SMAPI interface - */ -int smImage_IPL_Device_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, vmApiImageIplDeviceQueryOutput ** outData) { - const char * const functionName = "Image_IPL_Device_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1 /* Null term */+ strlen( - userid) + 1 /* Null term */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - tempSize = strlen(userid); - strcpy(cursor, userid); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageIplQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiImageIplQueryDm.c deleted file mode 100644 index 94cc311..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageIplQueryDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplQueryDmOutput - -/** - * Image_IPL_Query_DM SMAPI interface - */ -int smImage_IPL_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplQueryDmOutput ** outData) { - const char * const functionName = "Image_IPL_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageIplSetDm.c b/zhcp/BUILD/resource_access/src/vmapiImageIplSetDm.c deleted file mode 100644 index 1666064..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageIplSetDm.c +++ /dev/null @@ -1,98 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Set_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplSetDmOutput - -/** - * Image_IPL_Set_DM SMAPI interface - */ -int smImage_IPL_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * savedSystem, char * loadParameter, - char * parameterString, vmApiImageIplSetDmOutput ** outData) { - const char * const functionName = "Image_IPL_Set_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - savedSystem) + 4 + strlen(loadParameter) + 4 + strlen( - parameterString); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(savedSystem); // Saved system 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, savedSystem, tempSize); - cursor += tempSize; - - tempSize = strlen(loadParameter); // Load parameter 0..10 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, loadParameter, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parameterString); // Parameter string 0..64 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parameterString, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageLockDm.c b/zhcp/BUILD/resource_access/src/vmapiImageLockDm.c deleted file mode 100644 index a732419..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageLockDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Lock_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageLockDmOutput - -/** - * Image_Lock_DM SMAPI interface - */ -int smImage_Lock_DM(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * deviceAddress, vmApiImageLockDmOutput ** outData) { - const char * const functionName = "Image_Lock_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - deviceAddress); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(deviceAddress); // Device address 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, deviceAddress, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageNameQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiImageNameQueryDm.c deleted file mode 100644 index 0c2861b..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageNameQueryDm.c +++ /dev/null @@ -1,411 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Name_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageNameQueryDmOutput - -/** - * Image_Name_Query_DM SMAPI interface - */ -int smImage_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageNameQueryDmOutput ** outData) { - const char * const functionName = "Image_Name_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc = 0; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - int i; - int temp; - char *imageName; - vmApiImageName *nameList; - - FILE* cacheFileP = 0; - char resultLine[10]; - int resultLineL = 0; - char cachePath[BUFLEN + 1]; - int cacheFileFD; - struct flock fl; - int recordCount = 0; - char traceLine[LINESIZE + 100]; - int dataReadFromCache = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - // Read from the cache file, if exists. - - memset(cachePath, 0, sizeof(cachePath)); - strcpy(cachePath, "/var/opt/ibm/zvmmap/.vmapi/.cache/"); - strcat(cachePath, "users.list"); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file to look for: <%.*s> \n", LINESIZE, cachePath); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cachePath) { - if (cacheFileValid(vmapiContextP, cachePath)) { - cacheFileP = fopen(cachePath, "r"); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file pointer opened for read: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileP != NULL) { - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while reading, so no one else is writing into it - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - // Try to get the lock, if the file is in use by some other process, fetch the information from directory - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - *outData = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiImageNameQueryDmOutput)); - nameList = smMemoryGroupAlloc(vmapiContextP, - sizeof(nameList)); - - if (nameList == 0 || *outData == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, traceLine); - return MEMORY_ERROR; - } - - while (fgets(resultLine, sizeof(resultLine), cacheFileP)) { - resultLineL = strlen(resultLine); - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Found the user <%s> in Cache \n", - resultLine); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - recordCount++; - if (resultLineL > 0) { - if (resultLine[resultLineL - 1] == '\n') { - --resultLineL; - resultLine[resultLineL] = 0; - } - } - imageName = smMemoryGroupAlloc(vmapiContextP, - resultLineL); - if (imageName == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, - traceLine); - return MEMORY_ERROR; - } - - strcpy(imageName, resultLine); - dataReadFromCache = 1; - - if (recordCount > 1) { - nameList = smMemoryGroupRealloc(vmapiContextP, - (void *) nameList, recordCount - * sizeof(nameList)); - if (nameList == 0) { - sprintf( - traceLine, - "***Error trying to obtain realloc memory for cache records of size %d.\n", - recordCount * sizeof(nameList)); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), RcRuntime, - RsNoMemory, traceLine); - return MEMORY_ERROR; - } - } - nameList[recordCount - 1].imageName = imageName; - } - - (*outData) -> nameList = nameList; - (*outData) -> nameCount = recordCount; - (*outData) -> common.returnCode - = (*outData) -> common.reasonCode = 0; - - // Unlock the file - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file read lock to be unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - sprintf(traceLine, - "***Error trying to unlock cache file read lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If cache data used return to caller - if (dataReadFromCache) { - return rc; - } - - } - } - // Cache file is invalid/missing/(out of date) remove it - else { - if (remove(cachePath)) { - // If the error is anything but the file is not found - if (ENOENT != errno) { - sprintf( - traceLine, - "***Error removing out of date cache file <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file not found.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } else { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file erased, too old.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } - } - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - - if (0 == rc) { - if ((0 == (*outData)->common.returnCode) && (0 - == (*outData)->common.reasonCode)) { - // Write the cache file - // Build path to the cache directory - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - strcat(cachePath, "users.list"); - - if (cachePath) { - createDirectories(cachePath); - cacheFileP = fopen(cachePath, "w"); - if (NULL == cacheFileP) { - sprintf( - traceLine, - "***Error trying to open cache file for write. errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file pointer opened for WRITE: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileP != NULL) { - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while writing, so no one else is using it - fl.l_type = F_WRLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file WRITE lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - temp = (*outData)->nameCount; - - if (temp > 0) { - for (i = 0; i < temp; i++) { - memset(resultLine, 0, 9); - memcpy( - resultLine, - (*outData)->nameList[i].imageName, - strlen( - (*outData)->nameList[i].imageName) - + 1); - strcat(resultLine, "\n"); - fprintf(cacheFileP, "%s", resultLine); - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf( - traceLine, - "Adding user id <%s> in Cache \n", - resultLine); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - rc = fflush(cacheFileP); - if (EOF == rc) { - // Can't write to file, try to remove file - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - cacheFileP = 0; - if (remove(cachePath)) { - sprintf( - traceLine, - "***Error removing cache file after write error <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - return rc; // Continue processing even if cache file was removed - } - } - } - - // Unlock the file - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file WRITE lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file write lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - } - } - - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImagePasswordSetDm.c b/zhcp/BUILD/resource_access/src/vmapiImagePasswordSetDm.c deleted file mode 100644 index cf5ff58..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImagePasswordSetDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Password_Set_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImagePasswordSetDmOutput - -/** - * Image_Password_Set_DM SMAPI interface - */ -int smImage_Password_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imagePasswordLength, char * imagePassword, - vmApiImagePasswordSetDmOutput ** outData) { - const char * const functionName = "Image_Password_Set_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + imagePasswordLength; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = imagePasswordLength; // Image password 1..200 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imagePassword, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageQueryActivateTime.c b/zhcp/BUILD/resource_access/src/vmapiImageQueryActivateTime.c deleted file mode 100644 index 39f7be2..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageQueryActivateTime.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Query_Activate_Time_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageQueryActivateTimeOutput - -/** - * Image_Query_Activate_Time SMAPI interface - */ -int smImage_Query_Activate_Time(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dateFormat, - vmApiImageQueryActivateTimeOutput ** outData) { - const char * const functionName = "Image_Query_Activate_Time"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 /* Data format char */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = dateFormat; // Date format character - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiImageQueryDm.c deleted file mode 100644 index 8e38172..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageQueryDm.c +++ /dev/null @@ -1,563 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include "smPublic.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageQueryDmOutput - -extern void vmbkendGetCachePath(struct _VmApiInternalContext* vmapiContextP, - char *pathP); - -void hidePassword(char *directoryRecord); - -/** - * Image_Query_DM SMAPI interface - */ -int smImage_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageQueryDmOutput ** outData, - bool readFromCache) { - - char cachePath[BUFLEN + 1]; - char userID[10]; - FILE* cacheFileP = 0; - char resultLine[256]; - int resultLineL = 0; - const char* cP = 0; - - const char * const functionName = "Image_Query_DM"; - int tempSize; - char * cursor; - int rc = 0; - char traceLine[LINESIZE + 100]; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - int i; - int temp; - - char * tempTargetIdentifier = targetIdentifier; - - vmApiImageRecord *recordList; - char *imageRecord; - int imageRecordLen; - - int recordCount = 0; - int dataReadFromCache = 0; - - int cacheFileFD; - struct flock fl; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - memset(userID, 0, sizeof(userID)); - - i = 0; - for (; *tempTargetIdentifier != '\0'; tempTargetIdentifier++) { - userID[i++] = tolower(*tempTargetIdentifier); - } - - tempTargetIdentifier = targetIdentifier; - - userID[i--] = '\0'; - strcat(cachePath, userID); - strcat(cachePath, ".direct"); - - if (cachePath && readFromCache) { - - if (cacheFileValid(vmapiContextP, cachePath)) { - cacheFileP = fopen(cachePath, "r"); - if (cacheFileP) { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file pointer opened for read: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while reading, so no one else is writing into it - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - // Try to get the lock, if the file is in use by some other process, fetch the information from directory - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - recordList = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiImageRecord)); - *outData = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiImageQueryDmOutput)); - if (recordList == 0 || *outData == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, traceLine); - return MEMORY_ERROR; - } - while (fgets(resultLine, sizeof(resultLine), cacheFileP)) { - resultLineL = strlen(resultLine); - recordCount++; - if (resultLineL > 0) { - if (resultLine[resultLineL - 1] == '\n') { - --resultLineL; - resultLine[resultLineL] = 0; - } - } - imageRecordLen = resultLineL; - imageRecord = smMemoryGroupAlloc(vmapiContextP, - imageRecordLen); - if (imageRecord == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, - traceLine); - return MEMORY_ERROR; - } - strcpy(imageRecord, resultLine); - dataReadFromCache = 1; - - if (recordCount > 1) { - recordList = smMemoryGroupRealloc( - vmapiContextP, (void *) recordList, - recordCount * sizeof(vmApiImageRecord)); - if (recordList == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), RcRuntime, - RsNoMemory, traceLine); - return MEMORY_ERROR; - } - } - recordList[recordCount - 1].imageRecord - = imageRecord; - recordList[recordCount - 1].imageRecordLength - = imageRecordLen; - - } - - (*outData) -> imageRecordList = recordList; - (*outData) -> imageRecordCount = recordCount; - (*outData) -> common.returnCode - = (*outData) -> common.reasonCode = 0; - // Unlock the file. - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file read lock to be unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file read lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - // Else if not able to get lock, continue with call - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If cache data used return to caller - if (dataReadFromCache) { - return rc; - } - } - } - // Cache file is invalid/missing/(out of date) remove it - else { - if (remove(cachePath)) { - // If the error is anything but the file is not found - if (ENOENT != errno) { - sprintf( - traceLine, - "***Error removing out of date cache file <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file not found.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } else { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file erased, too old.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } - } - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - - // Do the caching of the image. - if ((0 == rc) && readFromCache) // Do not store if the call was for getting data with password - { - if ((0 == (*outData)->common.returnCode) && (0 - == (*outData)->common.reasonCode)) { - // Write the cache file - // Build path to the cache directory. - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - memset(userID, 0, sizeof(userID)); - - i = 0; - for (; *tempTargetIdentifier != '\0'; tempTargetIdentifier++) { - userID[i++] = tolower(*tempTargetIdentifier); - } - userID[i--] = '\0'; - strcat(cachePath, userID); - strcat(cachePath, ".direct"); - - if (cachePath) { - cacheFileP = 0; - createDirectories(cachePath); - cacheFileP = fopen(cachePath, "w"); - if (NULL == cacheFileP) { - sprintf( - traceLine, - "***Error trying to open cache file for write. errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file pointer opened for WRITE: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If the file opened for write then add cache information - if (cacheFileP != NULL) { - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while writing, so no one else is using it - fl.l_type = F_WRLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file WRITE lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - temp = (*outData)->imageRecordCount; - - if (temp > 0) { - for (i = 0; i < temp; i++) { - memset(resultLine, 0, sizeof(resultLine)); - memcpy( - resultLine, - (*outData)->imageRecordList[i].imageRecord, - (*outData)->imageRecordList[i].imageRecordLength); - resultLineL = strlen(resultLine); - if (resultLineL > 71) { - resultLine[71] = 0; - resultLineL = 71; - } - strip(resultLine, 'T', ' '); - cP = &resultLine[0]; - while (cP && (*cP == ' ')) - ++cP; - - hidePassword(resultLine); - strcat(resultLine, "\n"); - fprintf(cacheFileP, "%s", resultLine); - rc = fflush(cacheFileP); - if (EOF == rc) { - // Can't write to file, try to remove file - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - cacheFileP = 0; - if (remove(cachePath)) { - sprintf( - traceLine, - "***Error removing cache file after write error <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - return rc; // Continue processing even if cache file was removed - } - } - } - - // Unlock the file - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file WRITE lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file write lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - } - } - - return rc; -} - -/** - * This function removes the password field of USER and MDISK statements. - */ -void hidePassword(char *directoryRecord) { - char tempBuffer[100]; - char * savePtr; - int length = strlen(directoryRecord); - - char replacedString[100]; - char * token; - memcpy(tempBuffer, directoryRecord, length); - tempBuffer[length] = '\0'; - token = strtok_r(tempBuffer, " ", &savePtr); - - if (token != NULL) { - if (0 == strncasecmp(token, "USER", strlen(token))) { - strcpy(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); // This is userID - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, "XXXXX"); // This is password - strcat(replacedString, " "); - - while (token != NULL) { - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, token); // This is userID - strcat(replacedString, " "); - } - } - - strcpy(directoryRecord, replacedString); - } else if (strncasecmp(token, "MDISK", strlen(token)) == 0) { - strcpy(replacedString, token); - strcat(replacedString, " "); - - // MDISK Address(VDEV) Value - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - - // MDISK Dev Type Value - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - // DEVICE Number Value - if (strncasecmp(token, "DEVNO", strlen(token)) == 0) { - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } - // V_DISK Value in Blocks - else if (strncasecmp(token, "V-DISK", strlen(token)) == 0) { - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } - // T-DISK Value in Cylinders or Blocks - else if (strncasecmp(token, "T-DISK", strlen(token)) == 0) { - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } else { - // CYL or BLK Start - strcat(replacedString, token); - strcat(replacedString, " "); - - //CYL or BLK End - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - - // Volume Serial Number - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - // Access Mode - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, "XXXXX"); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, "XXXXX"); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, "XXXXX"); - strcat(replacedString, " "); - - } - } - } - strcpy(directoryRecord, replacedString); - } - } - } - } -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageRecycle.c b/zhcp/BUILD/resource_access/src/vmapiImageRecycle.c deleted file mode 100644 index 267d31f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageRecycle.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Recycle_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageRecycleOutput - -/** - * Image_Recycle SMAPI interface - */ -int smImage_Recycle(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageRecycleOutput ** outData) { - const char * const functionName = "Image_Recyle"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageReplaceDm.c b/zhcp/BUILD/resource_access/src/vmapiImageReplaceDm.c deleted file mode 100644 index 9c41772..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageReplaceDm.c +++ /dev/null @@ -1,95 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Replace_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageReplaceDmOutput - -/** - * Image_Replace_DM SMAPI interface - */ -int smImage_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imageRecordArrayCount, - vmApiImageRecord * imageRecordList, - vmApiImageReplaceDmOutput ** outData) { - const char * const functionName = "Image_Replace_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* imageRecordArrayLength */; /* Need to add in actual array data size */ - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i, totalArraySize; - - totalArraySize = 0; - for (i = 0; i < imageRecordArrayCount; i++) { - totalArraySize += imageRecordList[i].imageRecordLength + 4; - inputSize += imageRecordList[i].imageRecordLength + 4; - } - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of image record array then the data if available - PUT_INT(totalArraySize, cursor); - - if (totalArraySize > 0) { - for (i = 0; i < imageRecordArrayCount; i++) { - tempSize = imageRecordList[i].imageRecordLength; - PUT_INT(tempSize, cursor); - memcpy(cursor, imageRecordList[i].imageRecord, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c b/zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c deleted file mode 100644 index 467ea00..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c +++ /dev/null @@ -1,118 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_SCSI_Characteristics_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageScsiCharacteristicsDefineDmOutput - -/** - * Image_SCSI_Characteristics_Define_DM SMAPI interface - */ -int smImage_SCSI_Characteristics_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * bootProgram, char * brLba, char * lun, char * portName, - char scpDatatype, int scpDataLength, char * scpData, - vmApiImageScsiCharacteristicsDefineDmOutput ** outData) { - const char * const functionName = "Image_SCSI_Characteristics_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - bootProgram) + 4 + strlen(brLba) + 4 + strlen(lun) + 4 + strlen( - portName) + 1 /* SCP data type*/+ 4 + scpDataLength; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(bootProgram); // Boot program 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, bootProgram, tempSize); - cursor += tempSize; - } - - tempSize = strlen(brLba); // BR LBA 0..16 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, brLba, tempSize); - cursor += tempSize; - } - - tempSize = strlen(lun); // LUN 0..16 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, lun, tempSize); - cursor += tempSize; - } - - tempSize = strlen(portName); // Port name 0..16 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, portName, tempSize); - cursor += tempSize; - } - - *cursor = scpDatatype; // Char 1 - - tempSize = scpDataLength; // SCP data 0..4096 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, scpData, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c deleted file mode 100644 index a8c7d68..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_SCSI_Characteristics_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageScsiCharacteristicsQueryDmOutput - -/** - * Image_SCSI_Characteristics_Query_DM SMAPI interface - */ -int smImage_SCSI_Characteristics_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageScsiCharacteristicsQueryDmOutput ** outData) { - const char * const functionName = "Image_SCSI_Characteristics_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageStatusQuery.c b/zhcp/BUILD/resource_access/src/vmapiImageStatusQuery.c deleted file mode 100644 index 79ae875..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageStatusQuery.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Status_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageStatusQueryOutput - -/** - * Image_Status_Query SMAPI interface - */ -int smImage_Status_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageStatusQueryOutput ** outData) { - const char * const functionName = "Image_Status_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageUnlockDm.c b/zhcp/BUILD/resource_access/src/vmapiImageUnlockDm.c deleted file mode 100644 index 63fa36f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageUnlockDm.c +++ /dev/null @@ -1,85 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Unlock_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageUnlockDmOutput - -/** - * Image_Unlock_DM SMAPI interface - */ -int smImage_Unlock_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * deviceAddress, - vmApiImageUnlockDmOutput ** outData) { - const char * const functionName = "Image_Unlock_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - deviceAddress); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(deviceAddress); // Device address 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, deviceAddress, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageVolumeAdd.c b/zhcp/BUILD/resource_access/src/vmapiImageVolumeAdd.c deleted file mode 100644 index 64687f1..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageVolumeAdd.c +++ /dev/null @@ -1,150 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Add_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeAddOutput - -/** - * Image_Volume_Add SMAPI interface - */ -int smImage_Volume_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeAddOutput ** outData) { - const char * const functionName = "Image_Volume_Add"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumer) + 4 + strlen(imageVolumeLabel) + 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumer); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumer, tempSize); - cursor += tempSize; - - tempSize = strlen(imageVolumeLabel); // Image volume label 1..6 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageVolumeLabel, tempSize); - cursor += tempSize; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageVolumeDelete.c b/zhcp/BUILD/resource_access/src/vmapiImageVolumeDelete.c deleted file mode 100644 index c69c70a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageVolumeDelete.c +++ /dev/null @@ -1,150 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeDeleteOutput - -/** - * Image_Volume_Delete SMAPI interface - */ -int smImage_Volume_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeAddOutput ** outData) { - const char * const functionName = "Image_Volume_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + strlen(password) + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumer) + 4 + strlen(imageVolumeLabel) + 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = strlen(password); // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumer); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumer, tempSize); - cursor += tempSize; - - tempSize = strlen(imageVolumeLabel); // Image volume label 1..6 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageVolumeLabel, tempSize); - cursor += tempSize; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceDefineDm.c b/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceDefineDm.c deleted file mode 100644 index 369558c..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceDefineDm.c +++ /dev/null @@ -1,112 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Space_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeSpaceDefineDmOutput - -/** - * Image_Volume_Space_Define_DM SMAPI interface - */ -int smImage_Volume_Space_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, int startCyl, int regionSize, char * groupName, - char deviceType, vmApiImageVolumeSpaceDefineDmOutput ** outData) { - const char * const functionName = "Image_Volume_Space_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 - /* Function type */ + 4 + strlen(regionName) + 4 + strlen( - imageVolumeId) + 4 /* Start cyl */+ 4 /* Region size */+ 4 + strlen( - groupName) + 1 /* DeviceType */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = functionType; // Function type - cursor++; - - tempSize = strlen(regionName); // Region name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, regionName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(imageVolumeId); // Image volume id 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageVolumeId, tempSize); - cursor += tempSize; - } - - PUT_INT(startCyl, cursor); // Start cylinder - - PUT_INT(regionSize, cursor); // Region size - - tempSize = strlen(groupName); // Group name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, groupName, tempSize); - cursor += tempSize; - } - - *cursor = deviceType; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceQueryDm.c deleted file mode 100644 index 44fcb3e..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceQueryDm.c +++ /dev/null @@ -1,91 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Space_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeSpaceQueryDmOutput - -/** - * Image_Volume_Space_Query_DM SMAPI interface - */ -int smImage_Volume_Space_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char queryType, char entryType, - char * entryNames, vmApiImageVolumeSpaceQueryDmOutput ** outData) { - const char * const functionName = "Image_Volume_Space_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 - /* Query type */+ 1 /* Entry type */+ 4 + strlen(entryNames); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = queryType; // Query type - cursor++; - - *cursor = entryType; // Entry type - cursor++; - - tempSize = strlen(entryNames); // Entry names 0..255 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, entryNames, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c b/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c deleted file mode 100644 index 5375442..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c +++ /dev/null @@ -1,104 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Space_Remove_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeSpaceRemoveDmOutput - -/** - * Image_Volume_Space_Remove_DM SMAPI interface - */ -int smImage_Volume_Space_Remove_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, char * groupName, - vmApiImageVolumeSpaceRemoveDmOutput ** outData) { - const char * const functionName = "Image_Volume_Space_Remove_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 - /* Function type */+ 4 + strlen(regionName) + 4 + strlen(imageVolumeId) + 4 - + strlen(groupName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = functionType; // Function type - cursor++; - - tempSize = strlen(regionName); // Region name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, regionName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(imageVolumeId); // Image volume id 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageVolumeId, tempSize); - cursor += tempSize; - } - - tempSize = strlen(groupName); // Group name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, groupName, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiNameListAdd.c b/zhcp/BUILD/resource_access/src/vmapiNameListAdd.c deleted file mode 100644 index f5bdce2..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiNameListAdd.c +++ /dev/null @@ -1,81 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Add_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListAddOutput - -/** - * Name_List_Add SMAPI interface - */ -int smName_List_Add(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * name, vmApiNameListAddOutput ** outData) { - const char * const functionName = "Name_List_Add"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen(name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(name); // Name 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiNameListDestroy.c b/zhcp/BUILD/resource_access/src/vmapiNameListDestroy.c deleted file mode 100644 index 20861ef..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiNameListDestroy.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Destroy_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListDestroyOutput - -/** - * Name_List_Destroy SMAPI interface - */ -int smName_List_Destroy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListDestroyOutput ** outData) { - const char * const functionName = "Name_List_Destroy"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiNameListQuery.c b/zhcp/BUILD/resource_access/src/vmapiNameListQuery.c deleted file mode 100644 index b678023..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiNameListQuery.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListQueryOutput - -/** - * Name_List_Query SMAPI interface - */ -int smName_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListQueryOutput ** outData) { - const char * const functionName = "Name_List_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiNameListRemove.c b/zhcp/BUILD/resource_access/src/vmapiNameListRemove.c deleted file mode 100644 index 3384d96..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiNameListRemove.c +++ /dev/null @@ -1,82 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Remove_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListRemoveOutput - -/** - * Name_List_Remove SMAPI interface - */ -int smName_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * name, - vmApiNameListRemoveOutput ** outData) { - const char * const functionName = "Name_List_Remove"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen(name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(name); // Name 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiProfileCreateDm.c b/zhcp/BUILD/resource_access/src/vmapiProfileCreateDm.c deleted file mode 100644 index ed0c639..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiProfileCreateDm.c +++ /dev/null @@ -1,98 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileCreateDmOutput - -/** - * Profile_Create_DM SMAPI interface - */ -int smProfile_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileCreateDmOutput ** outData) { - const char * const functionName = "Profile_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* For profile record array length */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int profileRecordTotal = 0; - for (i = 0; i < profileRecordCount; i++) { - inputSize += 4; // Record length integer - inputSize += profileRecordList[i].profileRecordLength; // Data length - - profileRecordTotal += 4; - profileRecordTotal += profileRecordList[i].profileRecordLength; - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of profile record array then the data if available - PUT_INT(profileRecordTotal, cursor); - if (profileRecordTotal > 0) { - for (i = 0; i < profileRecordCount; i++) { - tempSize = profileRecordList[i].profileRecordLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, profileRecordList[i].recordData, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiProfileDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiProfileDeleteDm.c deleted file mode 100644 index 44d9e96..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiProfileDeleteDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileDeleteDmOutput - -/** - * Profile_Delete_DM SMAPI interface - */ -int smProfile_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileDeleteDmOutput ** outData) { - const char * const functionName = "Profile_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiProfileQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiProfileQueryDm.c deleted file mode 100644 index 62d14d0..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiProfileQueryDm.c +++ /dev/null @@ -1,427 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include "smPublic.h" -#include -#include -#include -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileQueryDmOutput - -/** - * Profile_Query_DM SMAPI interface - */ -int smProfile_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileQueryDmOutput ** outData) { - const char * const functionName = "Profile_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - // Cache variables - char path[BUFLEN + 1]; - char cachePath[BUFLEN + 1]; - char profileID[10]; - FILE* cacheFileP = 0; - char resultLine[256]; - int resultLineL = 0; - const char* cP = 0; - char * tempTargetIdentifier; - char traceLine[LINESIZE + 100]; - vmApiProfileRecord *recordList; - char *profileRecord; - int profileRecordLen; - int recordCount = 0; - int dataReadFromCache = 0; - int cacheFileFD; - struct flock fl; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - int i; - rc = 0; - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Check if any cache data for this profile - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - memset(profileID, 0, sizeof(profileID)); - - // Force profile id name to lowercase and save it in profileID - tempTargetIdentifier = targetIdentifier; - i = 0; - for (; *tempTargetIdentifier != '\0'; tempTargetIdentifier++) { - profileID[i++] = tolower(*tempTargetIdentifier); - } - profileID[i--] = '\0'; - strcat(cachePath, profileID); - strcat(cachePath, ".direct"); - - if (cacheFileValid(vmapiContextP, cachePath)) { - cacheFileP = fopen(cachePath, "r"); - if (cacheFileP) { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file(%s) pointer opened for read: %p \n", - profileID, cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while reading, so no one else is writing into it - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - // Try to get the lock, if the file is in use by some other process, fetch the information from directory - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file read lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - recordList = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiProfileRecord)); - *outData = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiProfileQueryDmOutput)); - if (recordList == 0 || *outData == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return MEMORY_ERROR; - } - while (fgets(resultLine, sizeof(resultLine), cacheFileP)) { - resultLineL = strlen(resultLine); - recordCount++; - if (resultLineL > 0) { - if (resultLine[resultLineL - 1] == '\n') { - --resultLineL; - resultLine[resultLineL] = 0; - } - } - profileRecordLen = resultLineL; - profileRecord = smMemoryGroupAlloc(vmapiContextP, - profileRecordLen); - if (profileRecord == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return MEMORY_ERROR; - } - strcpy(profileRecord, resultLine); - dataReadFromCache = 1; - - if (recordCount > 1) { - recordList = smMemoryGroupRealloc(vmapiContextP, - (void *) recordList, recordCount - * sizeof(vmApiProfileRecord)); - if (recordList == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, - traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return MEMORY_ERROR; - } - } - recordList[recordCount - 1].recordData = profileRecord; - recordList[recordCount - 1].profileRecordLength - = profileRecordLen; - - } - - (*outData) -> profileRecordList = recordList; - (*outData) -> profileRecordCount = recordCount; - (*outData) -> common.returnCode - = (*outData) -> common.reasonCode = 0; - - // Unlock the file. - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file read lock to be unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file read lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file read lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - // Else if not able to get lock, continue with call - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close profile cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If cache data used return to caller - if (dataReadFromCache) { - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return rc; - } - } - } - // Cache file is invalid/missing/(out of date) remove it - else { - if (remove(cachePath)) { - if (ENOENT != errno) // If the error is anything but the file is not found - { - sprintf( - traceLine, - "***Error removing out of date profile cache file <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file not found.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } else { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file erased, too old.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - - // Do the caching of the image. - if (0 == rc) { - if ((0 == (*outData)->common.returnCode) && (0 - == (*outData)->common.reasonCode)) { - // Write the cache file - { - cacheFileP = 0; - createDirectories(cachePath); - cacheFileP = fopen(cachePath, "w"); - if (NULL == cacheFileP) { - sprintf( - traceLine, - "***Error trying to open profile cache file (%s) for write. errno %d\n", - profileID, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file pointer opened for WRITE: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If the file opened for write then add cache information - if (cacheFileP != NULL) { - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf( - traceLine, - "Profile cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while writing, so no one else is using it - fl.l_type = F_WRLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file WRITE lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - tempSize = (*outData)->profileRecordCount; - - if (tempSize > 0) { - for (i = 0; i < tempSize; i++) { - memset(resultLine, 0, sizeof(resultLine)); - memcpy( - resultLine, - (*outData)->profileRecordList[i].recordData, - (*outData)->profileRecordList[i].profileRecordLength); - resultLineL = strlen(resultLine); - if (resultLineL > 71) { - resultLine[71] = 0; - resultLineL = 71; - } - strip(resultLine, 'T', ' '); - cP = &resultLine[0]; - while (cP && (*cP == ' ')) - ++cP; - - // Ignore DIRMAINT control lines - strcat(resultLine, "\n"); - fprintf(cacheFileP, "%s", resultLine); - rc = fflush(cacheFileP); - if (EOF == rc) { - - // Can't write to file, try to remove file - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close profile cache file.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - cacheFileP = 0; - if (remove(cachePath)) { - sprintf( - traceLine, - "***Error removing profil cache file after write error <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - return rc; // Continue processing even if cache file was removed - } - } - } - - // Unlock the file. - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock profile cache file WRITE lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file write lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close profile cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - } - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiProfileReplaceDm.c b/zhcp/BUILD/resource_access/src/vmapiProfileReplaceDm.c deleted file mode 100644 index cc49777..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiProfileReplaceDm.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Replace_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileReplaceDmOutput - -/** - * Profile_Replace_DM SMAPI interface - */ -int smProfile_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileReplaceDmOutput ** outData) { - const char * const functionName = "Profile_Replace_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* For profile record array length */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int profileRecordTotal = 0; - - for (i = 0; i < profileRecordCount; i++) { - inputSize += 4; // Record length integer - inputSize += profileRecordList[i].profileRecordLength; // Data length - - profileRecordTotal += 4; - profileRecordTotal += profileRecordList[i].profileRecordLength; - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of profile record array then the data if available - PUT_INT(profileRecordTotal, cursor); - if (profileRecordTotal > 0) { - for (i = 0; i < profileRecordCount; i++) { - tempSize = profileRecordList[i].profileRecordLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, profileRecordList[i].recordData, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiPrototypeCreateDm.c b/zhcp/BUILD/resource_access/src/vmapiPrototypeCreateDm.c deleted file mode 100644 index 535efea..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiPrototypeCreateDm.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeCreateDmOutput - -/** - * Prototype_Create_DM SMAPI interface - */ -int smPrototype_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeCreateDmOutput ** outData) { - const char * const functionName = "Prototype_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* recordArraySize */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int recordTotal = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - for (i = 0; i < recordArrayCount; i++) { - inputSize += 4; // Record length integer - inputSize += recordArrayData[i].recordNameLength; // Data length - - recordTotal += 4; - recordTotal += recordArrayData[i].recordNameLength; - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of record array then the data if available - PUT_INT(recordTotal, cursor); - if (recordTotal > 0) { - for (i = 0; i < recordArrayCount; i++) { - tempSize = recordArrayData[i].recordNameLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, recordArrayData[i].recordName, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiPrototypeDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiPrototypeDeleteDm.c deleted file mode 100644 index 68c75dc..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiPrototypeDeleteDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeDeleteDmOutput - -/** - * Prototype_Delete_DM SMAPI interface - */ -int smPrototype_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeDeleteDmOutput ** outData) { - const char * const functionName = "Prototype_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiPrototypeNameQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiPrototypeNameQueryDm.c deleted file mode 100644 index f9959ea..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiPrototypeNameQueryDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Name_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeNameQueryDmOutput - -/** - * Prototype_Name_Query_DM SMAPI interface - */ -int smPrototype_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeNameQueryDmOutput ** outData) { - const char * const functionName = "Prototype_Name_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiPrototypeQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiPrototypeQueryDm.c deleted file mode 100644 index 93f3b2b..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiPrototypeQueryDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeQueryDmOutput - -/** - * Prototype_Query_DM SMAPI interface - */ -int smPrototype_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeQueryDmOutput ** outData) { - const char * const functionName = "Prototype_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiPrototypeReplaceDm.c b/zhcp/BUILD/resource_access/src/vmapiPrototypeReplaceDm.c deleted file mode 100644 index 046e345..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiPrototypeReplaceDm.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Replace_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeReplaceDmOutput - -/** - * Prototype_Replace_DM SMAPI interface - */ -int smPrototype_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeReplaceDmOutput ** outData) { - const char * const functionName = "Prototype_Replace_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /*record array length */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int recordTotal = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - for (i = 0; i < recordArrayCount; i++) { - inputSize += 4; // Record length integer - inputSize += recordArrayData[i].recordNameLength; // Data length - - recordTotal += 4; - recordTotal += recordArrayData[i].recordNameLength; - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of record array then the data if available - PUT_INT(recordTotal, cursor); - if (recordTotal > 0) { - for (i = 0; i < recordArrayCount; i++) { - tempSize = recordArrayData[i].recordNameLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, recordArrayData[i].recordName, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiQueryApiFunctionalLevel.c b/zhcp/BUILD/resource_access/src/vmapiQueryApiFunctionalLevel.c deleted file mode 100644 index d10b031..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiQueryApiFunctionalLevel.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Query_API_Functional_Level_Layout -#define OUTPUT_STRUCTURE_NAME vmApiQueryApiFunctionalLevelOutput - -/** - * Query_API_Functional_Level SMAPI interface - */ -int smQuery_API_Functional_Level(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiQueryApiFunctionalLevelOutput ** outData) { - const char * const functionName = "Query_API_Functional_Level"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiQueryAsynchronousOperationDm.c b/zhcp/BUILD/resource_access/src/vmapiQueryAsynchronousOperationDm.c deleted file mode 100644 index e97546e..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiQueryAsynchronousOperationDm.c +++ /dev/null @@ -1,79 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Query_Asynchronous_Operation_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiQueryAsynchronousOperationDmOutput - -/** - * Query_Asynchronous_Operation_DM SMAPI interface - */ -int smQuery_Asychronous_Operation_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operationId, vmApiQueryAsynchronousOperationDmOutput ** outData) { - const char * const functionName = "Query_Asynchronous_Operation_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /*operationId*/; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - PUT_INT(operationId, cursor); // Operation ID - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c b/zhcp/BUILD/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c deleted file mode 100644 index c956ed0..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Query_Directory_Manager_Level_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiQueryDirectoryManagerLevelDmOutput - -/** - * Query_Directory_Manager_Level_DM SMAPI interface - */ -int smQuery_Directory_Manager_Level_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiQueryDirectoryManagerLevelDmOutput ** outData) { - const char * const functionName = "Query_Directory_Manager_Level_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessAddDm.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessAddDm.c deleted file mode 100644 index 675ea2f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessAddDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Access_Add_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryAccessAddDmOutput - -/** - * Shared_Memory_Access_Add_DM SMAPI interface - */ -int smShared_Memory_Access_Add_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryAccessAddDmOutput ** outData) { - const char * const functionName = "Shared_Memory_Access_Add_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessQueryDm.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessQueryDm.c deleted file mode 100644 index 8136016..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessQueryDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Access_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryAccessQueryDmOutput - -/** - * Shared_Memory_Access_Query_DM SMAPI interface - */ -int smShared_Memory_Access_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessQueryDmOutput ** outData) { - const char * const functionName = "Shared_Memory_Access_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c deleted file mode 100644 index e7ff5f9..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Access_Remove_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryAccessRemoveDmOutput - -/** - * Shared_Memory_Access_Remove_DM SMAPI interface - */ -int smShared_Memory_Access_Remove_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessRemoveDmOutput ** outData) { - const char * const functionName = "Shared_Memory_Access_Remove_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryCreate.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryCreate.c deleted file mode 100644 index fd92348..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryCreate.c +++ /dev/null @@ -1,104 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryCreateOutput - -/** - * Shared_Memory_Create SMAPI interface - */ -int smShared_Memory_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - unsigned long long beginPage, unsigned long long endPage, - char pageAccessDescriptor, char memoryAttributes, - char * memoryAccessIdentifier, vmApiSharedMemoryCreateOutput ** outData) { - const char * const functionName = "Shared_Memory_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName) + 8 + 8 /* begin page, end page */+ 1 - /* page access descriptor */+ 1/* memory attribute */+ 4 + strlen( - memoryAccessIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - PUT_64INT(beginPage, cursor); // Begin page - - PUT_64INT(endPage, cursor); // End page - - *cursor = pageAccessDescriptor; // Page access descriptor - cursor++; - - *cursor = memoryAttributes; // Memory attributes - cursor++; - - tempSize = strlen(memoryAccessIdentifier); // Memory access identifier 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, memoryAccessIdentifier, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryDelete.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryDelete.c deleted file mode 100644 index fd9d462..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryDelete.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryDeleteOutput - -/** - * Shared_Memory_Delete SMAPI interface - */ -int smShared_Memory_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryDeleteOutput ** outData) { - const char * const functionName = "Shared_Memory_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryQuery.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryQuery.c deleted file mode 100644 index 77e6a0a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryQuery.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryQueryOutput - -/** - * Shared_Memory_Query SMAPI interface - */ -int smShared_Memory_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryQueryOutput ** outData) { - const char * const functionName = "Shared_Memory_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryReplace.c b/zhcp/BUILD/resource_access/src/vmapiSharedMemoryReplace.c deleted file mode 100644 index 22aa527..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSharedMemoryReplace.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Replace_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryReplaceOutput - -/** - * Shared_Memory_Replace SMAPI interface - */ -int smShared_Memory_Replace(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - char * memoryAccessIdentifier, - vmApiSharedMemoryReplaceOutput ** outData) { - const char * const functionName = "Shared_Memory_Replace"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName) + 4 + strlen(memoryAccessIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - tempSize = strlen(memoryAccessIdentifier); // MemoryAccessIdentifier 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, memoryAccessIdentifier, tempSize); - cursor += tempSize; - } - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesActivateDm.c b/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesActivateDm.c deleted file mode 100644 index 2b70a93..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesActivateDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiStatic.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Static_Image_Changes_Activate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiStaticImageChangesActivateDmOutput - -/** - * Static_Image_Changes_Activate_DM SMAPI interface - */ -int smStatic_Image_Changes_Activate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesActivateDmOutput ** outData) { - const char * const functionName = "Static_Image_Changes_Activate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesDeactivateDm.c b/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesDeactivateDm.c deleted file mode 100644 index 8d0a663..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesDeactivateDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiStatic.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Static_Image_Changes_Deactivate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiStaticImageChangesDeactivateDmOutput - -/** - * Static_Image_Changes_Deactivate_DM SMAPI interface - */ -int smStatic_Image_Changes_Deactivate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesDeactivateDmOutput ** outData) { - const char * const functionName = "Static_Image_Changes_Deactivate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesImmediateDm.c b/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesImmediateDm.c deleted file mode 100644 index 8b4b39f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiStaticImageChangesImmediateDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiStatic.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Static_Image_Changes_Immediate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiStaticImageChangesImmediateDmOutput - -/** - * Static_Image_Changes_Immediate_DM SMAPI interface - */ -int smStatic_Image_Changes_Immediate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesImmediateDmOutput ** outData) { - const char * const functionName = "Static_Image_Changes_Immediate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSystemInfoQuery.c b/zhcp/BUILD/resource_access/src/vmapiSystemInfoQuery.c deleted file mode 100644 index 500a549..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSystemInfoQuery.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiSystem.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME System_Info_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSystemInfoQueryOutput - -/** - * System_Info_Query SMAPI interface - */ -int smSystem_Info_Query(struct _VmApiInternalContext* vmapiContextP, - vmApiSystemInfoQueryOutput ** outData) { - const char * const functionName = "System_Info_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1 /* null term */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiSystemIoQuery.c b/zhcp/BUILD/resource_access/src/vmapiSystemIoQuery.c deleted file mode 100644 index e69a12f..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiSystemIoQuery.c +++ /dev/null @@ -1,62 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiSystem.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME System_IO_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSystemIoQueryOutput - -/** - * System_IO_Query SMAPI interface - */ -int smSystem_IO_Query(struct _VmApiInternalContext* vmapiContextP, - char * realDeviceAddress, vmApiSystemIoQueryOutput ** outData) { - const char * const functionName = "System_IO_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1 /* null term */+ strlen( - realDeviceAddress) + 1 /* null term */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - tempSize = strlen(realDeviceAddress); - strcpy(cursor, realDeviceAddress); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreate.c b/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreate.c deleted file mode 100644 index 8d13733..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreate.c +++ /dev/null @@ -1,96 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionCreateOutput - -/** - * Virtual_Channel_Connection_Create SMAPI interface - */ -int smVirtual_Channel_Connection_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - char * coupledImageDeviceNumber, - vmApiVirtualChannelConnectionCreateOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(coupledImageName) + 4 + strlen( - coupledImageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(coupledImageName); // Coupled image name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, coupledImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(coupledImageDeviceNumber); // Coupled image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, coupledImageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c deleted file mode 100644 index a9689e0..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c +++ /dev/null @@ -1,91 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionCreateDmOutput - -/** - * Virtual_Channel_Connection_Create_DM SMAPI interface - */ -int smVirtual_Channel_Connection_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - vmApiVirtualChannelConnectionCreateDmOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(coupledImageName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(coupledImageName); // Coupled image name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, coupledImageName, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDelete.c b/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDelete.c deleted file mode 100644 index 4567541..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDelete.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionDeleteOutput - -/** - * Virtual_Channel_Connection_Delete SMAPI interface - */ -int smVirtual_Channel_Connection_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c deleted file mode 100644 index dbf7887..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionDeleteDmOutput - -/** - * Virtual_Channel_Connection_Delete_DM SMAPI interface - */ -int smVirtual_Channel_Connection_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteDmOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c deleted file mode 100644 index a3e725d..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_LAN_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectLanOutput - -/** - * Virtual_Network_Adapter_Connect_Lan SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_LAN( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Connect_LAN"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Iinteger table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c deleted file mode 100644 index 1ff996d..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_LAN_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectLanDmOutput - -/** - * Virtual_Network_Adapter_Connect_Lan_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_LAN_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Connect_LAN_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c deleted file mode 100644 index b79a8c7..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_Vswitch_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectVswitchOutput - -/** - * Virtual_Network_Adapter_Connect_Vswitch SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_Vswitch( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Connect_Vswitch"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(switchName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c deleted file mode 100644 index be3adc6..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_Vswitch_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectVswitchDmOutput - -/** - * Virtual_Network_Adapter_Connect_Vswitch_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_Vswitch_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchDmOutput ** outData) { - const char * const functionName = - "Virtual_Network_Adapter_Connect_Vswitch_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(switchName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreate.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreate.c deleted file mode 100644 index f10ff78..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreate.c +++ /dev/null @@ -1,97 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterCreateOutput - -/** - * Virtual_Network_Adapter_Create SMAPI interface - */ -int smVirtual_Network_Adapter_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, int networkAdapterDevices, - char * channelPathId, vmApiVirtualNetworkAdapterCreateOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 1 /* adapterType */+ 4 - /* networking adapter devices */+ 4 + strlen(channelPathId); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - *cursor = adapterType; // Adapter type byte - cursor++; - - PUT_INT(networkAdapterDevices, cursor); // Network adapter devices - - tempSize = strlen(channelPathId); // Channel path id 0..2 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, channelPathId, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c deleted file mode 100644 index 6bf68e5..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c +++ /dev/null @@ -1,106 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterCreateDmOutput - -/** - * Virtual_Network_Adapter_Create_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, int networkAdapterDevices, - char * channelPathId, char * macId, - vmApiVirtualNetworkAdapterCreateDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 1 /* adapterType */ + 4 - /* networking adapter devices */ + 4 + strlen(channelPathId) + 4 - + strlen(macId); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - *cursor = adapterType; // Adapter type byte - cursor++; - - PUT_INT(networkAdapterDevices, cursor); // Network adapter devices - - tempSize = strlen(channelPathId); // Channel path ID 0..2 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, channelPathId, tempSize); - cursor += tempSize; - } - - tempSize = strlen(macId); // Mac ID 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, macId, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDelete.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDelete.c deleted file mode 100644 index 03bdf94..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDelete.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDeleteOutput - -/** - * Virtual_Network_Adapter_Delete_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c deleted file mode 100644 index fb8730a..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDeleteDmOutput - -/** - * Virtual_Network_Adapter_Delete_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c deleted file mode 100644 index f20b1b4..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Disconnect_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDisconnectOutput - -/** - * Virtual_Network_Adapter_Disconnect SMAPI interface - */ -int smVirtual_Network_Adapter_Disconnect( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Disconnect"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c deleted file mode 100644 index e8dcb64..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Disconnect_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDisconnectDmOutput - -/** - * Virtual_Network_Adapter_Disconnect_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Disconnect_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Disconnect_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterQuery.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterQuery.c deleted file mode 100644 index b246352..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkAdapterQuery.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterQueryOutput - -/** - * Virtual_Network_Adapter_Query SMAPI interface - */ -int smVirtual_Network_Adapter_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccess.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccess.c deleted file mode 100644 index 82a92ab..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccess.c +++ /dev/null @@ -1,100 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Access_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanAccessOutput - -/** - * Virtual_Network_LAN_Access SMAPI interface - */ -int smVirtual_Network_LAN_Access(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - char * accessOption, char * accessGrantName, char * promiscuity, - vmApiVirtualNetworkLanAccessOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Access"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + strlen(lanName) - + 1 + strlen(lanOwner) + 1 + strlen(accessOption) + 1 + strlen( - accessGrantName) + 1 + strlen(promiscuity) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - strcpy(cursor, lanName); - cursor += tempSize + 1; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - strcpy(cursor, lanOwner); - cursor += tempSize + 1; - - tempSize = strlen(accessOption); // Access option GRANT or REVOKE - strcpy(cursor, accessOption); - cursor += tempSize + 1; - - tempSize = strlen(accessGrantName); // Access grant user 1..8 chars - strcpy(cursor, accessGrantName); - cursor += tempSize + 1; - - tempSize = strlen(promiscuity); // Promiscuous or nonpromiscuous - strcpy(cursor, promiscuity); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c deleted file mode 100644 index ad2c37e..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c +++ /dev/null @@ -1,87 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Access_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanAccessQueryOutput - -/** - * Virtual_Network_LAN_Access_Query SMAPI interface - */ -int smVirtual_Network_LAN_Access_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * lanName, char * lanOwner, - vmApiVirtualNetworkLanAccessQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Access_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + strlen(lanName) - + 1 + strlen(lanOwner) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - strcpy(cursor, lanName); - cursor += tempSize + 1; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - strcpy(cursor, lanOwner); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanCreate.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanCreate.c deleted file mode 100644 index 0bed79c..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanCreate.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanCreateOutput - -/** - * Virtual_Network_Lan_Create SMAPI interface - */ -int smVirtual_Network_LAN_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, char lanType, - char transportType, vmApiVirtualNetworkLanCreateOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - lanName) + 4 + strlen(lanOwner) + 1 /* lanType */+ 1 /* transportType */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - *cursor = lanType; // Lan type byte - cursor++; - - *cursor = transportType; // Transport type byte - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanDelete.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanDelete.c deleted file mode 100644 index d596102..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanDelete.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanDeleteOutput - -/** - * Virtual_Network_Lan_Delete SMAPI interface - */ -int smVirtual_Network_LAN_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanDeleteOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; - -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanQuery.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanQuery.c deleted file mode 100644 index 5e804a5..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkLanQuery.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanQueryOutput - -/** - * Virtual_Network_Lan_Query SMAPI interface - */ -int smVirtual_Network_LAN_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryLan.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryLan.c deleted file mode 100644 index a41810e..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryLan.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Query_LAN_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkQueryLanOutput - -/** - * Virtual_Network_Query_LAN SMAPI interface - */ -int smVirtual_Network_Query_LAN(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryLanOutput ** outData) { - const char * const functionName = "Virtual_Network_Query_LAN"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryOsa.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryOsa.c deleted file mode 100644 index 1119786..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkQueryOsa.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Query_OSA_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkQueryOsaOutput - -/** - * Virtual_Network_Query_OSA SMAPI interface - */ -int smVirtual_Network_Query_OSA(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryOsaOutput ** outData) { - const char * const functionName = "Virtual_Network_Query_OSA"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchCreate.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchCreate.c deleted file mode 100644 index 60e536d..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchCreate.c +++ /dev/null @@ -1,216 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchCreateOutput - -/** - * Virtual_Network_Vswitch_Create SMAPI interface - */ -int smVirtual_Network_Vswitch_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char * realDeviceAddress, char * portName, - char * controllerName, char connectionValue, int queueMemoryLimit, - char routingValue, char transportType, int vlanId, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - int nativeVlanId, vmApiVirtualNetworkVswitchCreateOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName) + 4 + strlen(realDeviceAddress) + 4 + strlen(portName) - + 4 + strlen(controllerName) + 1 /* connectionValue */+ 4 - /* queueMemoryLimit */+ 1 /* routingValue */+ 1 /* transportType */+ 4 - /* vlanId */+ 1 /* porttype */+ 1 /* updateSystemConfigIndicator */+ 4 - + strlen(systemConfigName) + 4 + strlen(systemConfigType) + 4 - + strlen(parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword) + 1 - /* gvrpValue */+ 4 /* nativeVlanId */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - tempSize = strlen(realDeviceAddress); // Real device address 0..14 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, realDeviceAddress, tempSize); - cursor += tempSize; - } - - tempSize = strlen(portName); // Port name 0..26 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, portName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(controllerName); // Controller name 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, controllerName, tempSize); - cursor += tempSize; - } - - *cursor = connectionValue; // Connection value byte - cursor++; - - PUT_INT(queueMemoryLimit, cursor); // Queue memory limit - - *cursor = routingValue; // Routing value byte - cursor++; - - *cursor = transportType; // Transport type byte - cursor++; - - PUT_INT(vlanId, cursor); // Vlan id - - *cursor = portType; // Port type byte - cursor++; - - *cursor = updateSystemConfigIndicator; // Update system config indicator byte - cursor++; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - } - - *cursor = gvrpValue; - cursor++; - - PUT_INT(nativeVlanId, cursor); // Native vlan id - - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchDelete.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchDelete.c deleted file mode 100644 index cf72eec..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchDelete.c +++ /dev/null @@ -1,167 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchDeleteOutput - -/** - * Virtual_Network_Vswitch_Delete SMAPI interface - */ -int smVirtual_Network_Vswitch_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char updateSystemConfigIndicator, - char * systemConfigName, char * systemConfigType, char * parmDiskOwner, - char * parmDiskNumber, char * parmDiskPassword, - char * altSystemConfigName, char * altSystemConfigType, - char * altParmDiskOwner, char * altParmDiskNumber, - char * altParmDiskPassword, - vmApiVirtualNetworkVswitchDeleteOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName) + 1 /* updateSystemConfigIndicator */+ 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - *cursor = updateSystemConfigIndicator; // Update system config indicator byte - cursor++; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchQuery.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchQuery.c deleted file mode 100644 index fd66593..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchQuery.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchQueryOutput - -/** - * Virtual_Network_Vswitch_Query SMAPI interface - */ -int smVirtual_Network_Vswitch_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, vmApiVirtualNetworkVswitchQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchSet.c b/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchSet.c deleted file mode 100644 index ab1839c..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVirtualNetworkVswitchSet.c +++ /dev/null @@ -1,237 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Set_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchSetOutput - -/** - * Virtual_Network_Vswitch_Set SMAPI interface - */ -int smVirtual_Network_Vswitch_Set(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * switchName, char * grantUserid, - char * userVlanId, char * revokeUserid, char * realDeviceAddress, - char * portName, char * controllerName, char connectionValue, - int queueMemoryLimit, char routingValue, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - char * macId, vmApiVirtualNetworkVswitchSetOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Set"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName) + 4 + strlen(grantUserid) + 4 + strlen(userVlanId) + 4 - + strlen(revokeUserid) + 4 + strlen(realDeviceAddress) + 4 - + strlen(portName) + 4 + strlen(controllerName) + 1 - /* connectionValue */+ 4 /* queueMemoryLimit */+ 1 /* routingValue */+ 1 - /* porttype */+ 1 /* updateSystemConfigIndicator */+ 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword) + 1 - /* gvrpValue */+ 4 /* macId */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - //Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - tempSize = strlen(grantUserid); // Grant userid 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, grantUserid, tempSize); - cursor += tempSize; - } - - tempSize = strlen(userVlanId); // User vlan id 0..19 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userVlanId, tempSize); - cursor += tempSize; - } - - tempSize = strlen(revokeUserid); // Revoke userid 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, revokeUserid, tempSize); - cursor += tempSize; - } - - tempSize = strlen(realDeviceAddress); // Real device address 0..14 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, realDeviceAddress, tempSize); - cursor += tempSize; - } - - tempSize = strlen(portName); // Port name 0..26 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, portName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(controllerName); // Controller name 0..71 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, controllerName, tempSize); - cursor += tempSize; - } - - *cursor = connectionValue; // Connection value byte - cursor++; - - PUT_INT(queueMemoryLimit, cursor); // Queue memory limit - - *cursor = routingValue; // Routing value byte - cursor++; - - *cursor = portType; // Port type byte - cursor++; - - *cursor = updateSystemConfigIndicator; // Update system config indicator byte - cursor++; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - } - - *cursor = gvrpValue; - cursor++; - - tempSize = strlen(macId); // MAC id 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, macId, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationQuery.c b/zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationQuery.c deleted file mode 100644 index c7bc7d6..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationQuery.c +++ /dev/null @@ -1,95 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVMRM.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME VMRM_Configuration_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVmrmConfigurationQueryOutput - -/** - * VMRM_Configuration_Query SMAPI interface - */ -int smVMRM_Configuration_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - vmApiVmrmConfigurationQueryOutput ** outData) { - const char * const functionName = "VMRM_Configuration_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor;// Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - configurationFileName) + 4 + strlen(configurationFileType) + 4 - + strlen(configurationDirName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileName); // Configuration file name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileName, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileType); // Configuration file type 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileType, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationDirName); // Configuration SFS directory name 1..153 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationDirName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationUpdate.c b/zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationUpdate.c deleted file mode 100644 index dd6517b..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVmrmConfigurationUpdate.c +++ /dev/null @@ -1,104 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVMRM.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME VMRM_Configuration_Update_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVmrmConfigurationUpdateOutput - -/** - * VMRM_Configuration_Update SMAPI interface - */ -int smVMRM_Configuration_Update(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - char syncheckOnly, int updateFileLength, char * updateFile, - vmApiVmrmConfigurationUpdateOutput ** outData) { - const char * const functionName = "VMRM_Configuration_Update"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - configurationFileName) + 4 + strlen(configurationFileType) + 4 - + strlen(configurationDirName) + 1 + 4 + updateFileLength; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileName); // Configuration file name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileName, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileType); // Configuration file type 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileType, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationDirName); // Configuration SFS directory name 1..153 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationDirName, tempSize); - cursor += tempSize; - - *cursor = syncheckOnly; - cursor++; - - tempSize = updateFileLength; // Update file 1..* - PUT_INT(tempSize, cursor); - memcpy(cursor, updateFile, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/vmapiVmrmMeasurementQuery.c b/zhcp/BUILD/resource_access/src/vmapiVmrmMeasurementQuery.c deleted file mode 100644 index fb6787b..0000000 --- a/zhcp/BUILD/resource_access/src/vmapiVmrmMeasurementQuery.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVMRM.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME VMRM_Measurement_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVmrmMeasurementQueryOutput - -/** - * VMRM_Measurement_Query SMAPI interface - */ -int smVMRM_Measurement_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiVmrmMeasurementQueryOutput ** outData) { - const char * const functionName = "VMRM_Measurement_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - //Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, - TO_STRING(PARSER_TABLE_NAME), - (char * *) outData); - return rc; -} diff --git a/zhcp/BUILD/resource_access/src/wrapperutils.c b/zhcp/BUILD/resource_access/src/wrapperutils.c deleted file mode 100644 index b1793b0..0000000 --- a/zhcp/BUILD/resource_access/src/wrapperutils.c +++ /dev/null @@ -1,102 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * @see wrapperutils.h: releaseContext - */ -void releaseContext(VmApiInternalContext* context) { - smMemoryGroupFreeAll(context); - smMemoryGroupTerminate(context); -} - -/** - * @see wrapperutils.h getContext - */ -void initializeContext(VmApiInternalContext* context) { - - extern struct _smTrace externSmapiTraceFlags; - - smMemoryGroupContext memContext; - - memset(context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - - context->smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context->memContext = &memContext; - - smMemoryGroupInitialize(context); -} - -/** - * Check if image name is between 1 and 8 characters - */ -int isImageNameInvalid(char* imageName) { - - if (strlen(imageName) < 1 || strlen(imageName) > 8) { - printf(" User ID must be between 1 and 8 characters in length.\n" - "Operation Failed\n"); - return 1; - } else { - return 0; - } -} - -/** - * Check if device addresses are specified as 4-digit hexadecimal numbers - */ -int isDevNumberInvalid(char* devNumber) { - - if ((strlen(devNumber) == 4) && ((devNumber[0] > 47 && devNumber[0] < 58) - || (devNumber[0] > 65 && devNumber[0] < 71) || (devNumber[0] > 97 - && devNumber[0] < 103)) - && ((devNumber[1] > 47 && devNumber[1] < 58) || (devNumber[1] > 65 - && devNumber[1] < 71) || (devNumber[1] > 97 && devNumber[1] - < 103)) && ((devNumber[2] > 47 && devNumber[2] < 58) - || (devNumber[2] > 65 && devNumber[2] < 71) || (devNumber[2] > 97 - && devNumber[2] < 103)) - && ((devNumber[3] > 47 && devNumber[3] < 58) || (devNumber[3] > 65 - && devNumber[3] < 71) || (devNumber[3] > 97 && devNumber[3] - < 103))) { - return 0; - } else { - printf( - " Device addresses must be specified as 4-digit hexadecimal numbers.\n" - "Operation Failed\n"); - return 1; - } -} - -/** - * Trim a specified string - */ -void trim(char * s) { - // Length of specified string - int len = strlen(s); - int end = len - 1; - int start = 0; - int i = 0; - - // Find non-blank space from left - while ((start < len) && (s[start] <= ' ')) { - start++; - } - - // Find non-blank space from right - while ((start < end) && (s[end] <= ' ')) { - end--; - } - - if (start > end) { - memset(s, '\0', len); - return; - } - - for (i = 0; (i + start) <= end; i++) { - s[i] = s[start + i]; - } - - // Trim string - memset((s + i), '\0', len - i); -} diff --git a/zhcp/RPMS/s390x/zhcp-1-1.s390x.rpm b/zhcp/RPMS/s390x/zhcp-1-1.s390x.rpm deleted file mode 100644 index da10f45d743297308dab936acaaf60b3f2c50e85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365859 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

X`_U7Vy7|sB?pxx9+@AF8$3&BuUFD;R$Ci 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

9y&y3+WBzWB8#?Z!)eeU-3=xz4_th4dwTf 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 F1pt;Zv9ACC diff --git a/zhcp/SOURCES/zhcp-build.tar.gz b/zhcp/SOURCES/zhcp-build.tar.gz deleted file mode 100644 index be24e0e6f4a9c109cf487bc57759115fdbfcca97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82897 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 diff --git a/zhcp/SPECS/zhcp.spec b/zhcp/SPECS/zhcp.spec deleted file mode 100644 index ea9acc9..0000000 --- a/zhcp/SPECS/zhcp.spec +++ /dev/null @@ -1,30 +0,0 @@ -%define name zhcp - -Summary: zhcp -Name: %{name} -Version: 1 -Release: 1 -Source: zhcp-build.tar.gz -Vendor: IBM -License: Licensed materials - Property of IBM -Group: System/tools -Prefix: %{_prefix} - -%description - -%prep -cd /opt/zhcpbuild/SOURCES/ -tar -zxvf zhcp-build.tar.gz -C /opt/zhcpbuild/BUILD/ --strip 1 - -%build -make - -%install -make install -make post -make clean - -%files -%defattr(-,root,root,755) -/opt/zhcp/* - diff --git a/zhcp/SRPMS/zhcp-1-1.src.rpm b/zhcp/SRPMS/zhcp-1-1.src.rpm deleted file mode 100644 index c4bdfbe68c77e7c9af4aa647695f22d2dc58f411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84589 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 AUjP6A diff --git a/zhcp/buildrpm.sh b/zhcp/buildrpm.sh deleted file mode 100644 index 15f64c1..0000000 --- a/zhcp/buildrpm.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - - -#-------------------------------------------------------------------------- -# Get oriented -#-------------------------------------------------------------------------- -BUILD=$PWD - -#-------------------------------------------------------------------------- -# Prepare environment -#-------------------------------------------------------------------------- -rm -rf $BUILD/variable 2>/dev/null -mkdir -p $BUILD/variable 2>/dev/null - -echo "%_topdir $BUILD" > $BUILD/variable/.rpmmacros -cp $BUILD/variable/.rpmmacros $HOME 2>/dev/null - -#--------------------------------------------------------------------------- -# Create tar file of zVM MAP agent code -#--------------------------------------------------------------------------- -cd $BUILD/ 2>/dev/null - -rm -rf $BUILD/BUILD 2>/dev/null -rm -rf $BUILD/RPMS 2>/dev/null -rm -rf $BUILD/SOURCES 2>/dev/null -rm -rf $BUILD/SPECS 2>/dev/null -rm -rf $BUILD/SRPMS 2>/dev/null - -mkdir -p $BUILD/BUILD 2>/dev/null -mkdir -p $BUILD/RPMS 2>/dev/null -mkdir -p $BUILD/SOURCES 2>/dev/null -mkdir -p $BUILD/SPECS 2>/dev/null -mkdir -p $BUILD/SRPMS 2>/dev/null - -#--------------------------------------------------------------------------- -# Copy source and build files into input directories -#--------------------------------------------------------------------------- -tar -zcvf $BUILD/zhcp-build.tar.gz zhcp-build 2>/dev/null -mv $BUILD/zhcp-build.tar.gz $BUILD/SOURCES -cp $BUILD/zhcp.spec $BUILD/SPECS 2>/dev/null - -#--------------------------------------------------------------------------- -# Build the RPM -#--------------------------------------------------------------------------- -rpmbuild -ba -v $BUILD/SPECS/zhcp.spec > $BUILD/rpmbuild.log 2>&1 - diff --git a/zhcp/variable/.rpmmacros b/zhcp/variable/.rpmmacros deleted file mode 100644 index 453e7dd..0000000 --- a/zhcp/variable/.rpmmacros +++ /dev/null @@ -1 +0,0 @@ -%_topdir /opt/zhcpbuild diff --git a/zhcp/zhcp-build/Makefile b/zhcp/zhcp-build/Makefile deleted file mode 100644 index f4e46d2..0000000 --- a/zhcp/zhcp-build/Makefile +++ /dev/null @@ -1,801 +0,0 @@ -DEBUG = -g -CFLAGS = -fPIC -LIB_DIR = $(RPM_BUILD_ROOT)/opt/zhcp/lib -BIN_DIR = $(RPM_BUILD_ROOT)/opt/zhcp/bin -LD_DIR = $(RPM_BUILD_ROOT)/etc/ld.so.conf.d -RA_SRC_DIR = resource_access/src/ -RA_INCLUDE_DIR = resource_access/include/ -VMAPILIB = libvmapi.so - -#----------------------------------------------------------------------- -# Headers -#----------------------------------------------------------------------- -COMMON_HEADERS = $(RA_INCLUDE_DIR)smPublic.h $(RA_INCLUDE_DIR)smTraceAndError.h $(RA_INCLUDE_DIR)smapiTableParser.h $(RA_INCLUDE_DIR)smSocket.h - -#----------------------------------------------------------------------- -# Objects for library -#----------------------------------------------------------------------- -OBJECTS = smSocket.o smMemoryGroup.o smapiUtilities.o \ - smapiTableParser.o \ - vmapiAsynchronousNotificationDisableDm.o \ - vmapiAsynchronousNotificationEnableDm.o \ - vmapiAsynchronousNotificationQueryDm.o \ - vmapiAuthorizationListAdd.o \ - vmapiAuthorizationListQuery.o \ - vmapiAuthorizationListRemove.o \ - vmapiCheckAuthentication.o \ - vmapiDirectoryManagerLocalTagDefineDm.o \ - vmapiDirectoryManagerLocalTagDeleteDm.o \ - vmapiDirectoryManagerLocalTagQueryDm.o \ - vmapiDirectoryManagerLocalTagSetDm.o \ - vmapiDirectoryManagerSearchDm.o \ - vmapiDirectoryManagerTaskCancelDm.o \ - vmapiImageActivate.o \ - vmapiImageActiveConfigurationQuery.o \ - vmapiImageCpuDefine.o \ - vmapiImageCpuDefineDm.o \ - vmapiImageCpuDelete.o \ - vmapiImageCpuDeleteDm.o \ - vmapiImageCpuQuery.o \ - vmapiImageCpuQueryDm.o \ - vmapiImageCpuSetMaximumDm.o \ - vmapiImageCreateDm.o \ - vmapiImageDeactivate.o \ - vmapiImageDeleteDm.o \ - vmapiImageDeviceDedicate.o \ - vmapiImageDeviceDedicateDm.o \ - vmapiImageDeviceReset.o \ - vmapiImageDeviceUndedicate.o \ - vmapiImageDeviceUndedicateDm.o \ - vmapiImageDiskCopy.o \ - vmapiImageDiskCopyDm.o \ - vmapiImageDiskCreate.o \ - vmapiImageDiskCreateDm.o \ - vmapiImageDiskDelete.o \ - vmapiImageDiskDeleteDm.o \ - vmapiImageDiskShare.o \ - vmapiImageDiskShareDm.o \ - vmapiImageDiskUnshare.o \ - vmapiImageDiskUnshareDm.o \ - vmapiImageIplDeleteDm.o \ - vmapiImageIplDeviceQuery.o \ - vmapiImageIplQueryDm.o \ - vmapiImageIplSetDm.o \ - vmapiImageLockDm.o \ - vmapiImageNameQueryDm.o \ - vmapiImagePasswordSetDm.o \ - vmapiImageQueryActivateTime.o \ - vmapiImageQueryDm.o \ - vmapiImageRecycle.o \ - vmapiImageReplaceDm.o \ - vmapiImageScsiCharacteristicsDefineDm.o \ - vmapiImageScsiCharacteristicsQueryDm.o \ - vmapiImageStatusQuery.o \ - vmapiImageUnlockDm.o \ - vmapiImageVolumeAdd.o \ - vmapiImageVolumeDelete.o \ - vmapiImageVolumeSpaceDefineDm.o \ - vmapiImageVolumeSpaceQueryDm.o \ - vmapiImageVolumeSpaceRemoveDm.o \ - vmapiNameListAdd.o \ - vmapiNameListDestroy.o \ - vmapiNameListQuery.o \ - vmapiNameListRemove.o \ - vmapiProfileCreateDm.o \ - vmapiProfileDeleteDm.o \ - vmapiProfileQueryDm.o \ - vmapiProfileReplaceDm.o \ - vmapiPrototypeCreateDm.o \ - vmapiPrototypeDeleteDm.o \ - vmapiPrototypeNameQueryDm.o \ - vmapiPrototypeQueryDm.o \ - vmapiPrototypeReplaceDm.o \ - vmapiQueryApiFunctionalLevel.o \ - vmapiQueryAsynchronousOperationDm.o \ - vmapiQueryDirectoryManagerLevelDm.o \ - vmapiSharedMemoryAccessAddDm.o \ - vmapiSharedMemoryAccessQueryDm.o \ - vmapiSharedMemoryAccessRemoveDm.o \ - vmapiSharedMemoryCreate.o \ - vmapiSharedMemoryDelete.o \ - vmapiSharedMemoryQuery.o \ - vmapiSharedMemoryReplace.o \ - vmapiStaticImageChangesActivateDm.o \ - vmapiStaticImageChangesDeactivateDm.o \ - vmapiStaticImageChangesImmediateDm.o \ - vmapiSystemInfoQuery.o \ - vmapiSystemIoQuery.o \ - vmapiVirtualChannelConnectionCreate.o \ - vmapiVirtualChannelConnectionCreateDm.o \ - vmapiVirtualChannelConnectionDelete.o \ - vmapiVirtualChannelConnectionDeleteDm.o \ - vmapiVirtualNetworkAdapterConnectLan.o \ - vmapiVirtualNetworkAdapterConnectLanDm.o \ - vmapiVirtualNetworkAdapterConnectVswitch.o \ - vmapiVirtualNetworkAdapterConnectVswitchDm.o \ - vmapiVirtualNetworkAdapterCreate.o \ - vmapiVirtualNetworkAdapterCreateDm.o \ - vmapiVirtualNetworkAdapterDelete.o \ - vmapiVirtualNetworkAdapterDeleteDm.o \ - vmapiVirtualNetworkAdapterDisconnect.o \ - vmapiVirtualNetworkAdapterDisconnectDm.o \ - vmapiVirtualNetworkAdapterQuery.o \ - vmapiVirtualNetworkLanAccess.o \ - vmapiVirtualNetworkLanAccessQuery.o \ - vmapiVirtualNetworkLanCreate.o \ - vmapiVirtualNetworkLanDelete.o \ - vmapiVirtualNetworkLanQuery.o \ - vmapiVirtualNetworkQueryOsa.o \ - vmapiVirtualNetworkVswitchCreate.o \ - vmapiVirtualNetworkVswitchDelete.o \ - vmapiVirtualNetworkVswitchQuery.o \ - vmapiVirtualNetworkVswitchSet.o \ - vmapiVmrmConfigurationQuery.o \ - vmapiVmrmConfigurationUpdate.o \ - vmapiVmrmMeasurementQuery.o -.PHONY: all install post clean - -#----------------------------------------------------------------------- -# All -#----------------------------------------------------------------------- -all: $(VMAPILIB) \ - wrapperutils.o \ - add3390 \ - add3390active \ - add9336 \ - addvdisk \ - addprocessor \ - addnic \ - connectnic2guestlan \ - connectnic2vswitch \ - createvs \ - deleteipl \ - deletevs \ - dedicatedevice \ - disconnectnic \ - getuserentrynames \ - getuserentry \ - getipl \ - getuserprofile \ - getdiskpool \ - getdiskpoolnames \ - queryvolumes \ - removemdisk \ - removenic \ - removeprocessor \ - replacevs \ - setipl \ - setpassword \ - startvs \ - stopvs \ - undedicatedevice - -#----------------------------------------------------------------------- -# Resource access .o files -#----------------------------------------------------------------------- -smSocket.o : $(RA_SRC_DIR)smSocket.c $(RA_INCLUDE_DIR)smSocket.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smSocket.c - -smMemoryGroup.o : $(RA_SRC_DIR)smMemoryGroup.c $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smMemoryGroup.c - -smapiUtilities.o : $(RA_SRC_DIR)smapiUtilities.c $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smapiUtilities.c - -smapiTableParser.o : $(RA_SRC_DIR)smapiTableParser.c $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)smapiTableParser.c - -vmapiAsynchronousNotificationDisableDm.o : $(RA_SRC_DIR)vmapiAsynchronousNotificationDisableDm.c $(RA_INCLUDE_DIR)vmapiAsynchronous.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAsynchronousNotificationDisableDm.c - -vmapiAsynchronousNotificationEnableDm.o : $(RA_SRC_DIR)vmapiAsynchronousNotificationEnableDm.c $(RA_INCLUDE_DIR)vmapiAsynchronous.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAsynchronousNotificationEnableDm.c - -vmapiAsynchronousNotificationQueryDm.o : $(RA_SRC_DIR)vmapiAsynchronousNotificationQueryDm.c $(RA_INCLUDE_DIR)vmapiAsynchronous.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAsynchronousNotificationQueryDm.c - -vmapiAuthorizationListAdd.o : $(RA_SRC_DIR)vmapiAuthorizationListAdd.c $(RA_INCLUDE_DIR)vmapiAuthorization.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAuthorizationListAdd.c - -vmapiAuthorizationListQuery.o : $(RA_SRC_DIR)vmapiAuthorizationListQuery.c $(RA_INCLUDE_DIR)vmapiAuthorization.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAuthorizationListQuery.c - -vmapiAuthorizationListRemove.o : $(RA_SRC_DIR)vmapiAuthorizationListRemove.c $(RA_INCLUDE_DIR)vmapiAuthorization.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiAuthorizationListRemove.c - -vmapiCheckAuthentication.o : $(RA_SRC_DIR)vmapiCheckAuthentication.c $(RA_INCLUDE_DIR)vmapiCheckAuthentication.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiCheckAuthentication.c - -vmapiDirectoryManagerLocalTagDefineDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDefineDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDefineDm.c - -vmapiDirectoryManagerLocalTagDeleteDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDeleteDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagDeleteDm.c - -vmapiDirectoryManagerLocalTagQueryDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagQueryDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagQueryDm.c - -vmapiDirectoryManagerLocalTagSetDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagSetDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerLocalTagSetDm.c - -vmapiDirectoryManagerSearchDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerSearchDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerSearchDm.c - -vmapiDirectoryManagerTaskCancelDm.o : $(RA_SRC_DIR)vmapiDirectoryManagerTaskCancelDm.c $(RA_INCLUDE_DIR)vmapiDirectoryManager.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiDirectoryManagerTaskCancelDm.c - -vmapiImageActivate.o : $(RA_SRC_DIR)vmapiImageActivate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageActivate.c - -vmapiImageActiveConfigurationQuery.o : $(RA_SRC_DIR)vmapiImageActiveConfigurationQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageActiveConfigurationQuery.c - -vmapiImageCpuDefine.o : $(RA_SRC_DIR)vmapiImageCpuDefine.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDefine.c - -vmapiImageCpuDefineDm.o : $(RA_SRC_DIR)vmapiImageCpuDefineDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDefineDm.c - -vmapiImageCpuDelete.o : $(RA_SRC_DIR)vmapiImageCpuDelete.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDelete.c - -vmapiImageCpuDeleteDm.o : $(RA_SRC_DIR)vmapiImageCpuDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuDeleteDm.c - -vmapiImageCpuQuery.o : $(RA_SRC_DIR)vmapiImageCpuQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuQuery.c - -vmapiImageCpuQueryDm.o : $(RA_SRC_DIR)vmapiImageCpuQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuQueryDm.c - -vmapiImageCpuSetMaximumDm.o : $(RA_SRC_DIR)vmapiImageCpuSetMaximumDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCpuSetMaximumDm.c - -vmapiImageCreateDm.o : $(RA_SRC_DIR)vmapiImageCreateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageCreateDm.c - -vmapiImageDeactivate.o : $(RA_SRC_DIR)vmapiImageDeactivate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeactivate.c - -vmapiImageDeleteDm.o : $(RA_SRC_DIR)vmapiImageDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeleteDm.c - -vmapiImageDeviceDedicate.o : $(RA_SRC_DIR)vmapiImageDeviceDedicate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceDedicate.c - -vmapiImageDeviceDedicateDm.o : $(RA_SRC_DIR)vmapiImageDeviceDedicateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceDedicateDm.c - -vmapiImageDeviceReset.o : $(RA_SRC_DIR)vmapiImageDeviceReset.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceReset.c - -vmapiImageDeviceUndedicate.o : $(RA_SRC_DIR)vmapiImageDeviceUndedicate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceUndedicate.c - -vmapiImageDeviceUndedicateDm.o : $(RA_SRC_DIR)vmapiImageDeviceUndedicateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDeviceUndedicateDm.c - -vmapiImageDiskCopy.o : $(RA_SRC_DIR)vmapiImageDiskCopy.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCopy.c - -vmapiImageDiskCopyDm.o : $(RA_SRC_DIR)vmapiImageDiskCopyDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCopyDm.c - -vmapiImageDiskCreate.o : $(RA_SRC_DIR)vmapiImageDiskCreate.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCreate.c - -vmapiImageDiskCreateDm.o : $(RA_SRC_DIR)vmapiImageDiskCreateDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskCreateDm.c - -vmapiImageDiskDelete.o : $(RA_SRC_DIR)vmapiImageDiskDelete.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskDelete.c - -vmapiImageDiskDeleteDm.o : $(RA_SRC_DIR)vmapiImageDiskDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskDeleteDm.c - -vmapiImageDiskShare.o : $(RA_SRC_DIR)vmapiImageDiskShare.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskShare.c - -vmapiImageDiskShareDm.o : $(RA_SRC_DIR)vmapiImageDiskShareDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskShareDm.c - -vmapiImageDiskUnshare.o : $(RA_SRC_DIR)vmapiImageDiskUnshare.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskUnshare.c - -vmapiImageDiskUnshareDm.o : $(RA_SRC_DIR)vmapiImageDiskUnshareDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageDiskUnshareDm.c - -vmapiImageIplDeleteDm.o : $(RA_SRC_DIR)vmapiImageIplDeleteDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplDeleteDm.c - -vmapiImageIplDeviceQuery.o : $(RA_SRC_DIR)vmapiImageIplDeviceQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplDeviceQuery.c - -vmapiImageIplQueryDm.o : $(RA_SRC_DIR)vmapiImageIplQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplQueryDm.c - -vmapiImageIplSetDm.o : $(RA_SRC_DIR)vmapiImageIplSetDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageIplSetDm.c - -vmapiImageLockDm.o : $(RA_SRC_DIR)vmapiImageLockDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageLockDm.c - -vmapiImageNameQueryDm.o : $(RA_SRC_DIR)vmapiImageNameQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageNameQueryDm.c - -vmapiImagePasswordSetDm.o : $(RA_SRC_DIR)vmapiImagePasswordSetDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImagePasswordSetDm.c - -vmapiImageQueryActivateTime.o : $(RA_SRC_DIR)vmapiImageQueryActivateTime.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageQueryActivateTime.c - -vmapiImageQueryDm.o : $(RA_SRC_DIR)vmapiImageQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageQueryDm.c - -vmapiImageRecycle.o : $(RA_SRC_DIR)vmapiImageRecycle.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageRecycle.c - -vmapiImageReplaceDm.o : $(RA_SRC_DIR)vmapiImageReplaceDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageReplaceDm.c - -vmapiImageScsiCharacteristicsDefineDm.o : $(RA_SRC_DIR)vmapiImageScsiCharacteristicsDefineDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageScsiCharacteristicsDefineDm.c - -vmapiImageScsiCharacteristicsQueryDm.o : $(RA_SRC_DIR)vmapiImageScsiCharacteristicsQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageScsiCharacteristicsQueryDm.c - -vmapiImageStatusQuery.o : $(RA_SRC_DIR)vmapiImageStatusQuery.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageStatusQuery.c - -vmapiImageUnlockDm.o : $(RA_SRC_DIR)vmapiImageUnlockDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageUnlockDm.c - -vmapiImageVolumeAdd.o : $(RA_SRC_DIR)vmapiImageVolumeAdd.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeAdd.c - -vmapiImageVolumeDelete.o : $(RA_SRC_DIR)vmapiImageVolumeDelete.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeDelete.c - -vmapiImageVolumeSpaceDefineDm.o : $(RA_SRC_DIR)vmapiImageVolumeSpaceDefineDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeSpaceDefineDm.c - -vmapiImageVolumeSpaceQueryDm.o : $(RA_SRC_DIR)vmapiImageVolumeSpaceQueryDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeSpaceQueryDm.c - -vmapiImageVolumeSpaceRemoveDm.o : $(RA_SRC_DIR)vmapiImageVolumeSpaceRemoveDm.c $(RA_INCLUDE_DIR)vmapiImage.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiImageVolumeSpaceRemoveDm.c - -vmapiNameListAdd.o : $(RA_SRC_DIR)vmapiNameListAdd.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListAdd.c - -vmapiNameListDestroy.o : $(RA_SRC_DIR)vmapiNameListDestroy.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListDestroy.c - -vmapiNameListQuery.o : $(RA_SRC_DIR)vmapiNameListQuery.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListQuery.c - -vmapiNameListRemove.o : $(RA_SRC_DIR)vmapiNameListRemove.c $(RA_INCLUDE_DIR)vmapiName.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiNameListRemove.c - -vmapiProfileCreateDm.o : $(RA_SRC_DIR)vmapiProfileCreateDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileCreateDm.c - -vmapiProfileDeleteDm.o : $(RA_SRC_DIR)vmapiProfileDeleteDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileDeleteDm.c - -vmapiProfileQueryDm.o : $(RA_SRC_DIR)vmapiProfileQueryDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileQueryDm.c - -vmapiProfileReplaceDm.o : $(RA_SRC_DIR)vmapiProfileReplaceDm.c $(RA_INCLUDE_DIR)vmapiProfile.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiProfileReplaceDm.c - -vmapiPrototypeCreateDm.o : $(RA_SRC_DIR)vmapiPrototypeCreateDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeCreateDm.c - -vmapiPrototypeDeleteDm.o : $(RA_SRC_DIR)vmapiPrototypeDeleteDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeDeleteDm.c - -vmapiPrototypeNameQueryDm.o : $(RA_SRC_DIR)vmapiPrototypeNameQueryDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeNameQueryDm.c - -vmapiPrototypeQueryDm.o : $(RA_SRC_DIR)vmapiPrototypeQueryDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeQueryDm.c - -vmapiPrototypeReplaceDm.o : $(RA_SRC_DIR)vmapiPrototypeReplaceDm.c $(RA_INCLUDE_DIR)vmapiPrototype.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiPrototypeReplaceDm.c - -vmapiQueryApiFunctionalLevel.o : $(RA_SRC_DIR)vmapiQueryApiFunctionalLevel.c $(RA_INCLUDE_DIR)vmapiQuery.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiQueryApiFunctionalLevel.c - -vmapiQueryAsynchronousOperationDm.o : $(RA_SRC_DIR)vmapiQueryAsynchronousOperationDm.c $(RA_INCLUDE_DIR)vmapiQuery.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiQueryAsynchronousOperationDm.c - -vmapiQueryDirectoryManagerLevelDm.o : $(RA_SRC_DIR)vmapiQueryDirectoryManagerLevelDm.c $(RA_INCLUDE_DIR)vmapiQuery.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiQueryDirectoryManagerLevelDm.c - -vmapiSharedMemoryAccessAddDm.o : $(RA_SRC_DIR)vmapiSharedMemoryAccessAddDm.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryAccessAddDm.c - -vmapiSharedMemoryAccessQueryDm.o : $(RA_SRC_DIR)vmapiSharedMemoryAccessQueryDm.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryAccessQueryDm.c - -vmapiSharedMemoryAccessRemoveDm.o : $(RA_SRC_DIR)vmapiSharedMemoryAccessRemoveDm.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryAccessRemoveDm.c - -vmapiSharedMemoryCreate.o : $(RA_SRC_DIR)vmapiSharedMemoryCreate.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryCreate.c - -vmapiSharedMemoryDelete.o : $(RA_SRC_DIR)vmapiSharedMemoryDelete.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryDelete.c - -vmapiSharedMemoryQuery.o : $(RA_SRC_DIR)vmapiSharedMemoryQuery.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryQuery.c - -vmapiSharedMemoryReplace.o : $(RA_SRC_DIR)vmapiSharedMemoryReplace.c $(RA_INCLUDE_DIR)vmapiShared.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSharedMemoryReplace.c - -vmapiStaticImageChangesActivateDm.o : $(RA_SRC_DIR)vmapiStaticImageChangesActivateDm.c $(RA_INCLUDE_DIR)vmapiStatic.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiStaticImageChangesActivateDm.c - -vmapiStaticImageChangesDeactivateDm.o : $(RA_SRC_DIR)vmapiStaticImageChangesDeactivateDm.c $(RA_INCLUDE_DIR)vmapiStatic.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiStaticImageChangesDeactivateDm.c - -vmapiStaticImageChangesImmediateDm.o : $(RA_SRC_DIR)vmapiStaticImageChangesImmediateDm.c $(RA_INCLUDE_DIR)vmapiStatic.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiStaticImageChangesImmediateDm.c - -vmapiSystemInfoQuery.o : $(RA_SRC_DIR)vmapiSystemInfoQuery.c $(RA_INCLUDE_DIR)vmapiSystem.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSystemInfoQuery.c - -vmapiSystemIoQuery.o : $(RA_SRC_DIR)vmapiSystemIoQuery.c $(RA_INCLUDE_DIR)vmapiSystem.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiSystemIoQuery.c - -vmapiVirtualChannelConnectionCreate.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreate.c - -vmapiVirtualChannelConnectionCreateDm.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreateDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionCreateDm.c - -vmapiVirtualChannelConnectionDelete.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionDelete.c - -vmapiVirtualChannelConnectionDeleteDm.o : $(RA_SRC_DIR)vmapiVirtualChannelConnectionDeleteDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualChannelConnectionDeleteDm.c - -vmapiVirtualNetworkAdapterConnectLan.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLan.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLan.c - -vmapiVirtualNetworkAdapterConnectLanDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLanDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectLanDm.c - -vmapiVirtualNetworkAdapterConnectVswitch.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitch.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitch.c - -vmapiVirtualNetworkAdapterConnectVswitchDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitchDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterConnectVswitchDm.c - -vmapiVirtualNetworkAdapterCreate.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreate.c - -vmapiVirtualNetworkAdapterCreateDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreateDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterCreateDm.c - -vmapiVirtualNetworkAdapterDelete.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDelete.c - -vmapiVirtualNetworkAdapterDeleteDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDeleteDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDeleteDm.c - -vmapiVirtualNetworkAdapterDisconnect.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnect.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnect.c - -vmapiVirtualNetworkAdapterDisconnectDm.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnectDm.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterDisconnectDm.c - -vmapiVirtualNetworkAdapterQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkAdapterQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkAdapterQuery.c - -vmapiVirtualNetworkLanAccess.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanAccess.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanAccess.c - -vmapiVirtualNetworkLanAccessQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanAccessQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanAccessQuery.c - -vmapiVirtualNetworkLanCreate.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanCreate.c - -vmapiVirtualNetworkLanDelete.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanDelete.c - -vmapiVirtualNetworkLanQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkLanQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkLanQuery.c - -vmapiVirtualNetworkQueryOsa.o : $(RA_SRC_DIR)vmapiVirtualNetworkQueryOsa.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkQueryOsa.c - -vmapiVirtualNetworkVswitchCreate.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchCreate.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchCreate.c - -vmapiVirtualNetworkVswitchDelete.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchDelete.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchDelete.c - -vmapiVirtualNetworkVswitchQuery.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchQuery.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchQuery.c - -vmapiVirtualNetworkVswitchSet.o : $(RA_SRC_DIR)vmapiVirtualNetworkVswitchSet.c $(RA_INCLUDE_DIR)vmapiVirtual.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVirtualNetworkVswitchSet.c - -vmapiVmrmConfigurationQuery.o : $(RA_SRC_DIR)vmapiVmrmConfigurationQuery.c $(RA_INCLUDE_DIR)vmapiVMRM.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVmrmConfigurationQuery.c - -vmapiVmrmConfigurationUpdate.o : $(RA_SRC_DIR)vmapiVmrmConfigurationUpdate.c $(RA_INCLUDE_DIR)vmapiVMRM.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVmrmConfigurationUpdate.c - -vmapiVmrmMeasurementQuery.o : $(RA_SRC_DIR)vmapiVmrmMeasurementQuery.c $(RA_INCLUDE_DIR)vmapiVMRM.h $(COMMON_HEADERS) - gcc -c $(CFLAGS) $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)vmapiVmrmMeasurementQuery.c - -#----------------------------------------------------------------------- -# Resource access libraries -#----------------------------------------------------------------------- -$(VMAPILIB) : $(OBJECTS) - gcc -Wl,-d -shared -pthread -ldl -o $(VMAPILIB) $(OBJECTS) - -#----------------------------------------------------------------------- -# Resource access executables -#----------------------------------------------------------------------- -wrapperutils.o : $(RA_SRC_DIR)wrapperutils.c $(RA_INCLUDE_DIR)smPublic.h $(RA_INCLUDE_DIR)vmapiImage.h - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)wrapperutils.c - -add3390 : add3390.o $(VMAPILIB) - gcc -o add3390 -L./ -lvmapi wrapperutils.o add3390.o - -add3390.o : $(RA_SRC_DIR)add3390.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)add3390.c - -add3390active : add3390active.o $(VMAPILIB) - gcc -o add3390active -L./ -lvmapi wrapperutils.o add3390active.o - -add3390active.o : $(RA_SRC_DIR)add3390active.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)add3390active.c - -add9336 : add9336.o $(VMAPILIB) - gcc -o add9336 -L./ -lvmapi wrapperutils.o add9336.o - -add9336.o : $(RA_SRC_DIR)add9336.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)add9336.c - -addvdisk : addvdisk.o $(VMAPILIB) - gcc -o addvdisk -L./ -lvmapi wrapperutils.o addvdisk.o - -addvdisk.o : $(RA_SRC_DIR)addvdisk.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)addvdisk.c - -addprocessor : addprocessor.o $(VMAPILIB) - gcc -o addprocessor -L./ -lvmapi wrapperutils.o addprocessor.o - -addprocessor.o : $(RA_SRC_DIR)addprocessor.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)addprocessor.c - -addnic : addnic.o $(VMAPILIB) - gcc -o addnic -L./ -lvmapi wrapperutils.o addnic.o - -addnic.o : $(RA_SRC_DIR)addnic.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)addnic.c - -connectnic2guestlan : connectnic2guestlan.o $(VMAPILIB) - gcc -o connectnic2guestlan -L./ -lvmapi wrapperutils.o connectnic2guestlan.o - -connectnic2guestlan.o : $(RA_SRC_DIR)connectnic2guestlan.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)connectnic2guestlan.c - -connectnic2vswitch : connectnic2vswitch.o $(VMAPILIB) - gcc -o connectnic2vswitch -L./ -lvmapi wrapperutils.o connectnic2vswitch.o - -connectnic2vswitch.o : $(RA_SRC_DIR)connectnic2vswitch.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)connectnic2vswitch.c - -createvs : createvs.o $(VMAPILIB) - gcc -o createvs -L./ -lvmapi wrapperutils.o createvs.o - -createvs.o : $(RA_SRC_DIR)createvs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)createvs.c - -deletevs : deletevs.o $(VMAPILIB) - gcc -o deletevs -L./ -lvmapi wrapperutils.o deletevs.o - -deletevs.o : $(RA_SRC_DIR)deletevs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)deletevs.c - -dedicatedevice : dedicatedevice.o $(VMAPILIB) - gcc -o dedicatedevice -L./ -lvmapi wrapperutils.o dedicatedevice.o - -dedicatedevice.o : $(RA_SRC_DIR)dedicatedevice.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)dedicatedevice.c - -deleteipl : deleteipl.o $(VMAPILIB) - gcc -o deleteipl -L./ -lvmapi wrapperutils.o deleteipl.o - -deleteipl.o : $(RA_SRC_DIR)deleteipl.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)deleteipl.c - -disconnectnic : disconnectnic.o $(VMAPILIB) - gcc -o disconnectnic -L./ -lvmapi wrapperutils.o disconnectnic.o - -disconnectnic.o : $(RA_SRC_DIR)disconnectnic.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)disconnectnic.c - -getuserentrynames : getuserentrynames.o $(VMAPILIB) - gcc -o getuserentrynames -L./ -lvmapi wrapperutils.o getuserentrynames.o - -getuserentrynames.o : $(RA_SRC_DIR)getuserentrynames.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getuserentrynames.c - -getuserentry : getuserentry.o $(VMAPILIB) - gcc -o getuserentry -L./ -lvmapi wrapperutils.o getuserentry.o - -getuserentry.o : $(RA_SRC_DIR)getuserentry.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getuserentry.c - -getipl : getipl.o $(VMAPILIB) - gcc -o getipl -L./ -lvmapi wrapperutils.o getipl.o - -getipl.o : $(RA_SRC_DIR)getipl.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getipl.c - -getuserprofile : getuserprofile.o $(VMAPILIB) - gcc -o getuserprofile -L./ -lvmapi wrapperutils.o getuserprofile.o - -getuserprofile.o : $(RA_SRC_DIR)getuserprofile.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getuserprofile.c - -getdiskpool : getdiskpool.o $(VMAPILIB) - gcc -o getdiskpool -L./ -lvmapi wrapperutils.o getdiskpool.o - -getdiskpool.o : $(RA_SRC_DIR)getdiskpool.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getdiskpool.c - -getdiskpoolnames : getdiskpoolnames.o $(VMAPILIB) - gcc -o getdiskpoolnames -L./ -lvmapi wrapperutils.o getdiskpoolnames.o - -getdiskpoolnames.o : $(RA_SRC_DIR)getdiskpoolnames.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)getdiskpoolnames.c - -queryvolumes : queryvolumes.o $(VMAPILIB) - gcc -o queryvolumes -L./ -lvmapi wrapperutils.o queryvolumes.o - -queryvolumes.o : $(RA_SRC_DIR)queryvolumes.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)queryvolumes.c - -removemdisk : removemdisk.o $(VMAPILIB) - gcc -o removemdisk -L./ -lvmapi wrapperutils.o removemdisk.o - -removemdisk.o : $(RA_SRC_DIR)removemdisk.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)removemdisk.c - -removenic : removenic.o $(VMAPILIB) - gcc -o removenic -L./ -lvmapi wrapperutils.o removenic.o - -removenic.o : $(RA_SRC_DIR)removenic.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)removenic.c - -removeprocessor : removeprocessor.o $(VMAPILIB) - gcc -o removeprocessor -L./ -lvmapi wrapperutils.o removeprocessor.o - -removeprocessor.o : $(RA_SRC_DIR)removeprocessor.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)removeprocessor.c - -replacevs : replacevs.o $(VMAPILIB) - gcc -o replacevs -L./ -lvmapi wrapperutils.o replacevs.o - -replacevs.o : $(RA_SRC_DIR)replacevs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)replacevs.c - -setipl : setipl.o $(VMAPILIB) - gcc -o setipl -L./ -lvmapi wrapperutils.o setipl.o - -setipl.o : $(RA_SRC_DIR)setipl.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)setipl.c - -setpassword : setpassword.o $(VMAPILIB) - gcc -o setpassword -L./ -lvmapi wrapperutils.o setpassword.o - -setpassword.o : $(RA_SRC_DIR)setpassword.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)setpassword.c - -startvs : startvs.o $(VMAPILIB) - gcc -o startvs -L./ -lvmapi wrapperutils.o startvs.o - -startvs.o : $(RA_SRC_DIR)startvs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)startvs.c - -stopvs : stopvs.o $(VMAPILIB) - gcc -o stopvs -L./ -lvmapi wrapperutils.o stopvs.o - -stopvs.o : $(RA_SRC_DIR)stopvs.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)stopvs.c - -undedicatedevice : undedicatedevice.o $(VMAPILIB) - gcc -o undedicatedevice -L./ -lvmapi wrapperutils.o undedicatedevice.o - -undedicatedevice.o : $(RA_SRC_DIR)undedicatedevice.c - gcc -c $(DEBUG) -I$(RA_INCLUDE_DIR) $(RA_SRC_DIR)undedicatedevice.c - -#----------------------------------------------------------------------- -# Install -#----------------------------------------------------------------------- -install: - mkdir -p $(LIB_DIR) - install $(VMAPILIB) $(LIB_DIR) - mkdir -p $(BIN_DIR) - install stopvs $(BIN_DIR) - install add3390 $(BIN_DIR) - install add3390active $(BIN_DIR) - install add9336 $(BIN_DIR) - install addvdisk $(BIN_DIR) - install addprocessor $(BIN_DIR) - install addnic $(BIN_DIR) - install connectnic2guestlan $(BIN_DIR) - install connectnic2vswitch $(BIN_DIR) - install createvs $(BIN_DIR) - install deletevs $(BIN_DIR) - install dedicatedevice $(BIN_DIR) - install deleteipl $(BIN_DIR) - install disconnectnic $(BIN_DIR) - install getuserentrynames $(BIN_DIR) - install getuserentry $(BIN_DIR) - install getipl $(BIN_DIR) - install getuserprofile $(BIN_DIR) - install getdiskpool $(BIN_DIR) - install getdiskpoolnames $(BIN_DIR) - install queryvolumes $(BIN_DIR) - install removemdisk $(BIN_DIR) - install removenic $(BIN_DIR) - install removeprocessor $(BIN_DIR) - install replacevs $(BIN_DIR) - install setipl $(BIN_DIR) - install setpassword $(BIN_DIR) - install startvs $(BIN_DIR) - install stopvs $(BIN_DIR) - install undedicatedevice $(BIN_DIR) - mkdir -p $(LD_DIR) - install -m 644 config/zhcp.conf $(LD_DIR) - -#----------------------------------------------------------------------- -# Post -#----------------------------------------------------------------------- -post: - ldconfig - -#----------------------------------------------------------------------- -# Clean -#----------------------------------------------------------------------- -clean: - rm -f *.o *.so $(VMAPILIB) - rm add3390 - rm add3390active - rm add9336 - rm addvdisk - rm addprocessor - rm addnic - rm connectnic2guestlan - rm connectnic2vswitch - rm createvs - rm deleteipl - rm deletevs - rm dedicatedevice - rm disconnectnic - rm getuserentrynames - rm getuserentry - rm getipl - rm getuserprofile - rm getdiskpool - rm getdiskpoolnames - rm queryvolumes - rm removemdisk - rm removenic - rm removeprocessor - rm replacevs - rm setipl - rm setpassword - rm startvs - rm stopvs - rm undedicatedevice diff --git a/zhcp/zhcp-build/config/zhcp.conf b/zhcp/zhcp-build/config/zhcp.conf deleted file mode 100644 index a623f4f..0000000 --- a/zhcp/zhcp-build/config/zhcp.conf +++ /dev/null @@ -1 +0,0 @@ -/opt/zhcp/lib diff --git a/zhcp/zhcp-build/resource_access/include/smPublic.h b/zhcp/zhcp-build/resource_access/include/smPublic.h deleted file mode 100644 index 5ab3fcf..0000000 --- a/zhcp/zhcp-build/resource_access/include/smPublic.h +++ /dev/null @@ -1,381 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _SM_PUBLIC_H -#define _SM_PUBLIC_H - -#include -#include -#include -#include -#include - -#define BUFLEN 256 -#define MAXCACHENAMELEN 8+1+8 -#define CACHEENTRYLEN BUFLEN+MAXCACHENAMELEN -#define PATHLENGTH 512 -#define LENGTH_OF_USERID_LENGTH_FIELD 4 -#define ALL_SCAN_FILES "*.scan" -#define PORT_FILENAME "vmbkend.UDP" - -// Data structure to character based information -typedef struct _Record { - struct _Record* nextP; - char data[1]; -} Record; - -// Data structure to keep lists of records -typedef struct _List { - Record* firstP; - Record* currentP; - int size; -} List; - -enum Times { - ConnectRetryLimit = 10, // # trials for connect - SEND_RETRY_LIMIT = 8, // # times to retry send to SMAPI - Delay = 10, // Delay in loop checking for pending workunits - MaxWaitCycleN = 10, // Max number of wait cycles for pending ops - SleepInterval = 15, // Interval in seconds to sleep on repetitive operations - Socket_Timeout = 240, // Max timeout for socket operations - Socket_Indication_Timeout = 500, // Max timeout for indication socket operations - ImageSetRange = 4096, // # image disks in an image set - LINESIZE = 512 -// # bytes to use for a message/log line -}; - -// Resource layer specific function call return codes for internal/unexpected errors -// Look in the internal context for other specific return and reason codes -// listed below -// -// NOTE Parser return codes are using -4000 to -4010 see smapiTableParser.h for details. -#define MEMORY_ERROR -999 -#define INVALID_DATA -2 -#define PROCESSING_ERROR -3 - -// These are from smSocket.c functions -#define SOCKET_OBTAIN_ERROR -100 -#define SOCKET_CONNECT_REFUSED_ERROR -101 -#define SOCKET_CONNECT_TRYAGAIN_ERROR -102 -#define SOCKET_TIMEOUT_ERROR -103 -#define SOCKET_READ_ERROR -104 -#define SOCKET_READ_RETRYABLE_ERROR -105 -#define SOCKET_WRITE_ERROR -106 -#define SOCKET_WRITE_RETRYABLE_ERROR -107 -#define SOCKET_PROCESSING_ERROR -108 -#define CUSTOM_DEFINED_SOCKET_RETRY 100 - -// Return and reason codes -enum ReturnCodes { - RcWarning = 4, RcContext = -1, // Context related errors - RcSession = -2, // Session related errors - RcFunction = -3, // Errors invoking functions - RcRuntime = -4, // General runtime errors - RcIucv = -5, // Error caused by IUCV, reason code is IUCV return value - RcCp = -6, // CP command invocation errors - RcCpint = -7, // CPint invocation - RcNoMemory = -8 -// Out of memory and no context yet -}; - -enum GeneralReasonCodes { - RsInternalBufferTooSmall = 10000, RsNoMemory = 10001, - RsSemaphoreNotCreated = 10011, RsSemaphoreNotObtained = 10012, - RsSemaphoreNotReleased = 10013, RsSocketAddrIdFileNotOpened = 10014, - RsUnableToOpenLog = 10100, RsSocketTimeout = 10110, RsUnexpected = 10200 -}; - -enum ContextReasonCodes { - RsNoHostname = 1, RsNoHostId = 2, RsNoServerAssociation = 3, - RsNoUserid = 4, RsInvalidVmapiServerVersion = 5, RsInvalidServerName = 6 -}; - -enum SessionReasonCodes { - RsUnableToReadSessionContext = 1, RsUnableToWriteSessionContext = 2 -}; - -enum FunctionReasonCodes { - RsFunctionNotSpecified = 1, RsFunctionUnknown = 2, - RsFunctionNotImplemented = 3, RsInvalidNumberOfArguments = 4, - RsFunctionNotSupported = 5, RsInvalidArgument = 24 -}; - -enum RuntimeReasonCodes { - RsUnableToOpenLog22 = 1 -}; - -typedef struct _smMemoryGroupContext { - int arraySize; - int lastChunk; - void ** chunks; -} smMemoryGroupContext; - -#define CACHE_PATH_DEFAULT "/var/opt/ibm/zvmmap/.vmapi/" -#define CACHE_SEMAPHORE_DIRECTORY ".vmapi/" -#define CACHE_SEMAPHORE_FILENAME "vmapi.sem" -#define CACHE_DIRECTORY ".cache/" -#define CACHE_DIRECTORY_FOR_USER "cache/" -#define CACHE_FILE_EXTENSION_FOR_USER ".cache" -#define CACHE_INSTANCEID_FILE_EXTENSION_FOR_USER ".id" - -// A macro to free memory and zero out the pointer too -#define FREE_MEMORY(_mempointer_) \ - if (_mempointer_) \ - { \ - free(_mempointer_); \ - _mempointer_ = NULL; \ - } - -#define TO_STRING2(_data_) \ - #_data_ -#define TO_STRING(_data_) \ - TO_STRING2(_data_) - -/** - * Before calling the resource layer the caller needs to create and zero out - * a VmApiInternalContext and set the following fields: - * - * smMemoryGroupContext structure pointed to by the memContext field. That - * memory structure should also be zeroed out. - * - * --- Trace info --- - * Set a trace flags structure pointer using the global external name: - * extern struct _smtrace externSmapiTraceFlags; - * - * Ex: - * vmapiContext.smTraceDetails = (struct _smTrace *)&externSmapiTraceFlags; - * - * That structure can be zero'ed out for no tracing or flags set to trace - * a specific area. See smTraceAndError.h for constants. - * - * Note: The first socket init call will call readTraceFile and look for a - * file (TRACE_LEVELS_FILE) to read and set trace levels if any are found. - */ -#define FIRST_FAILURE_MESSAGE_MAX_LEN 250 -typedef struct _VmApiInternalContext { - char serverName[256]; - int pendingWorkunits[10]; - struct _smTrace * smTraceDetails; // Trace and error flags, locations, etc - char userid[9]; // Used for context creation default userID - char IucvUserid[9]; // SMAPI machine UserID. If this field is null, default is VSMREQIU - char useridForAsynchNotification[9]; // This is usually the Linux ID, can be any ID in SMAPI auth file - smMemoryGroupContext * memContext; - char vmapiServerVersion[4]; - int maxServerRpcVersion; - int contextCreatedFlag; // Set to 1 if context has been created - char strFirstFailureMsg[FIRST_FAILURE_MESSAGE_MAX_LEN + 1]; - int firstFailureCaptured; // 0: False - int rc; - int reason; - int printOffset; - int execDepth; - int isBackend; - int checkBackendFlag; - key_t semKey; - int semId; - FILE* logFileP; - FILE* contextFileP; - List inputStream; - List outputStream; - List errorStream; - char path[PATHLENGTH]; // Context path in ZVMMAP_VAR or defaulted - char name[256]; - char emsg[LINESIZE]; - char hostid[20]; - char password[9]; - int instanceId; - char tag[256]; - int resolveHostName; // To be moved to persistant later -} VmApiInternalContext; - -typedef struct _Abbreviation { - char* nameP; - int minimum; -} Abbreviation; - -// Internal data structure to keep minidisk data -typedef struct _Minidisk { - struct _Minidisk* nextP; - int address; - char type[8]; - int location; - int extent; - char volser[8]; - char mode[4]; - int processFlag; -} Minidisk; - -// Internal data structure to keep dedicate data -typedef struct _Dedicate { - struct _Dedicate* nextP; - int vnum; - int rnum; -} Dedicate; - -/** - * Macro: break_if_error(FUNC, CODE, SOCK) - * - * Purpose: After a socket function, this macro will display a msg using - * perror if the function FUNC fails with code CODE. Additionally, - * if the value of the socket SOCK is not -1, the socket will be - * closed. Finally, do the 'break' part, to break out of the - * current loop. - * - * Inputs: FUNC - String to be displayed along with with perror - * CODE - The return code to be tested for failure (< 0) - * SOCK - The socket descriptor to be close if not equal to -1 - */ -#ifndef break_if_error -#define break_if_error(FUNC,CODE,SOCK) { \ - if (CODE < 0) { \ - perror(#FUNC "() failed"); \ - if (SOCK != -1) { \ - close(SOCK); \ - SOCK = -1; \ - } \ - break; }} -#endif - -/** - * Macro: continue_if_error(FUNC, CODE, SOCK) - * - * Purpose: After a socket function, this macro will display a msg using - * perror if the function FUNC fails with code CODE. Additionally, - * if the value of the socket SOCK is not -1, the socket will be - * closed. Finally, do the 'continue' part, to iterate the - * current loop. - * - * Inputs: FUNC - String to be displayed along with with perror - * CODE - The return code to be tested for failure (< 0) - * SOCK - The socket descriptor to be close if not equal to -1 - * - */ -#ifndef continue_if_error -#define continue_if_error(FUNC,CODE,SOCK) { \ - if (CODE < 0) { \ - perror(#FUNC "() failed"); \ - if (SOCK != -1) { \ - close(SOCK); \ - SOCK = -1; \ - } \ - continue; }} -#endif - -/** - * Macro: exit_if_error(FUNC, CODE, SOCK) - * - * Purpose: After a socket function, this macro will display a msg using - * perror if the function FUNC fails with code CODE. Additionally, - * if the value of the socket SOCK is not -1, the socket will be - * closed. Finally, cause the 'return' to happen. - * - * Inputs: FUNC - String to be displayed along with with perror - * CODE - The return code to be tested for failure (< 0) - * SOCK - The socket descriptor to be close if not equal to -1 - */ -#ifndef exit_if_error -#define exit_if_error(FUNC,CODE,SOCK) { \ - if (CODE < 0) { \ - perror(#FUNC "() failed"); \ - if (SOCK != -1) { \ - close(SOCK); \ - SOCK = -1; \ - } \ - return; }} -#endif - -// Macros to retrieve or default argument -#define ARG(x) getArg(x,anArgc,anArgvPP,"") -#define ARG_DEFAULT(x,aDefaultP) getArg(x,anArgc,anArgvPP,aDefaultP) - -// Utility functions -int checkAbbreviation(const char* aStringP, - const Abbreviation* anAbbreviationListP, int anAbbreviationN); - -int checkBoolean(const char* aStringP); - -int checkPrefixCommand(const char* aCommandP); - -int initializeThreadSemaphores(struct _VmApiInternalContext* vmapiContextP, - const char* aContextNameP, int aCreateFlag); - -int createDirectories(const char* aFilenameP); - -void dumpArea(struct _VmApiInternalContext* vmapiContextP, void * pstor, - int len); - -Dedicate* getDedicates(); -Minidisk* getMinidisks(); - -int isOSA(struct _VmApiInternalContext* vmapiContextP, char* rdev); - -void listAppendLine(struct _VmApiInternalContext* vmapiContextP, List* aListP, - const char* aLineP); - -void listAppendRecord(List* aListP, Record* aRecordP); - -void listDeleteCurrent(List* aListP); - -Record* -listDequeueRecord(List* aListP); - -const char* -listNextLine(List* aListP); - -const Record* -listNextRecord(List* aListP); - -void listFree(List* aListP); - -void listReset(List* aListP); - -void readTraceFile(struct _VmApiInternalContext* vmapiContextP); - -void * -smMemoryGroupAlloc(struct _VmApiInternalContext* vmapiContextP, size_t size); - -int smMemoryGroupFreeAll(struct _VmApiInternalContext* vmapiContextP); - -int smMemoryGroupInitialize(struct _VmApiInternalContext* vmapiContextP); - -void * -smMemoryGroupRealloc(struct _VmApiInternalContext* vmapiContextP, void * chunk, - size_t size); - -int smMemoryGroupTerminate(struct _VmApiInternalContext* vmapiContextP); - -char* -strip(char* aLineP, char anOption, char aChar); - -void sysinfo(struct _VmApiInternalContext* vmapiContextP, int anArgc, - const char**anArgvPP); - -int testDigit(char aChar); - -const char* -vmApiMessageText(struct _VmApiInternalContext* vmapiContextP); - -int vmbkendCacheEntryInvalidate(struct _VmApiInternalContext* vmapiContextP, - char *pathP, char *useridP); - -int vmbkendCheck(struct _VmApiInternalContext* vmapiContextP); - -void vmbkendGetCachePath(struct _VmApiInternalContext* vmapiContextP, - char *pathP); - -void *vmbkendMain(void* vmapiContextP); - -int vmbkendRemoveCachedScanFiles(struct _VmApiInternalContext* vmapiContextP, - char *pathP); - -void vmbkendRemoveEntireCache(struct _VmApiInternalContext* vmapiContextP, - char *cachePathP); - -void waitForPendingWorkunits(struct _VmApiInternalContext* vmapiContextP, - int waitIntervalInSeconds); - -int cacheFileValid(struct _VmApiInternalContext* vmapiContextP, - const char* cFName); - -#include "smTraceAndError.h" - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/smSocket.h b/zhcp/zhcp-build/resource_access/include/smSocket.h deleted file mode 100644 index 0d1ba7b..0000000 --- a/zhcp/zhcp-build/resource_access/include/smSocket.h +++ /dev/null @@ -1,16 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _SMSOCKET_H -#define _SMSOCKET_H -#include "smPublic.h" - -int smSocketInitialize(struct _VmApiInternalContext* vmapiContextP, - int * sockId); -int smSocketWrite(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * data, int dataLen); -int smSocketRead(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len); -int smSocketReadLoop(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len); -int smSocketTerminate(struct _VmApiInternalContext* vmapiContextP, int sockId); -#endif diff --git a/zhcp/zhcp-build/resource_access/include/smTraceAndError.h b/zhcp/zhcp-build/resource_access/include/smTraceAndError.h deleted file mode 100644 index 8faf779..0000000 --- a/zhcp/zhcp-build/resource_access/include/smTraceAndError.h +++ /dev/null @@ -1,137 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _SM_TRACE_H -#define _SM_TRACE_H -#include -#include -#include "smPublic.h" - -// Trace levels are to be powers of 2 to allow combinations of tracing -#define TRACE_LEVELS_FILE "vmmaptracing" -#define TRACE_LEVELS_FILE_DIRECTORY "/etc/opt/ibm/zvmmap/.cimvm/" - -// Make sure the level information matches the index in the TRACE_LEVELS and TRACE_FLAG_VALUES array below -#define TRACELEVEL_OFF 0 -#define TRACELEVEL_FLOW 1 -#define TRACELEVEL_PARAMETERS 2 -#define TRACELEVEL_DETAILS 4 -#define TRACELEVEL_BUFFER_OUT 256 // Unit test socket layer -#define TRACELEVEL_BUFFER_IN 512 // Unit test socket layer -#define TRACELEVEL_ALL 0x8FFFFFFF - -// Keywords for the trace file -#define TRACE_LEVELS_COUNT 7 -static const char * TRACE_LEVELS[TRACE_LEVELS_COUNT] = { "off", "flow", - "parms", "details", "buffout", "buffin", "all" }; - -static const unsigned int TRACE_FLAG_VALUES[TRACE_LEVELS_COUNT] = { 0, - TRACELEVEL_FLOW, TRACELEVEL_PARAMETERS, TRACELEVEL_DETAILS, - TRACELEVEL_BUFFER_OUT, TRACELEVEL_BUFFER_IN, TRACELEVEL_ALL }; - -// Trace areas index into trace array -#define TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD 0 -#define TRACEAREA_CIM_OPERATION_LAYER 1 -#define TRACEAREA_RESOURCE_LAYER 2 -#define TRACEAREA_RESOURCE_LAYER_SOCKET 3 -#define TRACEAREA_RESOURCE_LAYER_PARSER 4 -#define TRACEAREA_BACKGROUND_VMEVENT_NOTIFICATION_THREAD 5 -#define TRACEAREA_NAME_VALUE_PARSER 6 -#define TRACEAREA_CACHE 7 -#define TRACEAREA_SMAPI_ONLY 8 - -// Keywords for the trace areas -#define TRACE_AREAS_COUNT 9 -static const char * TRACE_KEYWORDS[TRACE_AREAS_COUNT] = { "directorychanges", - "cimop", "resourcelayer", "socket", "parser", "vmeventchanges", - "namevalueparser", "cache", "smapionly" }; - -typedef struct _smTrace { - unsigned int traceFlags[TRACE_AREAS_COUNT]; // A separate trace int for each area - int traceLock; - int traceFileRead; // 0 = trace file needs to be checked with "readTraceFile(" - unsigned int traceOutputLocation; // 0 = syslog - FILE * traceFilePointer; // 0 = no file open -} smTrace; - -/** - * Trace functions and constants for a line of data or a block of storage - */ - -// errorLog will save the return and reason code in the context and then -// call errorLine. -void errorLog(struct _VmApiInternalContext* vmapiContextP, - const char * functionName, const char * lineNumber, int aRc, - int aReason, const char* aLineP); - -// errorLine will call Logline with the "error" flag and then -// call listAppendLine to add a record to the context error stream -void errorLine(struct _VmApiInternalContext* vmapiContextP, const char* aLineP); - -// These severity contants get remapped to syslog constants in LogLine -#define LOGLINE_DEBUG 'D' -#define LOGLINE_ERR 'E' -#define LOGLINE_INFO 'I' -#define LOGLINE_NOTICE 'N' -#define LOGLINE_WARNING 'W' -#define LOGLINE_EXCEPTION 'X' - -// LogLine will add a timestamp and then write the data to the syslog. -void logLine(struct _VmApiInternalContext* vmapiContextP, char aSeverity, - const char* aLineP); - -void outputLine(struct _VmApiInternalContext* vmapiContextP, - const char* aLineP, int aLogFlag); - -// This macro can be used to test for a trace type being on before -// calling logLine. See logline description below. Follow the logLine -// call with the TRACE_END or TRACE_END_DEBUG to close out the braces -// logline with the LOGLINE_DEBUG will replace the old codes use of debugline. -#define TRACE_START(_context_ , _tracearea_, _tracelevel_) \ - if(((_context_)->smTraceDetails->traceFlags[_tracearea_])&_tracelevel_ ) \ - { - -#define TRACE_END } - -#define TRACE_END_DEBUG(_context_, _linedata_) \ - logLine(_context_, LOGLINE_DEBUG, _linedata_); \ - } - -// This macro can be used to trace entry into a function, -// the function name is supplied by the compiler -#define TRACE_ENTRY_FLOW(_context_ , _tracearea_) \ - TRACE_START(_context_, _tracearea_, TRACELEVEL_FLOW); \ - char _line_[LINESIZE]; \ - sprintf(_line_, \ - "%s function ENTRY (at line %d in %s) \n", \ - __func__, __LINE__, __FILE__); \ - logLine(_context_ ,LOGLINE_DEBUG, _line_); \ - } - -// This macro can be used to trace exit from a function, -// the function name is supplied by the compiler -// The context is expected to be a pointer -#define TRACE_EXIT_FLOW(_context_ , _tracearea_) \ - TRACE_START(_context_, _tracearea_, TRACELEVEL_FLOW); \ - char _line_[LINESIZE]; \ - sprintf(_line_, \ - "%s function EXIT. RC: %d RS: %d (at line %d in %s) \n", \ - __func__, \ - _context_->rc, \ - _context_->reason, __LINE__, __FILE__); \ - logLine(_context_ ,LOGLINE_DEBUG, _line_); \ - } - -// This macro can be used to trace exit from a CIM function where you specify the return code, -// the function name is supplied by the compiler -// The context is expected to be a pointer -#define TRACE_EXIT_CIM_FLOW(_context_ , _tracearea_ , _rc_) \ - TRACE_START(_context_, _tracearea_, TRACELEVEL_FLOW); \ - char _line_[LINESIZE]; \ - sprintf(_line_, \ - "%s function EXIT. RC: %d (at line %d in %s) \n", \ - __func__, \ - _rc_, __LINE__, __FILE__); \ - logLine(_context_ ,LOGLINE_DEBUG, _line_); \ - } - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/smapiTableParser.h b/zhcp/zhcp-build/resource_access/include/smapiTableParser.h deleted file mode 100644 index e5b77ea..0000000 --- a/zhcp/zhcp-build/resource_access/include/smapiTableParser.h +++ /dev/null @@ -1,213 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_PARSER_ROUTINE_H -#define _VMAPI_PARSER_ROUTINE_H - -#include -#include -#include -#include "smPublic.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// This structure typedef is used for the common information returned by -// the SMAPI -typedef struct _commonOutputFields { - int requestId; - int returnCode; - int reasonCode; -} commonOutputFields; - -// This structure is used to handle unknown number of zero terminated data -// returned by the SMAPI. Array notation can be used to subscript the strings. -typedef struct _vmApiCStringInfo { - char * vmapiString; -} vmApiCStringInfo; - -/** - * Parser table general layout: - * Columns are: Type, min, max, output structure unique index number, nesting level, - * offset in output structure (or size of output structure) - * - * Min and max only apply to string length items, and arrays - * - * NOTE: - * Each type has the following requirements: - * - * APITYPE_BASE_STRUCT_LEN Column 4 must be STRUCT_INDX_0, column 6 is size of structure - * APITYPE_INTn Column 4 must have the structure index, column 6 contains the offset to store this value into - * APITYPE_STRING_LEN Column 2 must have the minimum string length, column 3 must have the maximum length or -1 if no max - * Column 4 must have the structure index, column 6 contains the offset to store this string into - * If a single zero terminated string is returned in the buffer; then use - * APITYPE_C_STR_PTR Column 2 must have the minimum string length, column 3 must have the maximum length or -1 if no max - * Column 4 must have the structure index, column 6 contains the offset to store this string into - * - * APITYPE_CHARBUF_LEN Column 2 must have the minimum charaters length, column 3 must have the maximum length or -1 if no max - * Column 4 must have the structure index, column 6 contains the offset to store this charater buffer pointer into - * APITYPE_CHARBUF_COUNT Column 4 must have the structure index, column 6 contains the offset to store the count into - * (CHARBUF_LEN must have a ..COUNT as the next table entry) - * - * APITYPE_ARRAY_LEN Column 4 must have the structure index, column 6 contains the offset to - * store the pointer to first array element at. - * APITYPE_ARRAY_STRUCT_COUNT Column 4 must have the structure index, column 6 contains the offset to store the count into - * APITYPE_STRUCT_LEN or APITYPE_NOBUFFER_STRUCT_LEN - * Column 5 must have the size of the output structure - * (ARRAY must have STRUCT following; STRUCT_COUNT must have a ..LEN as the next table entry) - * APITYPE_NOBUFFER_STRUCT_LEN is used when the SMAPI buffer does not have a structure size - * after the array size in the returned data. (The data is an array of strings vs array of structures) - * - * When the SMAPI buffer has many zero terminated strings as output: (use the next 4 types in that order) - * The vmApiCStringInfo structure can be used to hold each string. - * APITYPE_C_STR_ARRAY_PTR Column 4 must have the parent structure index, column 6 contains - * the offset to store the pointer to first string in the array at. - * APITYPE_C_STR_ARRAY_COUNT Column 4 must have the structure index which hold the count field, column 6 contains the offset to store the count into - * APITYPE_C_STR_STRUCT_LEN Column 5 must have the size of the output structure (vmApiCStringInfo) - * APITYPE_C_STR_PTR Column 5 must have the offset in the C string structure of the char * - * - * APITYPE_END_OF_TABLE Must be used to end the table - * - * Note: use CHARBUF for strings that can contain nulls (CHARNA in zVM API data types) - * - * Ex: - * static tableLayout Imalge_Activate_Layout = - * { - * {APITYPE_BASE_STRUCT_LEN, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,sizeof(VmApiImageActivateOutput) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,common.requestId) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,common.returnCode)}, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,common.reasonCode)}, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,activated) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,notActivated) }, - * - * {APITYPE_ARRAY_LEN, 4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,failList) }, - * {APITYPE_ARRAY_STRUCT_COUNT,4,4,STRUCT_INDX_0,NEST_LEVEL_0,offsetof(VmApiImageActivateOutput,failingArrayCount)}, - * {APITYPE_STRUCT_LEN, 4,4,STRUCT_INDX_1,NEST_LEVEL_1,sizeof(VmApiImageFailing) }, - * {APITYPE_STRING_LEN, 1,8,STRUCT_INDX_1,NEST_LEVEL_1,offsetof(VmApiImageFailing,imageName) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_1,NEST_LEVEL_1,offsetof(VmApiImageFailing,returnCode) }, - * {APITYPE_INT4, 4,4,STRUCT_INDX_1,NEST_LEVEL_1,offsetof(VmApiImageFailing,reasonCode) }, - * {APITYPE_END_OF_TABLE,0,0,0,0} - * }; - */ -#define APITYPE_END_OF_TABLE 0 -#define APITYPE_INT1 1 -#define APITYPE_INT4 2 -#define APITYPE_INT8 3 - -#define APITYPE_STRING_LEN 20 -#define APITYPE_ARRAY_LEN 21 -#define APITYPE_ARRAY_STRUCT_COUNT 22 -#define APITYPE_STRUCT_LEN 23 -#define APITYPE_NOBUFFER_STRUCT_LEN 24 -#define APITYPE_CHARBUF_LEN 25 -#define APITYPE_CHARBUF_COUNT 26 -#define APITYPE_C_STR_ARRAY_PTR 30 -#define APITYPE_C_STR_ARRAY_COUNT 31 -#define APITYPE_C_STR_STRUCT_LEN 32 -#define APITYPE_C_STR_PTR 33 -#define APITYPE_BASE_STRUCT_LEN 98 - -#define STRUCT_INDX_0 0 -#define STRUCT_INDX_1 1 -#define STRUCT_INDX_2 2 -#define STRUCT_INDX_3 3 -#define STRUCT_INDX_4 4 -#define STRUCT_INDX_5 5 -#define STRUCT_INDX_6 6 -#define STRUCT_INDX_7 7 -#define STRUCT_INDX_8 8 -#define STRUCT_INDX_9 9 -#define STRUCT_INDX_10 10 - -#define NEST_LEVEL_0 0 -#define NEST_LEVEL_1 1 -#define NEST_LEVEL_2 2 -#define NEST_LEVEL_3 3 - -#define MAX_STRUCT_ARRAYS 10 - -#define COL_1_TYPE 0 -#define COL_2_MINSIZE 1 -#define COL_3_MAXSIZE 2 -#define COL_4_STRUCT_INDEX 3 -#define COL_5_NEST_LEVEL 4 -#define COL_6_SIZE_OR_OFFSET 5 - -enum tableParserModes { - scan, populate -}; - -typedef int tableLayout[][6]; - -/** - * Input/output structure for use by smapiTableParser parseBufferWithTable() - * - * - smapiBufferCursor must be set to the start of the SMAPI data - * - dataBufferSize must be set to the total size of the SMAPI data - * - byteCount is used by parseBufferWithTable as a work variable - * - outStringByteCount will be set in "scan" mode to the number of bytes needed for all the - * strings found in the SMAPI data - * - outStructCount array will be set in "scan" mode to the number of structures found at each - * level - * - outStructSizes array will be set in "scan" mode to the size of 1 structure - * - inStructAddrs array must be set in "populate" mode to the starting address of the first - * structure at each level - * - inStringCursor must be set in "populate" mode to the start of the storage block for use in - * string allocation. - */ -typedef struct _tableParserParms { - char * smapiBufferCursor; // Input for SCAN and POPULATE. Initially set to output buffer. - int dataBufferSize; // Input for SCAN and POPULATE, size of SMAPI output buffer - int byteCount; // Bytes processed from SMAPI returned data buffer - int outStringByteCount; // Output parm from SCAN - int outStructCount[MAX_STRUCT_ARRAYS]; // Output parm from SCAN - int outStructSizes[MAX_STRUCT_ARRAYS]; // Output parm from SCAN - void * inStructAddrs[MAX_STRUCT_ARRAYS];// Input parm for POPULATE - char * inStringCursor; // Input string block pointer for POPULATE -} tableParserParms; - -#define PARSER_ERROR_INVALID_TABLE -4002 -#define PARSER_ERROR_INVALID_STRING_SIZE -4003 - -#define ntohll(x) (((unsigned long long)(ntohl((int)((x << 32) >> 32))) << 32) | (unsigned int)ntohl(((int)(x >> 32)))) -#define htonll(x) ntohll(x) - -#define PUT_INT(_inInt_,_outBuf_) \ - ({ int _int; \ - _int = htonl(_inInt_) ; \ - memcpy(_outBuf_, &_int, 4); \ - _outBuf_ += 4; \ - }) - -#define GET_INT(_outInt_,_inBuf_) \ - ({ int _int; \ - memcpy(&_int, _inBuf_, 4); \ - _outInt_ = ntohl(_int) ; \ - _inBuf_ += 4; \ - }) - -#define PUT_64INT(_in64Int_,_outBuf_) \ - ({ long long _64int; \ - _64int = htonll(_in64Int_) ; \ - memcpy(_outBuf_, &_64int, 8); \ - _outBuf_ += 8; \ - }) - -#define GET_64INT(_out64Int_,_inBuf_) \ - ({ long long _64int; \ - memcpy(&_64int, _inBuf_, 8); \ - _out64Int_ = ntohll(_64int) ; \ - _inBuf_ += 8; \ - }) - -int parseBufferWithTable(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, tableLayout table, tableParserParms *parms); - -int getAndParseSmapiBuffer(struct _VmApiInternalContext* vmapiContextP, - char * * inputBufferPointerPointer, int inputBufferSize, - tableLayout parserTable, char * parserTableName, char * * outData); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiAsynchronous.h b/zhcp/zhcp-build/resource_access/include/vmapiAsynchronous.h deleted file mode 100644 index 937c6b4..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiAsynchronous.h +++ /dev/null @@ -1,129 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_ASYNCHRONOUS_H -#define _VMAPI_ASYNCHRONOUS_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Asynchronous_Notification_Disable_DM -typedef commonOutputFields vmApiAsynchronousNotificationDisableDmOutput; - -// Parser table for Asynchronous_Notification_Disable_DM -static tableLayout Asynchronous_Notification_Disable_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAsynchronousNotificationDisableDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationDisableDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationDisableDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationDisableDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAsynchronous_Notification_Disable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationDisableDmOutput ** outData); - -// Asynchronous_Notification_Enable_DM -typedef commonOutputFields vmApiAsynchronousNotificationEnableDmOutput; - -// Parser table for Asynchronous_Notification_Enable_DM -static tableLayout Asynchronous_Notification_Enable_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAsynchronousNotificationEnableDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationEnableDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationEnableDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationEnableDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAsynchronous_Notification_Enable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char subscription_type, char communication_type, - int port_number, char * ip_address, char encoding, - int subscriber_data_length, char * subscriber_data, - vmApiAsynchronousNotificationEnableDmOutput ** outData); - -// Asynchronous_Notification_Query_DM -typedef struct _vmApiNotification { // Common structure used by Asynchronous_Notification_Query - char * userid; - char subscriptionType; - char communicationType; - int portNumber; - char * ipAddress; - char encoding; - int subscriberDataLength; - char * subscriberData; -} vmApiNotification; - -typedef struct _vmApiAsynchronousNotificationQueryDmOutput { - commonOutputFields common; - int notificationCount; - vmApiNotification * notificationList; -} vmApiAsynchronousNotificationQueryDmOutput; - -// Parser table for Asynchronous_Notification_Query_DM -static tableLayout - Asynchronous_Notification_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAsynchronousNotificationQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiAsynchronousNotificationQueryDmOutput, - notificationList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof( - vmApiAsynchronousNotificationQueryDmOutput, - notificationCount) }, { APITYPE_STRUCT_LEN, 4, - 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiNotification) }, { APITYPE_STRING_LEN, 4, - 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNotification, userid) }, { APITYPE_INT1, - 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNotification, subscriptionType) }, { - APITYPE_INT1, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, communicationType) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, portNumber) }, { - APITYPE_STRING_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, ipAddress) }, { - APITYPE_INT1, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiNotification, encoding) }, { - APITYPE_CHARBUF_LEN, 0, 64, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiNotification, - subscriberData) }, { APITYPE_CHARBUF_COUNT, 0, - 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNotification, subscriberDataLength) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAsynchronous_Notification_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationQueryDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiAuthorization.h b/zhcp/zhcp-build/resource_access/include/vmapiAuthorization.h deleted file mode 100644 index 9ed6bcc..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiAuthorization.h +++ /dev/null @@ -1,106 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_AUTHORIZATION_H -#define _VMAPI_AUTHORIZATION_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Authorization_List_Add -typedef commonOutputFields vmApiAuthorizationListAddOutput; - -// Parser table for Authorization_List_Add -static tableLayout Authorization_List_Add_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAuthorizationListAddOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiAuthorizationListAddOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiAuthorizationListAddOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListAddOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAuthorization_List_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListAddOutput ** outData); - -// Authorization_List_Query -typedef struct _vmApiAuthorizationRecord { // Common structure used by Authorization_List_Query - char * requestingUserid; - char requestingListIndicator; - char * forUserid; - char forListIndicator; - char * functionName; - char functionListIndicator; -} vmApiAuthorizationRecord; - -typedef struct _vmApiAuthorizationListQueryOutput { - commonOutputFields common; - int authorizationRecordCount; - vmApiAuthorizationRecord * authorizationRecordList; -} vmApiAuthorizationListQueryOutput; - -// Parser table for Authorization_List_Query -static tableLayout Authorization_List_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAuthorizationListQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListQueryOutput, authorizationRecordList) }, - { APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiAuthorizationListQueryOutput, - authorizationRecordCount) }, { APITYPE_STRUCT_LEN, 4, - 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiAuthorizationRecord) }, { APITYPE_STRING_LEN, 1, - 64, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, requestingUserid) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, requestingListIndicator) }, { - APITYPE_STRING_LEN, 1, 64, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiAuthorizationRecord, forUserid) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, forListIndicator) }, { - APITYPE_STRING_LEN, 1, 64, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiAuthorizationRecord, functionName) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiAuthorizationRecord, functionListIndicator) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAuthorization_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListQueryOutput ** outData); - -// Authorization_List_Remove -typedef commonOutputFields vmApiAuthorizationListRemoveOutput; - -// Parser table for Authorization_List_Remove -static tableLayout Authorization_List_Remove_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiAuthorizationListRemoveOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListRemoveOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListRemoveOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiAuthorizationListRemoveOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smAuthorization_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListRemoveOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiCheckAuthentication.h b/zhcp/zhcp-build/resource_access/include/vmapiCheckAuthentication.h deleted file mode 100644 index 09c6439..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiCheckAuthentication.h +++ /dev/null @@ -1,34 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_CHECK_AUTHENTICATION_H -#define _VMAPI_CHECK_AUTHENTICATION_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Check_Authentication -typedef commonOutputFields vmApiCheckAuthenticationOutput; - -// Parser table for Check_Authentication -static tableLayout Check_Authentication_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiCheckAuthenticationOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiCheckAuthenticationOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiCheckAuthenticationOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiCheckAuthenticationOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smCheck_Authentication(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - vmApiCheckAuthenticationOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiDirectoryManager.h b/zhcp/zhcp-build/resource_access/include/vmapiDirectoryManager.h deleted file mode 100644 index 791153c..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiDirectoryManager.h +++ /dev/null @@ -1,172 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_DIRECTORY_MANAGER_H -#define _VMAPI_DIRECTORY_MANAGER_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Directory_Manager_Local_Tag_Define_DM -typedef commonOutputFields vmApiDirectoryManagerLocalTagDefineDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Define_DM -static tableLayout Directory_Manager_Local_Tag_Define_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagDefineDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDefineDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Local_Tag_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_ordinal, char createOrChange, - vmApiDirectoryManagerLocalTagDefineDmOutput ** outData); - -// Directory_Manager_Local_Tag_Delete_DM -typedef commonOutputFields vmApiDirectoryManagerLocalTagDeleteDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Delete_DM -static tableLayout Directory_Manager_Local_Tag_Delete_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagDeleteDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDeleteDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int - smDirectory_Manager_Local_Tag_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, - vmApiDirectoryManagerLocalTagDeleteDmOutput ** outData); - -// Directory_Manager_Local_Tag_Query_DM -typedef struct _vmApiDirectoryManagerLocalTagQueryDmOutput { - commonOutputFields common; - int tagValueLength; - char * tagValue; -} vmApiDirectoryManagerLocalTagQueryDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Query_DM -static tableLayout - Directory_Manager_Local_Tag_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - common.reasonCode) }, - { APITYPE_CHARBUF_LEN, 1, 240, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiDirectoryManagerLocalTagQueryDmOutput, - tagValue) }, { APITYPE_CHARBUF_COUNT, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagQueryDmOutput, - tagValueLength) }, { APITYPE_END_OF_TABLE, 0, - 0, 0, 0 } }; -int smDirectory_Manager_Local_Tag_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, vmApiDirectoryManagerLocalTagQueryDmOutput ** outData); - -// Directory_Manager_Local_Tag_Set_DM -typedef commonOutputFields vmApiDirectoryManagerLocalTagSetDmOutput; - -// Parser table for Directory_Manager_Local_Tag_Set_DM -static tableLayout Directory_Manager_Local_Tag_Set_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerLocalTagSetDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagSetDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagSetDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerLocalTagSetDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Local_Tag_Set_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_value_length, char * tag_value, - vmApiDirectoryManagerLocalTagSetDmOutput ** outData); - -// Directory_Manager_Search_DM -typedef struct _vmApiDirectoryManagerStatement { // Common structure used by Directory_Manager_Search - char * targetId; - int statementLength; - char * statement; -} vmApiDirectoryManagerStatement; - -typedef struct _vmApiDirectoryManagerSearchDmOutput { - commonOutputFields common; - int statementCount; - vmApiDirectoryManagerStatement * statementList; -} vmApiDirectoryManagerSearchDmOutput; - -// Parser table for Directory_Manager_Search_DM -static tableLayout Directory_Manager_Search_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerSearchDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerSearchDmOutput, statementList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiDirectoryManagerSearchDmOutput, statementCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiDirectoryManagerStatement) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiDirectoryManagerStatement, - targetId) }, { APITYPE_CHARBUF_LEN, 1, 72, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiDirectoryManagerStatement, statement) }, { - APITYPE_CHARBUF_COUNT, 0, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiDirectoryManagerStatement, statementLength) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Search_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int search_pattern_length, - char * search_pattern, vmApiDirectoryManagerSearchDmOutput ** outData); - -// Directory_Manager_Task_Cancel_DM -typedef commonOutputFields vmApiDirectoryManagerTaskCancelDmOutput; - -// Parser table for Directory_Manager_Task_Cancel_DM -static tableLayout Directory_Manager_Task_Cancel_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiDirectoryManagerTaskCancelDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerTaskCancelDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerTaskCancelDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiDirectoryManagerTaskCancelDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smDirectory_Manager_Task_Cancel_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operation_id, vmApiDirectoryManagerTaskCancelDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiImage.h b/zhcp/zhcp-build/resource_access/include/vmapiImage.h deleted file mode 100644 index 0d4fef5..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiImage.h +++ /dev/null @@ -1,1252 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_IMAGE_H -#define _VMAPI_IMAGE_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Image_Activate -typedef struct _vmApiImageFailing { // Common structure for Image_Activate, Image_Deactivate, Image_Recycle - char * imageName; - int returnCode; - int reasonCode; -} vmApiImageFailing; - -typedef struct _vmApiImageActivate { - commonOutputFields common; - int activated; - int notActivated; - int failingArrayCount; - vmApiImageFailing * failList; -} vmApiImageActivateOutput; - -int smImage_Activate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageActivateOutput ** outData); - -// Parser table for Image_Activate -static tableLayout Image_Activate_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageActivateOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActivateOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageActivateOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageActivateOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActivateOutput, activated) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageActivateOutput, - notActivated) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActivateOutput, failList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActivateOutput, failingArrayCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageFailing) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageFailing, - imageName) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiImageFailing, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_Active_Configuration_Query -typedef struct _vmApiImageCpuInfo // This struct is shared with Image CPU query also -{ - int cpuNumber; // Or address - char * cpuId; - char cpuBase; // Only supplied for Image_CPU_Query - char cpuStatus; - char cpuType; // Only supplied for Image_CPU_Query -} vmApiImageCpuInfo; - -typedef struct _vmApiImageDeviceInfo { - char deviceType; - char * deviceAddress; -} vmApiImageDeviceInfo; - -typedef struct _vmApiImageActiveConfigurationQuery { - commonOutputFields common; - int memorySize; - char memoryUnit; - char shareType; - char * shareValue; - int numberOfCpus; - int cpuInfoCount; - vmApiImageCpuInfo * cpuList; - int deviceCount; - vmApiImageDeviceInfo * deviceList; -} vmApiImageActiveConfigurationQueryOutput; - -int smImage_Active_Configuration_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageActiveConfigurationQueryOutput ** outData); - -// Parser table for Image_Active_Configuration_Query -static tableLayout - Image_Active_Configuration_Query_Layout = { - { APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageActiveConfigurationQueryOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - common.requestId) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - common.returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, memorySize) }, - { APITYPE_INT1, 1, 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, memoryUnit) }, - { APITYPE_INT1, 1, 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, shareType) }, - { APITYPE_STRING_LEN, 1, 5, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActiveConfigurationQueryOutput, - shareValue) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - numberOfCpus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActiveConfigurationQueryOutput, - cpuList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - cpuInfoCount) }, - { APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageCpuInfo) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuNumber) }, { - APITYPE_STRING_LEN, 1, 16, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiImageCpuInfo, cpuId) }, { APITYPE_INT1, - 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageActiveConfigurationQueryOutput, - deviceList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageActiveConfigurationQueryOutput, - deviceCount) }, { APITYPE_STRUCT_LEN, 4, 4, - STRUCT_INDX_2, NEST_LEVEL_1, - sizeof(vmApiImageDeviceInfo) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_2, NEST_LEVEL_1, offsetof( - vmApiImageDeviceInfo, deviceType) }, { - APITYPE_STRING_LEN, 4, 16, STRUCT_INDX_2, NEST_LEVEL_1, - offsetof(vmApiImageDeviceInfo, deviceAddress) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_CPU_Define -typedef commonOutputFields vmApiImageCpuDefineOutput; - -// Parser table for Image_CPU_Define -static tableLayout Image_CPU_Define_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDefineOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuDefineOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuDefineOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Define(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char cpuType, - vmApiImageCpuDefineOutput ** outData); - -// Image_CPU_Define_DM -typedef commonOutputFields vmApiImageCpuDefineDmOutput; - -// Parser table for Image_CPU_Define_DM -static tableLayout Image_CPU_Define_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDefineDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char baseCpu, char * cpuId, - char dedicateCpu, char cryptoCpu, - vmApiImageCpuDefineDmOutput ** outData); - -// Image_CPU_Delete -typedef commonOutputFields vmApiImageCpuDeleteOutput; - -// Parser table for Image_CPU_Delete -static tableLayout Image_CPU_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDeleteOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuDeleteOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteOutput ** outData); - -// Image_CPU_Delete_DM -typedef commonOutputFields vmApiImageCpuDeleteDmOutput; - -// Parser table for Image_CPU_Delete_DM -static tableLayout Image_CPU_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuDeleteDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteDmOutput ** outData); - -// Image_CPU_Query -typedef struct _vmApiImageCpuQuery { - commonOutputFields common; - int numberOfCpus; - int cpuInfoCount; - vmApiImageCpuInfo * cpuList; -} vmApiImageCpuQueryOutput; - -int smImage_CPU_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageCpuQueryOutput ** outData); - -// Parser table for Image_CPU_Query -static tableLayout Image_CPU_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuQueryOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryOutput, numberOfCpus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryOutput, cpuList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageCpuQueryOutput, cpuInfoCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageCpuInfo) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageCpuInfo, - cpuNumber) }, - { APITYPE_STRING_LEN, 1, 16, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuId) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageCpuInfo, - cpuBase) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiImageCpuInfo, cpuStatus) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageCpuInfo, cpuType) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_CPU_Query_DM -typedef struct _vmApiImageCpuQueryDm { - commonOutputFields common; - char * cpuAddress; - char baseCpu; - char * cpuId; - char cpuDedicate; - char cpuCrypto; -} vmApiImageCpuQueryDmOutput; - -int smImage_CPU_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuQueryDmOutput ** outData); - -// Parser table for Image_CPU_Query_DM -static tableLayout Image_CPU_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCpuQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, common.reasonCode) }, { - APITYPE_STRING_LEN, 1, 2, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, cpuAddress) }, { APITYPE_INT1, 1, - 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuQueryDmOutput, - baseCpu) }, { APITYPE_STRING_LEN, 0, 6, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuQueryDmOutput, cpuId) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuQueryDmOutput, cpuDedicate) }, { APITYPE_INT1, 1, - 1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuQueryDmOutput, - cpuCrypto) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Image_CPU_Set_Maximum_DM -typedef commonOutputFields vmApiImageCpuSetMaximumDmOutput; - -// Parser table for Image_CPU_Set_Maximum_DM -static tableLayout Image_CPU_Set_Maximum_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageCpuSetMaximumDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCpuSetMaximumDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCpuSetMaximumDmOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCpuSetMaximumDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_CPU_Set_Maximum_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int maxCpus, - vmApiImageCpuSetMaximumDmOutput ** outData); - -// Image_Create_DM -typedef struct _vmApiImageRecord { // Common structure used by Image_Create_Dm and Image_Query_DM and Image_Replace_DM - int imageRecordLength; - char * imageRecord; -} vmApiImageRecord; - -typedef struct _vmApiImageCreateDm { - commonOutputFields common; - int operationId; -} vmApiImageCreateDmOutput; - -// Parser table for Image_Create_DM -static tableLayout Image_Create_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageCreateDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCreateDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageCreateDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageCreateDmOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageCreateDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int - smImage_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * prototypeName, - int initialPasswordLength, char * initialPassword, - char * initialAccountNumber, int imageRecordCount, - vmApiImageRecord * imageRecordList, - vmApiImageCreateDmOutput ** outData); - -// Image_Deactivate -typedef struct _vmApiImageDeactivate { - commonOutputFields common; - int deactivated; - int notDeactivated; - int failingArrayCount; - vmApiImageFailing * failList; // Reuse structure from Image_Activate -} vmApiImageDeactivateOutput; - -// Parser table for Image_Deactivate -static tableLayout Image_Deactivate_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDeactivateOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, deactivated) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeactivateOutput, - notDeactivated) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeactivateOutput, failList) }, { APITYPE_ARRAY_STRUCT_COUNT, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeactivateOutput, - failingArrayCount) }, { APITYPE_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiImageFailing) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, imageName) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageFailing, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, reasonCode) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smImage_Deactivate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * forceTimeLength, - vmApiImageDeactivateOutput ** outData); - -// Image_Delete_DM -typedef struct _vmApiImageDeleteDm { - commonOutputFields common; - int operationId; -} vmApiImageDeleteDmOutput; - -// Parser table for Image_Delete_DM -static tableLayout Image_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDeleteDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeleteDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeleteDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeleteDmOutput, common.reasonCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeleteDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dataSecurityErase, - vmApiImageDeleteDmOutput ** outData); - -// Image_Device_Dedicate -typedef commonOutputFields vmApiImageDeviceDedicateOutput; - -// Parser table for Image_Device_Dedicate -static tableLayout Image_Device_Dedicate_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceDedicateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceDedicateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smImage_Device_Dedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateOutput ** outData); - -// Image_Device_Dedicate_DM -typedef commonOutputFields vmApiImageDeviceDedicateDmOutput; - -// Parser table for Image_Device_Dedicate_DM -static tableLayout Image_Device_Dedicate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceDedicateDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeviceDedicateDmOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceDedicateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Dedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateDmOutput ** outData); - -// Image_Device_Reset -typedef commonOutputFields vmApiImageDeviceResetOutput; - -// Parser table for Image_Device_Reset -static tableLayout Image_Device_Reset_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDeviceResetOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceResetOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceResetOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceResetOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Reset(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceResetOutput ** outData); - -// Image_Device_Undedicate -typedef commonOutputFields vmApiImageDeviceUndedicateOutput; - -// Parser table for Image_Device_Undedicate -static tableLayout Image_Device_Undedicate_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceUndedicateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDeviceUndedicateOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDeviceUndedicateOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Undedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateOutput ** outData); - -// Image_Device_Undedicate_DM -typedef commonOutputFields vmApiImageDeviceUndedicateDmOutput; - -// Parser table for Image_Device_Undedicate_DM -static tableLayout Image_Device_Undedicate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDeviceUndedicateDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDeviceUndedicateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Device_Undedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateDmOutput ** outData); - -// Image_Disk_Copy -typedef commonOutputFields vmApiImageDiskCopyOutput; - -// Parser table for Image_Disk_Copy -static tableLayout Image_Disk_Copy_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskCopyOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskCopyOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskCopyOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Copy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskCopyOutput ** outData); - -// Image_Disk_Copy_DM -typedef struct _vmApiImageDiskCopyDm { - commonOutputFields common; - int operationId; -} vmApiImageDiskCopyDmOutput; - -// Parser table for Image_Disk_Copy_DM -static tableLayout Image_Disk_Copy_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskCopyDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCopyDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Copy_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * sourceImageName, char * sourceImageDiskNumber, - char * imageDiskAllocationType, char * allocationAreaName, - char * imageDiskMode, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCopyDmOutput ** outData); - -// Image_Disk_Create -typedef commonOutputFields vmApiImageDiskCreateOutput; - -// Parser table for Image_Disk_Create -static tableLayout Image_Disk_Create_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskCreateOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskCreateOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, char * imageDiskMode, - vmApiImageDiskCreateOutput ** outData); - -// Image_Disk_Create_DM -typedef struct _vmApiImageDiskCreateDm { - commonOutputFields common; - int operationId; -} vmApiImageDiskCreateDmOutput; - -// Parser table for Image_Disk_Create_DM -static tableLayout Image_Disk_Create_DM_Layout = { - { APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDiskCreateDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskCreateDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * imageDiskDeviceType, char * imageDiskAllocationType, - char * allocationAreaNameOrVolser, char allocationUnitSize, - int imageDiskSize, char * imageDiskMode, char imageDiskFormatting, - char * imageDiskLabel, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCreateDmOutput ** outData); - -// Image_Disk_Delete -typedef commonOutputFields vmApiImageDiskDeleteOutput; - -// Parser table for Image_Disk_Delete -static tableLayout Image_Disk_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskDeleteOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskDeleteOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskDeleteOutput ** outData); - -// Image_Disk_Delete_DM -typedef struct _vmApiImageDiskDeleteDm { - commonOutputFields common; - int operationId; -} vmApiImageDiskDeleteDmOutput; - -// Parser table for Image_Disk_Delete_DM -static tableLayout Image_Disk_Delete_DM_Layout = { - { APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDiskDeleteDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskDeleteDmOutput, operationId) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char dataSecurityErase, vmApiImageDiskDeleteDmOutput ** outData); - -// Image_Disk_Share -typedef commonOutputFields vmApiImageDiskShareOutput; - -// Parser table for Image_Disk_Share -static tableLayout Image_Disk_Share_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskShareOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskShareOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskShareOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Share(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareOutput ** outData); - -// Image_Disk_Share_DM -typedef commonOutputFields vmApiImageDiskShareDmOutput; - -// Parser table for Image_Disk_Share_DM -static tableLayout Image_Disk_Share_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskShareDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskShareDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Share_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareDmOutput ** outData); - -// Image_Disk_Unshare -typedef commonOutputFields vmApiImageDiskUnshareOutput; - -// Parser table for Image_Disk_Unshare -static tableLayout Image_Disk_Unshare_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageDiskUnshareOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Unshare(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskUnshareOutput ** outData); - -// Image_Disk_Unshare_DM -typedef commonOutputFields vmApiImageDiskUnshareDmOutput; - -// Parser table for Image_Disk_Unshare_DM -static tableLayout Image_Disk_Unshare_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageDiskUnshareDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageDiskUnshareDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageDiskUnshareDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageDiskUnshareDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Disk_Unshare_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - vmApiImageDiskUnshareDmOutput ** outData); - -// Image_IPL_Delete_DM -typedef commonOutputFields vmApiImageIplDeleteDmOutput; - -// Parser table for IMAGE_IPL_Delete_DM -static tableLayout Image_IPL_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageIplDeleteDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplDeleteDmOutput ** outData); - -// Image_IPL_Device_Query -typedef struct _vmApiImageIplDeviceQueryOutput { - commonOutputFields common; - char * iplDevice; -} vmApiImageIplDeviceQueryOutput; - -// Parser table for Image_IPL_Device_Query -static tableLayout Image_IPL_Device_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageIplDeviceQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, - common.reasonCode) }, { APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplDeviceQueryOutput, iplDevice) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Device_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, vmApiImageIplDeviceQueryOutput ** outData); - -// Image_IPL_Query_DM -typedef struct _vmApiImageIplQueryDm { - commonOutputFields common; - char * savedSystem; - char * loadParameter; - char * parameters; -} vmApiImageIplQueryDmOutput; - -// Parser table for Image_IPL_Query_DM -static tableLayout Image_IPL_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageIplQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, common.reasonCode) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, savedSystem) }, { - APITYPE_STRING_LEN, 0, 10, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, loadParameter) }, { - APITYPE_STRING_LEN, 0, 64, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplQueryDmOutput, parameters) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplQueryDmOutput ** outData); - -// Image_IPL_Set_DM -typedef commonOutputFields vmApiImageIplSetDmOutput; - -// Parser table for Image_IPL_Set_DM -static tableLayout Image_IPL_Set_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageIplSetDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageIplSetDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageIplSetDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageIplSetDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_IPL_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * savedSystem, char * loadParameter, - char * parameterString, vmApiImageIplSetDmOutput ** outData); - -// Image_Lock_DM -typedef commonOutputFields vmApiImageLockDmOutput; - -// Parser table for Image_Lock_DM -static tableLayout Image_Lock_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageLockDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageLockDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageLockDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageLockDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Lock_DM(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * deviceAddress, vmApiImageLockDmOutput ** outData); - -// Image_Name_Query_DM -typedef struct _vmApiImageName { // Common structure used by Image_Status_Query - char * imageName; -} vmApiImageName; - -typedef struct _vmApiImageNameQueryDm { - commonOutputFields common; - int nameCount; - vmApiImageName * nameList; -} vmApiImageNameQueryDmOutput; - -// Parser table for Image_Name_Query_DM -static tableLayout Image_Name_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageNameQueryDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageNameQueryDmOutput, nameList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageNameQueryDmOutput, nameCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageName) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiImageName, imageName) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageNameQueryDmOutput ** outData); - -// Image_Password_Set_DM -typedef commonOutputFields vmApiImagePasswordSetDmOutput; - -// Parser table for Image_Password_Set_DM -static tableLayout Image_Password_Set_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImagePasswordSetDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImagePasswordSetDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImagePasswordSetDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImagePasswordSetDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Password_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imagePasswordLength, char * imagePassword, - vmApiImagePasswordSetDmOutput ** outData); - -// Image_Query_Activate_Time -typedef struct _vmApiImageQueryActivateTime { - commonOutputFields common; - char * imageName; - char * activationDate; - char * activationTime; -} vmApiImageQueryActivateTimeOutput; - -// Parser table for Image_Query_Activate_Time -static tableLayout Image_Query_Activate_Time_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageQueryActivateTimeOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, common.reasonCode) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, imageName) }, { - APITYPE_STRING_LEN, 8, 10, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, activationDate) }, { - APITYPE_STRING_LEN, 8, 8, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryActivateTimeOutput, activationTime) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Query_Activate_Time(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dateFormat, - vmApiImageQueryActivateTimeOutput ** outData); - -// Image_Query_DM -typedef struct _vmApiImageQueryDm { - commonOutputFields common; - int imageRecordCount; - vmApiImageRecord * imageRecordList; -} vmApiImageQueryDmOutput; - -// Parser table for Image_Activate -static tableLayout Image_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageQueryDmOutput, imageRecordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageQueryDmOutput, imageRecordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageRecord) }, { APITYPE_CHARBUF_LEN, 1, 80, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageRecord, imageRecord) }, - { APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageRecord, imageRecordLength) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageQueryDmOutput ** outData, - bool readFromCache); - -// Image_Recycle -typedef struct _vmApiImageRecycle { - commonOutputFields common; - int recycled; - int notRecycled; - int failingArrayCount; - vmApiImageFailing * failList; -} vmApiImageRecycleOutput; - -// Parser table for Image_Recycle -static tableLayout Image_Recycle_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageRecycleOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageRecycleOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, common.reasonCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageRecycleOutput, recycled) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, - notRecycled) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageRecycleOutput, failList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageRecycleOutput, - failingArrayCount) }, { APITYPE_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiImageFailing) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, imageName) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageFailing, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageFailing, reasonCode) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smImage_Recycle(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageRecycleOutput ** outData); - -// Image_Replace_DM -typedef commonOutputFields vmApiImageReplaceDmOutput; - -// Parser table for Image_Replace_DM -static tableLayout Image_Replace_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageReplaceDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageReplaceDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageReplaceDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageReplaceDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imageRecordArrayCount, - vmApiImageRecord * imageRecordList, - vmApiImageReplaceDmOutput ** outData); - -// Image_SCSI_Characteristics_Define_DM -typedef commonOutputFields vmApiImageScsiCharacteristicsDefineDmOutput; - -// Parser table for Image_SCSI_Characteristics_Define_DM -static tableLayout Image_SCSI_Characteristics_Define_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageScsiCharacteristicsDefineDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsDefineDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_SCSI_Characteristics_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * bootProgram, char * brLba, char * lun, char * portName, - char scpDatatype, int scpDataLength, char * scpData, - vmApiImageScsiCharacteristicsDefineDmOutput ** outData); - -// Image_SCSI_Characteristics_Query_DM -typedef struct _vmApiImageScsiCharacteristicsQueryDm { - commonOutputFields common; - char * bootProgramNumber; - char * br_LBA; - char * lun; - char * port; - char * scpData; - int scpDataLength; -} vmApiImageScsiCharacteristicsQueryDmOutput; - -// Parser table for Image_SCSI_Characteristics_Query_DM -static tableLayout - Image_SCSI_Characteristics_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageScsiCharacteristicsQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - common.reasonCode) }, { APITYPE_STRING_LEN, 0, 6, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - bootProgramNumber) }, { APITYPE_STRING_LEN, 0, 16, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, br_LBA) }, - { APITYPE_STRING_LEN, 0, 16, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageScsiCharacteristicsQueryDmOutput, - lun) }, { APITYPE_STRING_LEN, 0, 16, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - port) }, { APITYPE_CHARBUF_LEN, 0, 4102, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - scpData) }, { APITYPE_CHARBUF_COUNT, 0, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageScsiCharacteristicsQueryDmOutput, - scpDataLength) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smImage_SCSI_Characteristics_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageScsiCharacteristicsQueryDmOutput ** outData); - -// Image_Status_Query -typedef struct _vmApiImageStatusQuery { - commonOutputFields common; - int imageNameCount; - vmApiImageName * imageNameList; // common structure with Image_Name_Query_DM -} vmApiImageStatusQueryOutput; - -// Parser table for Image_Status_Query -static tableLayout Image_Status_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageStatusQueryOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageStatusQueryOutput, imageNameList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageStatusQueryOutput, imageNameCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageName) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiImageName, imageName) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Status_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageStatusQueryOutput ** outData); - -// Image_Unlock_DM -typedef commonOutputFields vmApiImageUnlockDmOutput; - -// Parser table for Image_Unlock_DM -static tableLayout Image_Unlock_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageUnlockDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageUnlockDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageUnlockDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageUnlockDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Unlock_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * deviceAddress, - vmApiImageUnlockDmOutput ** outData); - -// Image_Volume_Add -typedef commonOutputFields vmApiImageVolumeAddOutput; - -// Parser table for Image_Volume_Add -static tableLayout Image_Volume_Add_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageVolumeAddOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeAddOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiImageVolumeAddOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiImageVolumeAddOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeAddOutput ** outData); - -// Image_Volumne_Delete -typedef commonOutputFields vmApiImageVolumeDeleteOutput; - -// Parser table for Image_Volume_Delete -static tableLayout Image_Volume_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiImageVolumeDeleteOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeDeleteOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeDeleteOutput ** outData); - -// Image_Volume_Space_Define_DM -typedef commonOutputFields vmApiImageVolumeSpaceDefineDmOutput; - -// Parser table for Image_Volume_Space_Define_DM -static tableLayout Image_Volume_Space_Define_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageVolumeSpaceDefineDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceDefineDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceDefineDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceDefineDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Space_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, int startCyl, int regionSize, char * groupName, - char deviceType, vmApiImageVolumeSpaceDefineDmOutput ** outData); - -// Image_Volume_Space_Query_DM -typedef struct _vmApiImageVolumeSpaceQueryDm { - commonOutputFields common; - int recordCount; - vmApiImageRecord * recordList; // Common structure with Image_Query_DM -} vmApiImageVolumeSpaceQueryDmOutput; - -// Parser table for Image_Volumn_Space_Query_DM -static tableLayout Image_Volume_Space_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageVolumeSpaceQueryDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceQueryDmOutput, recordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiImageVolumeSpaceQueryDmOutput, recordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiImageRecord) }, { APITYPE_CHARBUF_LEN, 1, -1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiImageRecord, imageRecord) }, - { APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiImageRecord, imageRecordLength) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smImage_Volume_Space_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char queryType, char entryType, - char * entryNames, vmApiImageVolumeSpaceQueryDmOutput ** outData); - -// Image_Volume_Space_Remove_DM -typedef commonOutputFields vmApiImageVolumeSpaceRemoveDmOutput; - -// Parser table for Image_Volume_Space_Remove_DM -static tableLayout Image_Volume_Space_Remove_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiImageVolumeSpaceRemoveDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceRemoveDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceRemoveDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiImageVolumeSpaceRemoveDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smImage_Volume_Space_Remove_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, char * groupName, - vmApiImageVolumeSpaceRemoveDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiName.h b/zhcp/zhcp-build/resource_access/include/vmapiName.h deleted file mode 100644 index 77a4ea5..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiName.h +++ /dev/null @@ -1,102 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_NAME_H -#define _VMAPI_NAME_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Name_List_Add -typedef commonOutputFields vmApiNameListAddOutput; - -int smName_List_Add(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * name, vmApiNameListAddOutput ** outData); - -// Parser table for Name_List_Add -static tableLayout Name_List_Add_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListAddOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListAddOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListAddOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListAddOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Name_List_Destroy -typedef commonOutputFields vmApiNameListDestroyOutput; - -int smName_List_Destroy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListDestroyOutput ** outData); - -// Parser table for Name_List_Destroy -static tableLayout Name_List_Destroy_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListDestroyOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListDestroyOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListDestroyOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListDestroyOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Name_List_Query -typedef struct _vmApiNameList { // Common structure for Name_List_Query, - char * imageName; -} vmApiNameList; - -typedef struct _vmApiNameListQuery { - commonOutputFields common; - int nameArrayCount; - vmApiNameList * nameList; -} vmApiNameListQueryOutput; - -int smName_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListQueryOutput ** outData); - -// Parser table for Name_List_Query -static tableLayout Name_List_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListQueryOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListQueryOutput, nameList) }, { APITYPE_ARRAY_STRUCT_COUNT, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListQueryOutput, - nameArrayCount) }, { APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiNameList) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiNameList, imageName) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Name_List_Remove -typedef commonOutputFields vmApiNameListRemoveOutput; - -int smName_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * name, - vmApiNameListRemoveOutput ** outData); - -// Parser table for Name_List_Remove -static tableLayout Name_List_Remove_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiNameListRemoveOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiNameListRemoveOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiNameListRemoveOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiNameListRemoveOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiProfile.h b/zhcp/zhcp-build/resource_access/include/vmapiProfile.h deleted file mode 100644 index f8e442f..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiProfile.h +++ /dev/null @@ -1,111 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_PROFILE_H -#define _VMAPI_PROFILE_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Profile_Create_DM -// Common structure to hold one profile record (used on profile_query output, input for Create and Replace) -typedef struct _vmApiProfileRecord { - int profileRecordLength; - char * recordData; -} vmApiProfileRecord; - -typedef commonOutputFields vmApiProfileCreateDmOutput; - -// Parser table for Profile_Create_DM -static tableLayout Profile_Create_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileCreateDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileCreateDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiProfileCreateDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiProfileCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smProfile_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileCreateDmOutput ** outData); - -// Profile_Delete_DM -typedef commonOutputFields vmApiProfileDeleteDmOutput; - -// Parser table for Profile_Delete_DM -static tableLayout Profile_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileDeleteDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiProfileDeleteDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiProfileDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smProfile_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileDeleteDmOutput ** outData); - -// Profile_Query_DM -typedef struct _vmApiProfileQueryDmOutput { - commonOutputFields common; - int profileRecordCount; - vmApiProfileRecord * profileRecordList; -} vmApiProfileQueryDmOutput; - -// Parser table for Profile_Query_DM -static tableLayout Profile_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileQueryDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileQueryDmOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiProfileQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiProfileQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileQueryDmOutput, profileRecordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiProfileQueryDmOutput, profileRecordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiProfileRecord) }, - { APITYPE_CHARBUF_LEN, 0, 80, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiProfileRecord, recordData) }, { APITYPE_CHARBUF_COUNT, 0, - 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiProfileRecord, - profileRecordLength) }, { APITYPE_END_OF_TABLE, 0, 0, - 0, 0 } }; - -int smProfile_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileQueryDmOutput ** outData); - -// Profile_Replace_DM -typedef commonOutputFields vmApiProfileReplaceDmOutput; - -// Parser table for Profile_Replace_DM -static tableLayout Profile_Replace_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiProfileReplaceDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileReplaceDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileReplaceDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiProfileReplaceDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smProfile_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileReplaceDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiPrototype.h b/zhcp/zhcp-build/resource_access/include/vmapiPrototype.h deleted file mode 100644 index 33a9378..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiPrototype.h +++ /dev/null @@ -1,148 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_PROTOTYPE_H -#define _VMAPI_PROTOTYPE_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Prototype_Create_DM -typedef struct _vmApiPrototypeRecordList { // Common structure for Prototype_Query_DM, create, replace - char * recordName; - int recordNameLength; -} vmApiPrototypeRecordList; - -typedef commonOutputFields vmApiPrototypeCreateDmOutput; - -int smPrototype_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeCreateDmOutput ** outData); - -// Parser table for Prototype_Create_DM -static tableLayout Prototype_Create_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiPrototypeCreateDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeCreateDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeCreateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Delete_DM -typedef commonOutputFields vmApiPrototypeDeleteDmOutput; - -int smPrototype_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeDeleteDmOutput ** outData); - -// Parser table for Prototype_Delete_DM -static tableLayout Prototype_Delete_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiPrototypeDeleteDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeDeleteDmOutput, requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Name_Query_DM -typedef struct _vmApiPrototypeNameList { // Common structure for Prototype_Name_Query_DM, - char * name; -} vmApiPrototypeNameList; - -typedef struct _vmApiPrototypeNameQueryDm { - commonOutputFields common; - int nameArrayCount; - vmApiPrototypeNameList * nameList; -} vmApiPrototypeNameQueryDmOutput; - -int smPrototype_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeNameQueryDmOutput ** outData); - -// Parser table for Prototype_Name_Query_DM -static tableLayout Prototype_Name_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiPrototypeNameQueryDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiPrototypeNameQueryDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiPrototypeNameQueryDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiPrototypeNameQueryDmOutput, - common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeNameQueryDmOutput, nameList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiPrototypeNameQueryDmOutput, nameArrayCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiPrototypeNameList) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiPrototypeNameList, name) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Query_DM -typedef struct _vmApiPrototypeQueryDm { - commonOutputFields common; - int recordArrayCount; - vmApiPrototypeRecordList * recordList; -} vmApiPrototypeQueryDmOutput; - -int smPrototype_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeQueryDmOutput ** outData); - -// Parser table for Prototype_Query_DM -static tableLayout Prototype_Query_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiPrototypeQueryDmOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeQueryDmOutput, recordList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiPrototypeQueryDmOutput, recordArrayCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiPrototypeRecordList) }, { APITYPE_CHARBUF_LEN, 1, - 72, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiPrototypeRecordList, recordName) }, { - APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiPrototypeRecordList, recordNameLength) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Prototype_Replace_DM -typedef commonOutputFields vmApiPrototypeReplaceDmOutput; - -int smPrototype_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeReplaceDmOutput ** outData); - -// Parser table for Prototype_Replace_DM -static tableLayout Prototype_Replace_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiPrototypeReplaceDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiPrototypeReplaceDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiPrototypeReplaceDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiPrototypeReplaceDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiQuery.h b/zhcp/zhcp-build/resource_access/include/vmapiQuery.h deleted file mode 100644 index a7f7fe4..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiQuery.h +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_QUERY_H -#define _VMAPI_QUERY_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Query_API_Functional_Level -typedef commonOutputFields vmApiQueryApiFunctionalLevelOutput; - -int smQuery_API_Functional_Level(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiQueryApiFunctionalLevelOutput ** outData); - -// Parser table for Query_API_Functional_Level -static tableLayout Query_API_Functional_Level_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiQueryApiFunctionalLevelOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryApiFunctionalLevelOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryApiFunctionalLevelOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryApiFunctionalLevelOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Query_Asychronous_Operation_DM -typedef commonOutputFields vmApiQueryAsynchronousOperationDmOutput; - -int smQuery_Asychronous_Operation_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operationId, vmApiQueryAsynchronousOperationDmOutput ** outData); - -// Parser table for Query_Asychronous_Operation_DM -static tableLayout Query_Asynchronous_Operation_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiQueryAsynchronousOperationDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryAsynchronousOperationDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryAsynchronousOperationDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryAsynchronousOperationDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Query_Directory_Manager_Level_DM -typedef struct _vmApiQueryDirectoryManagerLevelDm { - commonOutputFields common; - char * directoryManagerLevel; - int directoryManagerLevelLength; -} vmApiQueryDirectoryManagerLevelDmOutput; - -// Parser table for Query_Directory_Manager_Level_DM -static tableLayout - Query_Directory_Manager_Level_DM_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiQueryDirectoryManagerLevelDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - common.reasonCode) }, { APITYPE_CHARBUF_LEN, 1, 100, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - directoryManagerLevel) }, { APITYPE_CHARBUF_COUNT, 1, - 100, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiQueryDirectoryManagerLevelDmOutput, - directoryManagerLevelLength) }, { APITYPE_END_OF_TABLE, - 0, 0, 0, 0 } }; - -int smQuery_Directory_Manager_Level_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiQueryDirectoryManagerLevelDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiShared.h b/zhcp/zhcp-build/resource_access/include/vmapiShared.h deleted file mode 100644 index 767ea0f..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiShared.h +++ /dev/null @@ -1,214 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_SHARED_H -#define _VMAPI_SHARED_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Shared_Memory_Access_Add_DM -typedef commonOutputFields vmApiSharedMemoryAccessAddDmOutput; - -// Parser table for Shared_Memory_Access_Add_DM -static tableLayout Shared_Memory_Access_Add_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryAccessAddDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessAddDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessAddDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessAddDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Access_Add_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryAccessAddDmOutput ** outData); - -// Shared_Memory_Access_Query_DM -typedef struct _vmApiSharedMemorySegmentName { // Common structure used by Shared_Memory_Access_Query - char * memorySegmentName; -} vmApiSharedMemorySegmentName; - -typedef struct _vmApiSharedMemoryAccessQueryDm { - commonOutputFields common; - int memorySegmentNameCount; - vmApiSharedMemorySegmentName * memorySegmentNameList; -} vmApiSharedMemoryAccessQueryDmOutput; - -// Parser table for Shared_Memory_Access_Query_DM -static tableLayout Shared_Memory_Access_Query_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryAccessQueryDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessQueryDmOutput, memorySegmentNameList) }, - { APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSharedMemoryAccessQueryDmOutput, - memorySegmentNameCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiSharedMemorySegmentName) }, { APITYPE_STRING_LEN, - 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentName, memorySegmentName) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smShared_Memory_Access_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessQueryDmOutput ** outData); - -// Shared_Memory_Access_Remove_DM -typedef commonOutputFields vmApiSharedMemoryAccessRemoveDmOutput; - -// Parser table for Shared_Memory_Access_Remove_DM -static tableLayout Shared_Memory_Access_Remove_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryAccessRemoveDmOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessRemoveDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessRemoveDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryAccessRemoveDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Access_Remove_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessRemoveDmOutput ** outData); - -// Shared_Memory_Create -typedef commonOutputFields vmApiSharedMemoryCreateOutput; - -// Parser table for Shared_Memory_Create -static tableLayout Shared_Memory_Create_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSharedMemoryCreateOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSharedMemoryCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int - smShared_Memory_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - unsigned long long beginPage, unsigned long long endPage, - char pageAccessDescriptor, char memoryAttributes, - char * memoryAccessIdentifier, - vmApiSharedMemoryCreateOutput ** outData); - -// Shared_Memory_Delete -typedef commonOutputFields vmApiSharedMemoryDeleteOutput; - -// Parser table for Shared_Memory_Delete -static tableLayout Shared_Memory_Delete_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSharedMemoryDeleteOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSharedMemoryDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryDeleteOutput ** outData); - -// Shared_Memory_Query -typedef struct _vmApiSharedPageRangeInfo { - unsigned long long beginPage; - unsigned long long endPage; - char pageAccessDescriptor; -} vmApiSharedPageRangeInfo; - -typedef struct _vmApiSharedMemorySegmentInfo { - char * memorySegmentName; - char memorySegmentStatus; - int pageRangeCount; - vmApiSharedPageRangeInfo * pageRangeList; -} vmApiSharedMemorySegmentInfo; - -typedef struct _vmApiSharedMemoryQueryOutput { - commonOutputFields common; - int memorySegmentCount; - vmApiSharedMemorySegmentInfo * memorySegmentInfoList; -} vmApiSharedMemoryQueryOutput; - -// Parser table for Shared_Memory_Query -static tableLayout Shared_Memory_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiSharedMemoryQueryOutput) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, common.reasonCode) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryQueryOutput, memorySegmentInfoList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSharedMemoryQueryOutput, memorySegmentCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiSharedMemorySegmentInfo) }, { APITYPE_STRING_LEN, - 1, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentInfo, memorySegmentName) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentInfo, memorySegmentStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiSharedMemorySegmentInfo, pageRangeList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiSharedMemorySegmentInfo, pageRangeCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_2, NEST_LEVEL_2, - sizeof(vmApiSharedPageRangeInfo) }, { APITYPE_INT8, 8, 8, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiSharedPageRangeInfo, - beginPage) }, { APITYPE_INT8, 8, 8, STRUCT_INDX_2, - NEST_LEVEL_2, offsetof(vmApiSharedPageRangeInfo, endPage) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiSharedPageRangeInfo, pageAccessDescriptor) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smShared_Memory_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryQueryOutput ** outData); - -// Shared_Memory_Replace -typedef commonOutputFields vmApiSharedMemoryReplaceOutput; - -// Parser table for Shared_Memory_Replace -static tableLayout Shared_Memory_Replace_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiSharedMemoryReplaceOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSharedMemoryReplaceOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSharedMemoryReplaceOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSharedMemoryReplaceOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smShared_Memory_Replace(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - char * memoryAccessIdentifier, - vmApiSharedMemoryReplaceOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiStatic.h b/zhcp/zhcp-build/resource_access/include/vmapiStatic.h deleted file mode 100644 index b26ef4f..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiStatic.h +++ /dev/null @@ -1,74 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_STATIC_H -#define _VMAPI_STATIC_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Static_Image_Changes_Activate_DM -typedef commonOutputFields vmApiStaticImageChangesActivateDmOutput; - -// Parser table for Static_Image_Changes_Activate_DM -static tableLayout Static_Image_Changes_Activate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiStaticImageChangesActivateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesActivateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesActivateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesActivateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smStatic_Image_Changes_Activate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesActivateDmOutput ** outData); - -// Static_Image_Changes_Deactivate_DM -typedef commonOutputFields vmApiStaticImageChangesDeactivateDmOutput; - -// Parser table for Static_Image_Changes_Deactivate_DM -static tableLayout Static_Image_Changes_Deactivate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiStaticImageChangesDeactivateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesDeactivateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesDeactivateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesDeactivateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smStatic_Image_Changes_Deactivate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesDeactivateDmOutput ** outData); - -// Static_Image_Changes_Immediate_DM -typedef commonOutputFields vmApiStaticImageChangesImmediateDmOutput; - -// Parser table for Static_Image_Changes_Immediate_DM -static tableLayout Static_Image_Changes_Immediate_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiStaticImageChangesImmediateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesImmediateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesImmediateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiStaticImageChangesImmediateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smStatic_Image_Changes_Immediate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesImmediateDmOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiSystem.h b/zhcp/zhcp-build/resource_access/include/vmapiSystem.h deleted file mode 100644 index 0b550c7..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiSystem.h +++ /dev/null @@ -1,115 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_SYSTEM_H -#define _VMAPI_SYSTEM_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// IPaddr_Get -// This is here because it is VM related vs userid related -typedef struct _vmApiIPAddr_GetOutput { - commonOutputFields common; - int ipCount; - vmApiCStringInfo * ipList; // should only be one item in the list -} vmApiIPaddrGetOutput; - -// Parser table for IPaddr_Get -static tableLayout IPaddr_Get_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiIPaddrGetOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiIPaddrGetOutput, common.requestId) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiIPaddrGetOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiIPaddrGetOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiIPaddrGetOutput, ipList) }, { APITYPE_C_STR_ARRAY_COUNT, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiIPaddrGetOutput, ipCount) }, - { APITYPE_C_STR_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiCStringInfo) }, { APITYPE_C_STR_PTR, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiCStringInfo, - vmapiString) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smIPaddr_Get(struct _VmApiInternalContext* vmapiContextP, - vmApiIPaddrGetOutput ** outData); - -// System_Info_Query -typedef struct _vmApiSystemInfoQueryOutput { - commonOutputFields common; - char * timezone; - char * time; - char * vmVersion; - char * cpGenTime; - char * cpIplTime; - char * realStorageSize; -} vmApiSystemInfoQueryOutput; - -// Parser table for Virtual_Network_Query_OSA -static tableLayout System_Info_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiSystemInfoQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, common.reasonCode) }, - -{ APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, timezone) }, - { APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, time) }, { APITYPE_C_STR_PTR, 4, - 80, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemInfoQueryOutput, vmVersion) }, { - APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSystemInfoQueryOutput, cpGenTime) }, { - APITYPE_C_STR_PTR, 4, 43, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSystemInfoQueryOutput, cpIplTime) }, { - APITYPE_C_STR_PTR, 4, 80, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiSystemInfoQueryOutput, realStorageSize) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smSystem_Info_Query(struct _VmApiInternalContext* vmapiContextP, - vmApiSystemInfoQueryOutput ** outData); - -// System_IO_Query -typedef struct _vmApiSystemIoQueryOutput { - commonOutputFields common; - int chipidCount; - vmApiCStringInfo * chipidList; -} vmApiSystemIoQueryOutput; - -// Parser table for Virtual_Network_Query_OSA -static tableLayout System_IO_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, sizeof(vmApiSystemIoQueryOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemIoQueryOutput, common.requestId) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSystemIoQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiSystemIoQueryOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiSystemIoQueryOutput, chipidList) }, { APITYPE_C_STR_ARRAY_COUNT, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiSystemIoQueryOutput, - chipidCount) }, { APITYPE_C_STR_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiCStringInfo) }, { - APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiCStringInfo, vmapiString) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smSystem_IO_Query(struct _VmApiInternalContext* vmapiContextP, - char * realDeviceAddress, vmApiSystemIoQueryOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiVMRM.h b/zhcp/zhcp-build/resource_access/include/vmapiVMRM.h deleted file mode 100644 index eaa3b6e..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiVMRM.h +++ /dev/null @@ -1,137 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_VMRM_H -#define _VMAPI_VMRM_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// VMRM_Configuration_Query -typedef struct _vmApiVmrmConfigurationQuery { - commonOutputFields common; - char * configurationFile; - int configurationFileLength; -} vmApiVmrmConfigurationQueryOutput; - -// Parser table for VMRM_Configuration_Query -static tableLayout VMRM_Configuration_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVmrmConfigurationQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, common.reasonCode) }, { - APITYPE_CHARBUF_LEN, 1, -1, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, configurationFile) }, { - APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationQueryOutput, configurationFileLength) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVMRM_Configuration_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - vmApiVmrmConfigurationQueryOutput ** outData); - -// VMRM_Configuration_Update -typedef struct _vmApiVmrmConfigurationLogRecordInfo { - char * logRecord; - int logRecordLength; -} vmApiVmrmConfigurationLogRecordInfo; - -typedef struct _vmApiVmrmConfigurationUpdateOutput { - commonOutputFields common; - int logRecordCount; - vmApiVmrmConfigurationLogRecordInfo * logRecordInfoList; -} vmApiVmrmConfigurationUpdateOutput; - -// Parser table for VMRM_Configuration_Update -static tableLayout VMRM_Configuration_Update_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVmrmConfigurationUpdateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmConfigurationUpdateOutput, logRecordInfoList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVmrmConfigurationUpdateOutput, logRecordCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVmrmConfigurationLogRecordInfo) }, { APITYPE_CHARBUF_LEN, - 1, -1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmConfigurationLogRecordInfo, logRecord) }, { - APITYPE_CHARBUF_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmConfigurationLogRecordInfo, logRecordLength) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVMRM_Configuration_Update(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - char syncheckOnly, int updateFileLength, char * updateFile, - vmApiVmrmConfigurationUpdateOutput ** outData); - -// VMRM_Measurement_Query -typedef struct _vmApiVmrmMeasurementQueryWorkloadInfo { - char * workloadRecord; - int workloadRecordLength; -} vmApiVmrmMeasurementQueryWorkloadInfo; - -typedef struct _vmApiVmrmMeasurementQueryOutput { - commonOutputFields common; - char * queryTimestamp; - char * fileName; - char * fileTimestamp; - int workloadCount; - vmApiVmrmMeasurementQueryWorkloadInfo * workloadInfoList; -} vmApiVmrmMeasurementQueryOutput; - -// Parser table for VMRM_Measurement_Query -static tableLayout VMRM_Measurement_Query_Layout = { { APITYPE_BASE_STRUCT_LEN, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVmrmMeasurementQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - common.requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - common.returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - common.reasonCode) }, { APITYPE_STRING_LEN, 1, 17, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, - queryTimestamp) }, { APITYPE_STRING_LEN, 1, 20, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof(vmApiVmrmMeasurementQueryOutput, fileName) }, { - APITYPE_STRING_LEN, 1, 17, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmMeasurementQueryOutput, fileTimestamp) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVmrmMeasurementQueryOutput, workloadInfoList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVmrmMeasurementQueryOutput, workloadCount) }, { - APITYPE_NOBUFFER_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVmrmMeasurementQueryWorkloadInfo) }, { APITYPE_CHARBUF_LEN, - 1, 35, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmMeasurementQueryWorkloadInfo, workloadRecord) }, { - APITYPE_CHARBUF_COUNT, 1, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVmrmMeasurementQueryWorkloadInfo, workloadRecordLength) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVMRM_Measurement_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiVmrmMeasurementQueryOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/vmapiVirtual.h b/zhcp/zhcp-build/resource_access/include/vmapiVirtual.h deleted file mode 100644 index 1739b36..0000000 --- a/zhcp/zhcp-build/resource_access/include/vmapiVirtual.h +++ /dev/null @@ -1,782 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#ifndef _VMAPI_VIRTUAL_H -#define _VMAPI_VIRTUAL_H -#include "smPublic.h" -#include "smapiTableParser.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Virtual_Channel_Connection_Create -typedef commonOutputFields vmApiVirtualChannelConnectionCreateOutput; - -// Parser table for Virtual_Channel_Connection_Create -static tableLayout Virtual_Channel_Connection_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionCreateOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - char * coupledImageDeviceNumber, - vmApiVirtualChannelConnectionCreateOutput ** outData); - -// Virtual_Channel_Connection_Create_DM -typedef commonOutputFields vmApiVirtualChannelConnectionCreateDmOutput; - -// Parser table for Virtual_Channel_Connection_Create_DM -static tableLayout Virtual_Channel_Connection_Create_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionCreateDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - vmApiVirtualChannelConnectionCreateDmOutput ** outData); - -// Virtual_Channel_Connection_Delete -typedef commonOutputFields vmApiVirtualChannelConnectionDeleteOutput; - -// Parser table for Virtual_Memory_Access_Add_DM -static tableLayout Virtual_Channel_Connection_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionDeleteOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteOutput ** outData); - -// Virtual_Channel_Connection_Delete_DM -typedef commonOutputFields vmApiVirtualChannelConnectionDeleteDmOutput; - -// Parser table for Virtual_Channel_Connection_Delete_DM -static tableLayout Virtual_Channel_Connection_Delete_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualChannelConnectionDeleteDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualChannelConnectionDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Channel_Connection_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteDmOutput ** outData); - -// Virtual_Network_Adapter_Connect_LAN -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectLanOutput; - -// Parser table for Virtual_Network_Adapter_Connect_LAN -static tableLayout Virtual_Network_Adapter_Connect_LAN_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectLanOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_LAN( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanOutput ** outData); - -// Virtual_Network_Adapter_Connect_LAN_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectLanDmOutput; - -// Parser table for Virtual_Network_Adapter_Connect_LAN_DM -static tableLayout Virtual_Network_Adapter_Connect_LAN_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectLanDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectLanDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_LAN_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanDmOutput ** outData); - -// Virtual_Network_Adapter_Connect_Vswitch -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectVswitchOutput; - -// Parser table for Virtual_Network_Adapter_Connect_Vswitch -static tableLayout Virtual_Network_Adapter_Connect_Vswitch_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectVswitchOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchOutput, returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchOutput, reasonCode) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_Vswitch( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchOutput ** outData); - -// Virtual_Network_Adapter_Connect_Vswitch_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterConnectVswitchDmOutput; - -// Parser table for Virtual_Network_Adapter_Connect_Vswitch_DM -static tableLayout - Virtual_Network_Adapter_Connect_Vswitch_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterConnectVswitchDmOutput) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchDmOutput, - requestId) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchDmOutput, - returnCode) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_0, - NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterConnectVswitchDmOutput, - reasonCode) }, { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Connect_Vswitch_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchDmOutput ** outData); - -// Virtual_Network_Adapter_Create -typedef commonOutputFields vmApiVirtualNetworkAdapterCreateOutput; - -// Parser table for Virtual_Network_Adapter_Create -static tableLayout Virtual_Network_Adapter_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int - smVirtual_Network_Adapter_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, - int networkAdapterDevices, char * channelPathId, - vmApiVirtualNetworkAdapterCreateOutput ** outData); - -// Virtual_Network_Adapter_Create_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterCreateDmOutput; - -// Parser table for Virtual_Network_Adapter_Create_DM -static tableLayout Virtual_Network_Adapter_Create_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterCreateDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterCreateDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, int networkAdapterDevices, - char * channelPathId, char * macId, - vmApiVirtualNetworkAdapterCreateDmOutput ** outData); - -// Virtual_Network_Adapter_Delete -typedef commonOutputFields vmApiVirtualNetworkAdapterDeleteOutput; - -// Parser table for Virtual_Network_Adapter_Delete -static tableLayout Virtual_Network_Adapter_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteOutput ** outData); - -// Virtual_Network_Adapter_Delete_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterDeleteDmOutput; - -// Parser table for Virtual_Network_Adapter_Delete_DM -static tableLayout Virtual_Network_Adapter_Delete_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDeleteDmOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDeleteDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteDmOutput ** outData); - -// Virtual_Network_Adapter_Disconnect -typedef commonOutputFields vmApiVirtualNetworkAdapterDisconnectOutput; - -// Parser table for Virtual_Network_Adapter_Disconnect -static tableLayout Virtual_Network_Adapter_Disconnect_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDisconnectOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Disconnect( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectOutput ** outData); - -// Virtual_Network_Adapter_Disconnect_DM -typedef commonOutputFields vmApiVirtualNetworkAdapterDisconnectDmOutput; - -// Parser table for Virtual_Network_Adapter_Disconnect_DM -static tableLayout Virtual_Network_Adapter_Disconnect_DM_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterDisconnectDmOutput) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectDmOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectDmOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterDisconnectDmOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Adapter_Disconnect_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectDmOutput ** outData); - -// Virtual_Network_Adapter_Query -typedef struct _vmApiVirtualNetworkAdapter { - char * imageDeviceNumber; - char adapterType; - int networkAdapterDevices; - char adapterStatus; - char * lanOwner; - char * lanName; -} vmApiVirtualNetworkAdapter; - -typedef struct _vmApiVirtualNetworkAdapterQueryOutput { - commonOutputFields common; - int adapterArrayCount; - vmApiVirtualNetworkAdapter * adapterList; -} vmApiVirtualNetworkAdapterQueryOutput; - -int smVirtual_Network_Adapter_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterQueryOutput ** outData); - -// Parser table for Virtual_Network_Adapter_Query -static tableLayout Virtual_Network_Adapter_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkAdapterQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkAdapterQueryOutput, adapterList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkAdapterQueryOutput, adapterArrayCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVirtualNetworkAdapter) }, { APITYPE_STRING_LEN, 1, 4, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVirtualNetworkAdapter, - imageDeviceNumber) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVirtualNetworkAdapter, adapterType) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkAdapter, networkAdapterDevices) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkAdapter, adapterStatus) }, { - APITYPE_STRING_LEN, 0, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkAdapter, lanOwner) }, { APITYPE_STRING_LEN, - 0, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVirtualNetworkAdapter, - lanName) }, { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -// Virtual_Network_LAN_Access -typedef commonOutputFields vmApiVirtualNetworkLanAccessOutput; - -// Parser table for Virtual_Network_LAN_Access -static tableLayout Virtual_Network_LAN_Access_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanAccessOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_LAN_Access(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - char * accessOption, char * accessGrantName, char * promiscuity, - vmApiVirtualNetworkLanAccessOutput ** outData); - -// Virtual_Network_LAN_Access_Query -typedef struct _vmApiVirtualNetworkLanAccessQueryOutput { - commonOutputFields common; - int lanAccessCount; - vmApiCStringInfo * lanAccessList; -} vmApiVirtualNetworkLanAccessQueryOutput; - -// Parser table for Virtual_Network_LANAccess_Query -static tableLayout Virtual_Network_LAN_Access_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanAccessQueryOutput) }, { APITYPE_INT4, 4, - 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, common.returnCode) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, common.reasonCode) }, - - { APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanAccessQueryOutput, lanAccessList) }, { - APITYPE_C_STR_ARRAY_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkLanAccessQueryOutput, - lanAccessCount) }, { APITYPE_C_STR_STRUCT_LEN, 4, 4, - STRUCT_INDX_1, NEST_LEVEL_1, sizeof(vmApiCStringInfo) }, { - APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiCStringInfo, vmapiString) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_LAN_Access_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * lanName, char * lanOwner, - vmApiVirtualNetworkLanAccessQueryOutput ** outData); - -// Virtual_Network_LAN_Create -typedef commonOutputFields vmApiVirtualNetworkLanCreateOutput; - -// Parser table for Virtual_Network_LAN_Create -static tableLayout Virtual_Network_LAN_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_LAN_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, char lanType,//1,2,3,4 - char transportType, vmApiVirtualNetworkLanCreateOutput ** outData); - -// Virtual_Network_LAN_Delete -typedef commonOutputFields vmApiVirtualNetworkLanDeleteOutput; - -// Parser table for Virtual_Network_LAN_Delete -static tableLayout Virtual_Network_LAN_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_LAN_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanDeleteOutput ** outData); - -// Virtual_Network_LAN_Query -typedef struct _vmApiVirtualNetworkConnectedAdapterInfo { // Common structure with Virtual Network Vswitch Query - char * adapterOwner; - char * imageDeviceNumber; -} vmApiVirtualNetworkConnectedAdapterInfo; - -typedef struct _vmApiVirtualNetworkLanInfo { - char * lanName; - char * lanOwner; - char lanType; - int connectedAdapterCount; - vmApiVirtualNetworkConnectedAdapterInfo * connectedAdapterList; -} vmApiVirtualNetworkLanInfo; - -typedef struct _vmApiVirtualNetworkLanQueryOutput { - commonOutputFields common; - int lanCount; - vmApiVirtualNetworkLanInfo * lanList; -} vmApiVirtualNetworkLanQueryOutput; - -// Parser table for Virtual_Network_LAN_Query -static tableLayout Virtual_Network_LAN_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkLanQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkLanQueryOutput, lanList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkLanQueryOutput, lanCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVirtualNetworkLanInfo) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVirtualNetworkLanInfo, - lanName) }, { APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVirtualNetworkLanInfo, lanOwner) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkLanInfo, lanType) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVirtualNetworkLanInfo, connectedAdapterList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVirtualNetworkLanInfo, connectedAdapterCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_2, NEST_LEVEL_2, - sizeof(vmApiVirtualNetworkConnectedAdapterInfo) }, { - APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiVirtualNetworkConnectedAdapterInfo, adapterOwner) }, { - APITYPE_STRING_LEN, 1, 4, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiVirtualNetworkConnectedAdapterInfo, imageDeviceNumber) }, - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_LAN_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanQueryOutput ** outData); - -// Virtual_Network_Query_LAN -typedef struct _vmApiVirtualNetworkQueryLanOutput { - commonOutputFields common; - int lanCount; - vmApiCStringInfo * lanList; -} vmApiVirtualNetworkQueryLanOutput; - -// Parser table for Virtual_Network_Query_LAN -static tableLayout Virtual_Network_Query_LAN_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkQueryLanOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, lanList) }, { - APITYPE_C_STR_ARRAY_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryLanOutput, lanCount) }, { - APITYPE_C_STR_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiCStringInfo) }, { APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiCStringInfo, vmapiString) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_Query_LAN(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryLanOutput ** outData); - -// Virtual_Network_Query_OSA -typedef struct _vmApiVirtualNetworkQueryOsaOutput { - commonOutputFields common; - int osaCount; - vmApiCStringInfo * osaList; -} vmApiVirtualNetworkQueryOsaOutput; - -// Parser table for Virtual_Network_Query_OSA -static tableLayout Virtual_Network_Query_OSA_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkQueryOsaOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, common.reasonCode) }, - -{ APITYPE_C_STR_ARRAY_PTR, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, osaList) }, { - APITYPE_C_STR_ARRAY_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkQueryOsaOutput, osaCount) }, { - APITYPE_C_STR_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiCStringInfo) }, { APITYPE_C_STR_PTR, 4, 4, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiCStringInfo, vmapiString) }, - -{ APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_Query_OSA(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryOsaOutput ** outData); - -// Virtual_Network_Vswitch_Create -typedef commonOutputFields vmApiVirtualNetworkVswitchCreateOutput; - -// Parser table for Virtual_Network_Vswitch_Create -static tableLayout Virtual_Network_Vswitch_Create_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchCreateOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchCreateOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchCreateOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchCreateOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Vswitch_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char * realDeviceAddress, char * portName, - char * controllerName, char connectionValue, int queueMemoryLimit, - char routingValue, char transportType, int vlanId, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - int nativeVlanId, vmApiVirtualNetworkVswitchCreateOutput ** outData); - -// Virtual_Network_Vswitch_Delete -typedef commonOutputFields vmApiVirtualNetworkVswitchDeleteOutput; - -// Parser table for Virtual_Network_Vswitch_Delete -static tableLayout Virtual_Network_Vswitch_Delete_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchDeleteOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchDeleteOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchDeleteOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchDeleteOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Vswitch_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char updateSystemConfigIndicator, - char * systemConfigName, char * systemConfigType, char * parmDiskOwner, - char * parmDiskNumber, char * parmDiskPassword, - char * altSystemConfigName, char * altSystemConfigType, - char * altParmDiskOwner, char * altParmDiskNumber, - char * altParmDiskPassword, - vmApiVirtualNetworkVswitchDeleteOutput ** outData); - -// Virtual_Network_Vswitch_Query -typedef struct _vmApiConnectedAdapterInfo { - int userVlanId; -} vmApiVlanInfo; - -typedef struct _vmApiAuthorizedUserInfo { - char * grantUserid; - int vlanCount; - vmApiVlanInfo * vlanList; -} vmApiAuthorizedUserInfo; - -typedef struct _vmApiRealDeviceInfo { - int realDeviceAddress; - char * controllerName; - char * portName; - char deviceStatus; - char deviceErrorStatus; -} vmApiRealDeviceInfo; - -typedef struct _vmApiVswitchInfo { - char * switchName; - char transportType; - char portType; - int queueMemoryLimit; - char routingValue; - int vlanId; - int nativeVlanId; - unsigned long long macId; - char grvpRequestAttribute; - char grvpEnabledAttribute; - char switchStatus; - int realDeviceCount; - vmApiRealDeviceInfo * realDeviceList; - int authorizedUserCount; - vmApiAuthorizedUserInfo * authorizedUserList; - int connectedAdapterCount; - vmApiVirtualNetworkConnectedAdapterInfo * connectedAdapterList; // Shares common structure with Virtual network lan query -} vmApiVswitchInfo; - -typedef struct _vmApiVirtualNetworkVswitchQueryOutput { - commonOutputFields common; - int vswitchCount; - vmApiVswitchInfo * vswitchList; -} vmApiVirtualNetworkVswitchQueryOutput; - -// Parser table for Virtual_Network_Vswitch_Query -static tableLayout Virtual_Network_Vswitch_Query_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchQueryOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, common.requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, common.returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, common.reasonCode) }, - -{ APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchQueryOutput, vswitchList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - offsetof(vmApiVirtualNetworkVswitchQueryOutput, vswitchCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - sizeof(vmApiVswitchInfo) }, { APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVswitchInfo, switchName) }, { APITYPE_INT1, - 1, 1, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - transportType) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVswitchInfo, portType) }, { APITYPE_INT4, - 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - queueMemoryLimit) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_1, - NEST_LEVEL_1, offsetof(vmApiVswitchInfo, routingValue) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, vlanId) }, - { APITYPE_INT4, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, nativeVlanId) }, - { APITYPE_INT8, 8, 8, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, macId) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - grvpRequestAttribute) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - grvpEnabledAttribute) }, { APITYPE_INT1, 1, 1, - STRUCT_INDX_1, NEST_LEVEL_1, offsetof(vmApiVswitchInfo, - switchStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, realDeviceList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVswitchInfo, realDeviceCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_2, NEST_LEVEL_2, - sizeof(vmApiRealDeviceInfo) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, - realDeviceAddress) }, { APITYPE_STRING_LEN, 0, 71, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, - controllerName) }, { APITYPE_STRING_LEN, 0, 16, - STRUCT_INDX_2, NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, - portName) }, { APITYPE_INT1, 1, 1, STRUCT_INDX_2, - NEST_LEVEL_2, offsetof(vmApiRealDeviceInfo, deviceStatus) }, { - APITYPE_INT1, 1, 1, STRUCT_INDX_2, NEST_LEVEL_2, offsetof( - vmApiRealDeviceInfo, deviceErrorStatus) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, authorizedUserList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVswitchInfo, authorizedUserCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_3, NEST_LEVEL_2, - sizeof(vmApiAuthorizedUserInfo) }, { APITYPE_STRING_LEN, 1, 8, - STRUCT_INDX_3, NEST_LEVEL_2, offsetof(vmApiAuthorizedUserInfo, - grantUserid) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_3, NEST_LEVEL_2, offsetof( - vmApiAuthorizedUserInfo, vlanList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_3, NEST_LEVEL_2, - offsetof(vmApiAuthorizedUserInfo, vlanCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_4, NEST_LEVEL_3, - sizeof(vmApiVlanInfo) }, { APITYPE_INT4, 4, 4, STRUCT_INDX_4, - NEST_LEVEL_3, offsetof(vmApiVlanInfo, userVlanId) }, - - { APITYPE_ARRAY_LEN, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, offsetof( - vmApiVswitchInfo, connectedAdapterList) }, { - APITYPE_ARRAY_STRUCT_COUNT, 4, 4, STRUCT_INDX_1, NEST_LEVEL_1, - offsetof(vmApiVswitchInfo, connectedAdapterCount) }, { - APITYPE_STRUCT_LEN, 4, 4, STRUCT_INDX_5, NEST_LEVEL_2, - sizeof(vmApiVirtualNetworkConnectedAdapterInfo) }, - { APITYPE_STRING_LEN, 1, 8, STRUCT_INDX_5, NEST_LEVEL_2, offsetof( - vmApiVirtualNetworkConnectedAdapterInfo, adapterOwner) }, { - APITYPE_STRING_LEN, 1, 4, STRUCT_INDX_5, NEST_LEVEL_2, - offsetof(vmApiVirtualNetworkConnectedAdapterInfo, - imageDeviceNumber) }, - - { APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; - -int smVirtual_Network_Vswitch_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, vmApiVirtualNetworkVswitchQueryOutput ** outData); - -// Virtual_Network_Vswitch_Set -typedef commonOutputFields vmApiVirtualNetworkVswitchSetOutput; - -// Parser table for Virtual_Network_Vswitch_Set -static tableLayout Virtual_Network_Vswitch_Set_Layout = { { - APITYPE_BASE_STRUCT_LEN, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, - sizeof(vmApiVirtualNetworkVswitchSetOutput) }, { APITYPE_INT4, 4, 4, - STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchSetOutput, requestId) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchSetOutput, returnCode) }, { - APITYPE_INT4, 4, 4, STRUCT_INDX_0, NEST_LEVEL_0, offsetof( - vmApiVirtualNetworkVswitchSetOutput, reasonCode) }, { - APITYPE_END_OF_TABLE, 0, 0, 0, 0 } }; -int smVirtual_Network_Vswitch_Set(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * switchName, char * grantUserid, - char * userVlanId, char * revokeUserid, char * realDeviceAddress, - char * portName, char * controllerName, char connectionValue, - int queueMemoryLimit, char routingValue, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - char * macId, vmApiVirtualNetworkVswitchSetOutput ** outData); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/zhcp/zhcp-build/resource_access/include/wrapperutils.h b/zhcp/zhcp-build/resource_access/include/wrapperutils.h deleted file mode 100644 index 9dd7dbf..0000000 --- a/zhcp/zhcp-build/resource_access/include/wrapperutils.h +++ /dev/null @@ -1,19 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include -#include "vmapiImage.h" -#include "vmapiVirtual.h" -#include "smPublic.h" -#include "vmapiSystem.h" -#include "vmapiAsynchronous.h" -#include "vmapiAuthorization.h" -#include "vmapiCheckAuthentication.h" -#include "vmapiDirectoryManager.h" -#include "vmapiProfile.h" - -void releaseContext(VmApiInternalContext* context); -void initializeContext(VmApiInternalContext* context); -int isImageNameInvalid(char* imageName); -int isDevNumberInvalid(char* devNumber); -void trim(char * s); diff --git a/zhcp/zhcp-build/resource_access/src/add3390.c b/zhcp/zhcp-build/resource_access/src/add3390.c deleted file mode 100644 index 0612d2d..0000000 --- a/zhcp/zhcp-build/resource_access/src/add3390.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a 3390 (ECKD) disk to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The name of the disk pool from which a disk is to be allocated - * @param $3: The virtual device address for the newly-allocated volume - * @param $4: The mode under which the disk is to be linked by the user - * @param $5: The size of the new disk, in cylinders - * @param $6: The read password - * @param $7: The write password - * @param $8: The multi password - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC < 6 || argC > 9) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* pool = argV[2]; - char* vdev = argV[3]; - int size = atoi(argV[4]); - char* mode = argV[5]; - - // Read password - char* readPw = ""; - if (argC > 7 && argV[6]) - readPw = argV[6]; - - // Write password - char* writePw = ""; - if (argC > 8 && argV[7]) - writePw = argV[7]; - - // Mutli password - // In order to link to a disk, a multi password must be specified - char* multiPw = ""; - if (argC > 9 && argV[8]) - multiPw = argV[8]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Adding disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateDmOutput* output; - - int rc = smImage_Disk_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, "3390", "AUTOG", pool, 1, // Cylinders - size, mode, 1, "", // Do not format disk. Do not give disk a label. - readPw, writePw, multiPw, // Read, write, and multi passwords. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 408 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 4 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/add3390active.c b/zhcp/zhcp-build/resource_access/src/add3390active.c deleted file mode 100644 index fdb4388..0000000 --- a/zhcp/zhcp-build/resource_access/src/add3390active.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a 3390 (ECKD) disk that is defined in a virtual image's directory - * entry to that virtual image's active configuration - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The virtual device address for the newly-allocated volume - * @param $3: The mode under which the disk is to be linked by the user - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - char* mode = argV[3]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Adding disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateOutput * output; - - int rc = smImage_Disk_Create(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, mode, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, - output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/add9336.c b/zhcp/zhcp-build/resource_access/src/add9336.c deleted file mode 100644 index 8cb91ca..0000000 --- a/zhcp/zhcp-build/resource_access/src/add9336.c +++ /dev/null @@ -1,116 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a 9336 (FBA) disk to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The name of the disk pool from which a disk is to be allocated - * @param $3: The virtual device address for the newly-allocated volume - * @param $4: The mode under which the disk is to be linked by the user - * @param $5: Block size (512, 1024, 2048, or 4096) - * @param $6: The size of the new disk, in blocks - * @param $7: The read password - * @param $8: The write password - * @param $9: The multi password - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC < 7 || argC > 10) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* pool = argV[2]; - char* vdev = argV[3]; - char* mode = argV[4]; - int blocksize = atoi(argV[5]); - int size = atoi(argV[6]); - - // Read password - char* readPw = ""; - if (argC > 8 && argV[7]) - readPw = argV[7]; - - // Write password - char* writePw = ""; - if (argC > 9 && argV[8]) - writePw = argV[8]; - - // Mutli password - // In order to link to a disk, a multi password must be specified - char* multiPw = ""; - if (argC > 10 && argV[9]) - multiPw = argV[9]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - int unit; - switch (blocksize) { - case 512: - unit = 2; - break; - case 1024: - unit = 3; - break; - case 2048: - unit = 4; - break; - case 4096: - unit = 5; - break; - default: - printf("Error: Block size must be 512, 1024, 2048, or 4096\n"); - return 1; - } - - printf("Adding disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateDmOutput* output; - - int rc = smImage_Disk_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, "9336", "AUTOG", pool, unit, size, mode, 1, "", // Do not format disk. Do not give disk a label. - readPw, writePw, multiPw, // Read, write, and multi passwords. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/addnic.c b/zhcp/zhcp-build/resource_access/src/addnic.c deleted file mode 100644 index 5697ba5..0000000 --- a/zhcp/zhcp-build/resource_access/src/addnic.c +++ /dev/null @@ -1,85 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Adds a network adapter to a virtual image's directory entry. - * - * @param $1: The z/VM guest for which a NIC is being allocated - * @param $2: The virtual device address of the NIC being allocated - * @param $3: The type of NIC which is to be allocated - * @param $4: The number of VDEV channels associated with this NIC - * - * @return 0 If the NIC was added successfully - * 1 If given invalid parameters - * 2 If the NIC definition failed - */ -int main(int argC, char * argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - char* type = argV[3]; - int devcount = atoi(argV[4]); - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - int typecode; - if (!strcmp(type, "HiperSockets")) { - typecode = 1; - } else if (!strcmp(type, "QDIO")) { - typecode = 2; - } else { - printf("Error: NIC type must be HiperSockets or QDIO\n"); - return 1; - } - - printf("Adding NIC %s to %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterCreateDmOutput* output; - - int rc = smVirtual_Network_Adapter_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, typecode, devcount, "", // Only relevant for a second-level z/OS. - "", // The MAC identifier. - &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/addprocessor.c b/zhcp/zhcp-build/resource_access/src/addprocessor.c deleted file mode 100644 index fb6e5f3..0000000 --- a/zhcp/zhcp-build/resource_access/src/addprocessor.c +++ /dev/null @@ -1,67 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a non-dedicated processor to a virtual image's directory entry. - * - * @param $1: The z/VM guest to which a processor is to be added - * @param $2: The virtual device address for the processor being added - * - * @return 0 If the processor was created - * 1 If given invalid parameters - * 2 If the processor definition failed - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; // Hexedecimal string, 00-3F - - printf("Adding processor %s to %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCpuDefineDmOutput* output; - - int rc = smImage_CPU_Define_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, 0, // Base CPU status unspecified. - "", // The processor identification number. - 1, // Not a dedicated processor. - 0, // Do not specify a cryptographic facility. - &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/addvdisk.c b/zhcp/zhcp-build/resource_access/src/addvdisk.c deleted file mode 100644 index 72feb27..0000000 --- a/zhcp/zhcp-build/resource_access/src/addvdisk.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a v-disk to a virtual image’s directory entry. - * - * @param $1: The name of the guest to which a disk is to be added - * @param $2: The virtual device address for the newly-allocated volume - * @param $3: The size of the new disk, in 512-byte blocks - * - * @return 0 If the disk was added successfully - * 1 If given invalid parameters - * 2 If disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return -1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - int size = atoi(argV[3]); - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Adding V-Disk %s to %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskCreateDmOutput* output; - - int rc = smImage_Disk_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, "FB-512", // Required for V-Disk devices. - "V-DISK", "NONE", // No disk pool (value is ignored). - 2, // Allocation unit is BLK0512. - size, "W", // Writable. - 0, "", // Formatting unspecified, no label. - "", "", "", // Read, write, and multi passwords. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/connectnic2guestlan.c b/zhcp/zhcp-build/resource_access/src/connectnic2guestlan.c deleted file mode 100644 index 58d25e6..0000000 --- a/zhcp/zhcp-build/resource_access/src/connectnic2guestlan.c +++ /dev/null @@ -1,72 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Connect network adapter to a GuestLAN. - * - * @param $1: The user for which a NIC is being connected - * @param $2: The virtual device address of the NIC being connected - * @param $3: The name of the LAN to which the NIC is to be connected - * @param $4: The virtual image owning the GuestLAN segment to be connected - * - * @return 0 If the NIC was added successfully - * 1 If given invalid parameters - * 2 If the NIC could not be connected to the VSwitch - */ -int main(int argC, char * argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - char* lan = argV[3]; - char* owner = argV[4]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image) || isImageNameInvalid(owner)) - return 1; - - printf("Connecting NIC %s to GuestLan %s on %s... ", address, lan, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterConnectVswitchDmOutput* output; - - int rc = smVirtual_Network_Adapter_Connect_LAN_DM(&context, "", 0, "", - image, address, lan, owner, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/connectnic2vswitch.c b/zhcp/zhcp-build/resource_access/src/connectnic2vswitch.c deleted file mode 100644 index b9d04a8..0000000 --- a/zhcp/zhcp-build/resource_access/src/connectnic2vswitch.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Connect network adapter to a VSwitch. - * - * @param $1: The user for which a NIC is being connected - * @param $2: The virtual device address of the NIC being connected - * @param $3: The name of the VSwitch to which the NIC is to be connected - * - * @return 0 If the NIC was added successfully - * 1 If given invalid parameters - * 2 If the NIC could not be connected to the VSwitch - */ -int main(int argC, char * argV[]) { - - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - char* vswitch = argV[3]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Connecting NIC %s to VSwitch %s on %s... ", address, vswitch, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterConnectVswitchDmOutput* output; - - int rc = smVirtual_Network_Adapter_Connect_Vswitch_DM(&context, "", 0, "", - image, address, vswitch, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/createvs.c b/zhcp/zhcp-build/resource_access/src/createvs.c deleted file mode 100644 index ec371ae..0000000 --- a/zhcp/zhcp-build/resource_access/src/createvs.c +++ /dev/null @@ -1,231 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Creates a z/VM guest with the specified name. - * - * @param $1: The name of the guest which is to be created - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int main(int argC, char * argV[]) { - - // Should be only 1 or 2 arguments - if (argC < 2 || argC > 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get image name - char * imageName = argV[1]; - - // Check if image name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Creating user directory entry for %s... ", imageName); - - // Create DirMaint directory entry - int rc; - if (argC == 3) { - rc = createUsingFile(imageName, argV[2]); - } - // If no user directory entry is given, create a NOLOG userID - else { - rc = createNoLog(imageName); - } - - return rc; -} - -/** - * Creates a z/VM guest with the specified name using a directory entry file. - * - * @param $1: The name of the guest which is to be created - * @param $2: The directory entry in a file - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int createUsingFile(char * imageName, char * file) { - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCreateDmOutput * output; - - int rc; - FILE * userProfile; - - // Open file for user directory entry - userProfile = fopen(file, "r"); - if (userProfile == NULL) - printf(" Error: Failed to open %s\n", file); - else { - // Read in user directory entry - int recordCount = 0, i = 0; - char line[100], buffer[30][100]; - char * ptr; - while (!feof(userProfile)) { - // Read in 100 characters - fgets(line, 100, userProfile); - - // Delete new line - ptr = strstr(line, "\n"); - if (ptr != NULL) { - strncpy(ptr, "\0", 1); - } - - // Copy line into buffer - strcpy(buffer[i], line); - i++; - - if (!feof(userProfile)) - recordCount++; - } - - // Check USER line for correct virtual server name - ptr = strstr(buffer[0], imageName); - char newLine[100]; - // If the virtual server name is NOT in the USER line - if (ptr == NULL) { - // Insert virtual server name into the USER line - ptr = strtok(buffer[0], " "); - - int i = 0; - while (ptr != NULL) { - if (i == 1) { - strcat(newLine, imageName); - } else { - strcat(newLine, ptr); - } - strcat(newLine, " "); - ptr = strtok(NULL, " "); - i++; - } - - strcpy(buffer[0], newLine); - } - - // Create image record - vmApiImageRecord record[recordCount]; - // Copy buffer contents into image record - for (i = 0; i < recordCount; i++) { - record[i].imageRecordLength = strlen(buffer[i]); - record[i].imageRecord = buffer[i]; - } - - // Close user directory entry - fclose(userProfile); - - rc = smImage_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - "", // The prototype to use for creating the image. - 0, "", // Initial password length, initial password. - "", recordCount, // Initial account number, image record array length - &record, // Image record. - &output); - } - - if (rc || (output->common.returnCode && output->common.returnCode != 400 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 8 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } - - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; -} - -/** - * Creates a z/VM guest with the specified name with NOLOG. - * - * @param $1: The name of the guest which is to be created - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int createNoLog(char * imageName) { - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCreateDmOutput * output; - - int rc; - char userLine[19] = "USER "; - strcat(userLine, imageName); - strcat(userLine, " NOLOG"); - - vmApiImageRecord record; - record.imageRecordLength = 19; // Length of image_record - record.imageRecord = userLine; // The user or profile entry - - rc = smImage_Create_DM(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - "", // The prototype to use for creating the image. - 0, "", // Initial password length, initial password. - "", 1, // Initial account number, image record array length - &record, // Image record. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 400 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 8 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/dedicatedevice.c b/zhcp/zhcp-build/resource_access/src/dedicatedevice.c deleted file mode 100644 index b202796..0000000 --- a/zhcp/zhcp-build/resource_access/src/dedicatedevice.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Adds a dedicated device to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a device is to be added - * @param $2: The virtual device address to be assigned to the device - * @param $3: The device's real address - * - * @return 0 If the dedicated device was added successfully - * 1 If given invalid parameters - * 2 If device dedication failed - */ -int main(int argC, char* argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - char* rdev = argV[3]; - char* mode = argV[4]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - int readonly; - if (strcmp(mode, "RW") == 0 || strcmp(mode, "rw") == 0) { - readonly = 0; - } else if (strcmp(mode, "RO") == 0 || !strcmp(mode, "ro") == 0) { - readonly = 1; - } else { - printf("Error: Mode must be in RW or RO\n"); - return 1; - } - - printf("Adding device %s as %s to %s... ", rdev, vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeviceDedicateDmOutput* output; - - int rc = smImage_Device_Dedicate_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, rdev, readonly, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/deleteipl.c b/zhcp/zhcp-build/resource_access/src/deleteipl.c deleted file mode 100644 index 5b4062b..0000000 --- a/zhcp/zhcp-build/resource_access/src/deleteipl.c +++ /dev/null @@ -1,65 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Deletes the IPL statement for the z/VM guest with the specified name. - * - * @param $1: The name of the guest from which the IPL statement is to be removed - * - * @return 0 If the no IPL statement exists upon completion - * 1 If given invalid parameters - * 2 If IPL statement removal failed - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Removing IPL statement on %s... ", image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageIplDeleteDmOutput* output; - - int rc = smImage_IPL_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/deletevs.c b/zhcp/zhcp-build/resource_access/src/deletevs.c deleted file mode 100644 index 8f703db..0000000 --- a/zhcp/zhcp-build/resource_access/src/deletevs.c +++ /dev/null @@ -1,72 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Deletes the specified z/VM virtual server. - * - * @param $1: The name of the virtual server which is to be deleted - * - * @return 0 If the image is not present in the directory upon completion - * 1 If given invalid parameters - * 2 If image deletion failed - */ -int main(int argC, char* argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - // Get the virtual server name - char* imageName = argV[1]; - // Check if the virtual server name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Deleting virtual server %s... ", imageName); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeleteDmOutput* output; - - // Delete z/VM virtual server - int rc = smImage_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - 1, // Do not erase data from disks being released. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 400 - && output->common.returnCode != 592) - || (output->common.reasonCode && output->common.reasonCode != 4 - && output->common.reasonCode != 0)) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} - diff --git a/zhcp/zhcp-build/resource_access/src/disconnectnic.c b/zhcp/zhcp-build/resource_access/src/disconnectnic.c deleted file mode 100644 index b698f9c..0000000 --- a/zhcp/zhcp-build/resource_access/src/disconnectnic.c +++ /dev/null @@ -1,69 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Disconnect network adapter. - * - * @param $1: The user for which a NIC is being disconnected - * @param $2: The virtual device address of the NIC being disconnected - * - * @return 0 If the NIC was successfully disconnected - * 1 If given invalid parameters - * 2 If the NIC could not be disconnected - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Disconnecting NIC %s on %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterDisconnectDmOutput* output; - - int rc = smVirtual_Network_Adapter_Disconnect_DM(&context, "", 0, "", - image, address, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/getdiskpool.c b/zhcp/zhcp-build/resource_access/src/getdiskpool.c deleted file mode 100644 index 9a4262d..0000000 --- a/zhcp/zhcp-build/resource_access/src/getdiskpool.c +++ /dev/null @@ -1,100 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Get the free and used space in a given disk pool. - * - * @param $1: The name of the guest to get the disk pool from - * @param $2: The name of the disk pool - * @param $2: Free or used space in the disk pool - * - * @return 0 If the disk pool was successfully printed - * 1 If given invalid parameters - * 2 If the disk pool could not be retrieved - */ -int main(int argC, char * argV[]) { - if (argC != 4) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char * image = argV[1]; - char * pool = argV[2]; - char * spaceStr = argV[3]; - - // Get the disk space - int space; - if (strcmp(spaceStr, "free") == 0) { - space = 2; - } else if (strcmp(spaceStr, "used") == 0) { - space = 3; - } else { - printf("Error: Disk pool space must be free or used\n"); - return 1; - } - - VmApiInternalContext context; - vmApiImageRecord * record; - char temp[1024]; - char * token; - char diskStr[256]; - int i; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageVolumeSpaceQueryDmOutput * output; - - // Get disk pool used space - int rc = smImage_Volume_Space_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, space, // Used space - 3, // Query group - pool, &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - record = output->recordList; - for (i = 0; i < output->recordCount; i++) { - strncpy(temp, record->imageRecord, record->imageRecordLength); - - token = strtok_r(temp, " ", &context); // VolId - strcpy(diskStr, token); - strcat(diskStr, " "); - token = strtok_r(NULL, " ", &context); // Device type - strcat(diskStr, token); - strcat(diskStr, " "); - token = strtok_r(NULL, " ", &context); // Start address - strcat(diskStr, token); - strcat(diskStr, " "); - token = strtok_r(NULL, " ", &context); // Size - strcat(diskStr, token); - - printf("%s\n", diskStr); - record++; - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/getdiskpoolnames.c b/zhcp/zhcp-build/resource_access/src/getdiskpoolnames.c deleted file mode 100644 index ad957c4..0000000 --- a/zhcp/zhcp-build/resource_access/src/getdiskpoolnames.c +++ /dev/null @@ -1,73 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Get a list of defined disk pools. - * - * @param $1: The name of the guest to get a list of disk pools for - * - * @return 0 If the disk pools were successfully printed - * 1 If given invalid parameters - * 2 If the disk pools could not be retrieved - */ -int main(int argC, char * argV[]) { - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - - VmApiInternalContext context; - vmApiImageRecord * record; - char * poolName; - int i; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageVolumeSpaceQueryDmOutput * output; - - int rc = smImage_Volume_Space_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, 1, // Query definition - 3, // Query group - "*", // All areas - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - record = output->recordList; - for (i = 0; i < output->recordCount; i++) { - // Get disk pool name from each record - poolName = strtok_r(record->imageRecord, " ", &context); - if (poolName) { - printf("%s\n", poolName); - } - record++; - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/getipl.c b/zhcp/zhcp-build/resource_access/src/getipl.c deleted file mode 100644 index e7d91c3..0000000 --- a/zhcp/zhcp-build/resource_access/src/getipl.c +++ /dev/null @@ -1,63 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out the specified DirMaint profile entry. - * - * @param $1: The name of the profile which is to be listed - * - * @return 0 If the IPL entry was successfully printed - * 1 If given invalid parameters - * 2 If the IPL entry could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageIplQueryDmOutput* output; - - int rc = smImage_IPL_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("IPL target: %s\n" - "LoadParms: %s\n" - "Parameters: %s\n", output->savedSystem, output->loadParameter, - output->parameters); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/getuserentry.c b/zhcp/zhcp-build/resource_access/src/getuserentry.c deleted file mode 100644 index ca185dd..0000000 --- a/zhcp/zhcp-build/resource_access/src/getuserentry.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out the specified DirMaint directory entry. - * - * @param $1: The name of the z/VM guest which is to be listed - * - * @return 0 If the image record was successfully printed - * 1 If given invalid parameters - * 2 If the image could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Image name - char * image = argV[1]; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageQueryDmOutput * output; - - // Query DirMaint directory entry - int rc = smImage_Query_DM(&context, "", 0, "", image, &output, false); - - // Handle return code and reason code - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return code: %d\n", rc) : printf(" Return code: %d\n" - " Reason code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - // Print out DirMaint directory entry - int recCount = output->imageRecordCount; - int recLen = output->imageRecordList[0].imageRecordLength - 8; - - // Line to print - char line[recLen], chs[4]; - - if (recCount > 0) { - int i; - int token = 0; - - // Loop through image record and print out directory entry - for (i = 0; i < recCount; i++) { - memset(line, 0, recLen); - memcpy(line, output->imageRecordList[i].imageRecord, recLen); - - // Print lines that are not comment - trim(line); - - // Copy first 4 characters - strncpy(chs, line, 4); - - // If first 4 characters does not have * (comment) - if (!strstr(chs, "*")) { - // Print directory entry line - printf("%s\n", line); - } - } - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/getuserentrynames.c b/zhcp/zhcp-build/resource_access/src/getuserentrynames.c deleted file mode 100644 index 473a2c5..0000000 --- a/zhcp/zhcp-build/resource_access/src/getuserentrynames.c +++ /dev/null @@ -1,62 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "wrapperutils.h" - -/** - * Prints out a list of defined image names on a z/VM system. - * - * @return 0 If the list of image names was successfully printed - * 1 If given invalid parameters - * 2 If the image name list could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC > 1) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageNameQueryDmOutput* output; - - int rc = smImage_Name_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - "NA", // Doesn't matter what image name we use. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - int i; - int n = output->nameCount; - for (i = 0; i < n; i++) { - printf("%s\n", output->nameList[i]); - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/getuserprofile.c b/zhcp/zhcp-build/resource_access/src/getuserprofile.c deleted file mode 100644 index 0bedf31..0000000 --- a/zhcp/zhcp-build/resource_access/src/getuserprofile.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out the specified profile. - * - * @param $1: The name of the profile which is to be listed - * - * @return 0 If the profile was successfully printed - * 1 If given invalid parameters - * 2 If the profile could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Image name - char * profile = argV[1]; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiProfileQueryDmOutput * output; - - // Query DirMaint profile - int rc = smProfile_Query_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - profile,// Profile name - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return code: %d\n", rc) : printf(" Return code: %d\n" - " Reason code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - // Print out DirMaint directory entry - int i; - int recCount = output->profileRecordCount; - int recLen = 72; - - // Line to print - char line[recLen], chs[4]; - - if (recCount > 0) { - // Loop through image record and print out directory entry - for (i = 0; i < recCount; i++) { - memset(line, 0, recLen); - memcpy(line, output->profileRecordList[i].recordData, recLen); - - // Print lines that are not comment - trim(line); - - // Copy first 4 characters - strncpy(chs, line, 4); - - // If first 4 characters does not have * (comment) - if (!strstr(chs, "*")) { - printf("%s\n", line); - } - } // End of for - } - } // End of else - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; -} diff --git a/zhcp/zhcp-build/resource_access/src/queryvolumes.c b/zhcp/zhcp-build/resource_access/src/queryvolumes.c deleted file mode 100644 index 37d262f..0000000 --- a/zhcp/zhcp-build/resource_access/src/queryvolumes.c +++ /dev/null @@ -1,93 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Prints out information about disk spaces on a z/VM system. - * - * @param $1: The type of query to run - * @param $2: The type of space to query - * - * @return 0 If the virtual image was created - * 1 If given invalid parameters - * 2 If the image name list could not be retrieved - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* queryType = argV[1]; - char* entryType = argV[2]; - - int iQueryType; - if (!strcmp(queryType, "definition")) { - iQueryType = 1; - } else if (!strcmp(queryType, "free")) { - iQueryType = 2; - } else if (!strcmp(queryType, "used")) { - iQueryType = 3; - } else { - return 1; - } - - int iEntryType; - if (!strcmp(entryType, "volume")) { - iEntryType = 1; - } else if (!strcmp(entryType, "region")) { - iEntryType = 2; - } else if (!strcmp(entryType, "group")) { - iEntryType = 3; - } else { - return 1; - } - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageVolumeSpaceQueryDmOutput* output; - - int rc = smImage_Volume_Space_Query_DM(&context, "", 0, "", // Authorizing user, password length, password. - "NA", // Doesn't matter what image name we use. - iQueryType, iEntryType, "*", // List all spaces of specified type. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - int i, l; - int n = output->recordCount; - int p = 0; - for (i = 0; i < n; i++) { - l = output->recordList[i].imageRecordLength; - printf("%.*s\n", l, output->recordList[0].imageRecord + p); - p = p + l; - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/removemdisk.c b/zhcp/zhcp-build/resource_access/src/removemdisk.c deleted file mode 100644 index 1cd8114..0000000 --- a/zhcp/zhcp-build/resource_access/src/removemdisk.c +++ /dev/null @@ -1,69 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Removes a disk from a virtual image's directory entry - * - * @param $1: The name of the guest from which a disk is to be removed - * @param $2: The virtual device address of the volume which is to be removed - * - * @return 0 If the disk is not in the image's directory entry upon completion - * 1 If given invalid parameters - * 2 If the disk allocation failed - */ -int main(int argC, char* argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image) || isDevNumberInvalid(vdev)) - return 1; - - printf("Removing disk %s on %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDiskDeleteDmOutput* output; - - int rc = smImage_Disk_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, 0, // Use default setting for whether to erase data. - &output); - - if (rc || output->common.returnCode || output->common.reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/removenic.c b/zhcp/zhcp-build/resource_access/src/removenic.c deleted file mode 100644 index d57e6d0..0000000 --- a/zhcp/zhcp-build/resource_access/src/removenic.c +++ /dev/null @@ -1,68 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "vmapiVirtual.h" -#include "wrapperutils.h" - -/** - * Removes a network adapter from a virtual image's directory entry. - * - * @param $1: The z/VM guest from which the NIC is to be removed - * @param $2: The virtual device address of the NIC which is to be removed - * - * @return 0 If the NIC was removed successfully - * 1 If given invalid parameters - * 2 If the NIC removal failed - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; - - if (isImageNameInvalid(image)) - return 1; - - printf("Removing NIC %s on %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiVirtualNetworkAdapterDeleteDmOutput* output; - - int rc = smVirtual_Network_Adapter_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/removeprocessor.c b/zhcp/zhcp-build/resource_access/src/removeprocessor.c deleted file mode 100644 index 980556d..0000000 --- a/zhcp/zhcp-build/resource_access/src/removeprocessor.c +++ /dev/null @@ -1,64 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Removes a processor to a virtual image's directory entry. - * - * @param $1: The name of the guest to which a processor is to be removed - * @param $2: The virtual address of the processor which is to be removed - * - * @return 0 If the processor was successfully removed - * 1 If given invalid parameters - * 2 If the specified processor remains after attempted removal - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters"); - return 1; - } - - char* image = argV[1]; - char* address = argV[2]; // Hexedecimal string, 00-3F - - printf("Removing processor %s on %s... ", address, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageCpuDeleteDmOutput* output; - - int rc = smImage_CPU_Delete_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, address, &output); - - if (rc || (output->returnCode && output->returnCode != 520 - || (output->reasonCode && output->reasonCode != 30))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/replacevs.c b/zhcp/zhcp-build/resource_access/src/replacevs.c deleted file mode 100644 index d716b36..0000000 --- a/zhcp/zhcp-build/resource_access/src/replacevs.c +++ /dev/null @@ -1,202 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Replace specified user directory entry. - * - * @param $1: Name of the z/VM guest to replace the directory entry - * @param $2: Text file containing the new directory entry - * - * @return 0 If directory entry was successfully replaced - * 1 If given invalid parameters - * 2 If directory entry replace failed - */ -int main(int argC, char* argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get user name - char* image = argV[1]; - char* file = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - // Lock user directory entry - int rc = lockImage(image, &context); - - FILE * userDirEntry; - - // Open file for user directory entry - userDirEntry = fopen(file, "r"); - if (userDirEntry == NULL) - printf("Error: Failed to open %s\n", file); - else { - // Read in user directory entry - int recordCount = 0; - int i = 0; - char line[100], buffer[30][100]; - char * ptr; - while (!feof(userDirEntry)) { - // Read in 100 characters - fgets(line, 100, userDirEntry); - - // Delete new line - ptr = strstr(line, "\n"); - if (ptr != NULL) { - strncpy(ptr, "\0", 1); - } - - // Copy line into buffer - strcpy(buffer[i], line); - i++; - - if (!feof(userDirEntry)) - recordCount++; - } - - // Close user directory entry - fclose(userDirEntry); - - // Create image record - vmApiImageRecord record[recordCount]; - - // Copy buffer contents into image record - for (i = 0; i < recordCount; i++) { - record[i].imageRecordLength = strlen(buffer[i]); - record[i].imageRecord = buffer[i]; - } - - // Replace user directory entry - rc = replaceImage(image, &context, &record, recordCount); - } - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return rc; -} - -/** - * Lock specified user directory entry. - * - * @param $1: Name of the z/VM guest directory entry to lock - * - * @return 0 If directory entry was successfully locked - * 1 If given invalid parameters - * 2 If directory entry lock failed - */ -int lockImage(char * image, VmApiInternalContext context) { - printf("Locking %s... ", image); - - vmApiImageLockDmOutput * lockOutput; - int rc = smImage_Lock_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - image, // Image name - "", // Device virtual address - &lockOutput); - - if (rc || (lockOutput->returnCode && lockOutput->returnCode != 400 - || (lockOutput->reasonCode && lockOutput->reasonCode != 12))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", lockOutput->returnCode, - lockOutput->reasonCode); - - return 2; - } else { - printf("Done\n"); - return 0; - } -} - -/** - * Unlock specified user directory entry. - * - * @param $1: Name of the z/VM guest directory entry to unlock - * - * @return 0 If directory entry was successfully unlocked - * 1 If given invalid parameters - * 2 If directory entry unlock failed - */ -int unlockImage(char * image, VmApiInternalContext context) { - printf("Unlocking %s... ", image); - - vmApiImageUnlockDmOutput * unlockOutput; - int rc = smImage_Unlock_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - image, // Image name - "", // Device virtual address - &unlockOutput); - - if (rc || unlockOutput->returnCode || unlockOutput->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", unlockOutput->returnCode, - unlockOutput->reasonCode); - - return 2; - } else { - printf("Done\n"); - return 0; - } -} - -/** - * Replace specified user directory entry. - * - * @param $1: Name of the z/VM guest to replace the directory entry - * - * @return 0 If directory entry was successfully unlocked - * 1 If given invalid parameters - * 2 If directory entry unlock failed - */ -int replaceImage(char * image, VmApiInternalContext context, - vmApiImageRecord * record, int recordCount) { - printf("Replacing directory entry of %s... ", image); - - vmApiImageReplaceDmOutput* replaceOutput; - int rc = smImage_Replace_DM(&context, "", // Authorizing user - 0, // Password length - "", // Password - image, // Image name - recordCount, // Record count - record, // Record array - &replaceOutput); - - if (rc || replaceOutput->returnCode || replaceOutput->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", replaceOutput->returnCode, - replaceOutput->reasonCode); - - // Unlock user directory entry - rc = unlockImage(image, context); - return 2; - } else { - printf("Done\n"); - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/setipl.c b/zhcp/zhcp-build/resource_access/src/setipl.c deleted file mode 100644 index 97008ad..0000000 --- a/zhcp/zhcp-build/resource_access/src/setipl.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Sets the IPL statement for the z/VM guest with the specified name. - * - * @param $1: The name of the guest for which the IPL statement is to be set. - * @param $2: The new IPL statement's IPL target string. - * @param $3: The new IPL statement's load parameter string. - * @param $4: The new IPL statement's parameter string. - * - * @return 0 If the virtual image now exists - * 1 If given invalid parameters - * 2 If image creation failed - */ -int main(int argC, char * argV[]) { - - if (argC != 5) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* ipltarget = argV[2]; - char* loadparms = argV[3]; - char* parms = argV[4]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Setting IPL statement on %s... ", image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageIplSetDmOutput* output; - - int rc = smImage_IPL_Set_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, ipltarget, loadparms, parms, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/setpassword.c b/zhcp/zhcp-build/resource_access/src/setpassword.c deleted file mode 100644 index 6bbf67c..0000000 --- a/zhcp/zhcp-build/resource_access/src/setpassword.c +++ /dev/null @@ -1,67 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Sets the password for the z/VM guest with the specified name. - * - * @param $1: The name of the guest for which a password is to be set - * @param $2: The guest's new password - * - * @eeturn 0 If the password was set - * 1 If given invalid parameters - * 2 If setting the password failed - */ -int main(int argC, char * argV[]) { - - if (argC != 3) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* password = argV[2]; - - // Check if the userID is between 1 and 8 characters - if (isImageNameInvalid(image)) - return 1; - - printf("Setting password for %s... ", image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImagePasswordSetDmOutput* output; - - int rc = smImage_Password_Set_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, strlen(password), password, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/smMemoryGroup.c b/zhcp/zhcp-build/resource_access/src/smMemoryGroup.c deleted file mode 100644 index 338b4bf..0000000 --- a/zhcp/zhcp-build/resource_access/src/smMemoryGroup.c +++ /dev/null @@ -1,140 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "smPublic.h" - -int quantum = 64; - -int smMemoryGroupInitialize(struct _VmApiInternalContext* vmapiContextP) { - smMemoryGroupContext * context = vmapiContextP->memContext; - // Set up a tracking array with no allocated chunks yet - context->arraySize = quantum; - context->chunks = (void **) malloc(context->arraySize * sizeof(void *)); - if (context->chunks == 0) { - errorLine(vmapiContextP, "smMemoryGroupInitialize: out of memory"); - return MEMORY_ERROR; - } - context->lastChunk = -1; - - // Return successfully - return 0; -} - -void * smMemoryGroupAlloc(struct _VmApiInternalContext* vmapiContextP, - size_t size) { - int rc; - smMemoryGroupContext * context = vmapiContextP->memContext; - - // Check that memory structure is initialized, if not then call to init. - if (context->arraySize < quantum || context->chunks == 0) { - rc = smMemoryGroupInitialize(vmapiContextP); - if (rc != 0) - return 0; // Return of 0 is error in this case - } - // Increment to the next unused entry in the tracking array - context->lastChunk = context->lastChunk + 1; - - // If we're past the end of the array, enlarge it by the quantum - if (context->lastChunk == context->arraySize) { - context->arraySize = context->arraySize + quantum; - void ** reallocated = (void **) realloc(context->chunks, - context->arraySize * sizeof(void *)); - if (NULL == reallocated) { - errorLine(vmapiContextP, "smMemory realloc: out of memory"); - return NULL; - } else { - context->chunks = reallocated; - } - } - - // Obtain the memory and record it in the tracking array - context->chunks[context->lastChunk] = malloc(size); - - // clear out the memory chunk if obtained - if (context->chunks[context->lastChunk]) { - memset(context->chunks[context->lastChunk], 0, size); - } - - // Return the pointer - return context->chunks[context->lastChunk]; -} - -void * smMemoryGroupRealloc(struct _VmApiInternalContext* vmapiContextP, - void * chunk, size_t size) { - smMemoryGroupContext * context = vmapiContextP->memContext; - // Variables - int i; - int rc; - void * newChunk; - - // Check that memory structure is initialized, if not then call to init - if (context->arraySize < quantum || context->chunks == 0) { - rc = smMemoryGroupInitialize(vmapiContextP); - if (rc != 0) - return 0; // Return of 0 is error in this case - } - - // Find this chunk in the tracking array and reallocate it - newChunk = NULL; - for (i = 0; (i <= context->lastChunk) && (newChunk == NULL); i++) { - if (context->chunks[i] == chunk) { - char *reallocated = realloc(context->chunks[i], size); - if (NULL == reallocated) { - errorLine(vmapiContextP, - "smMemory group realloc: out of memory"); - return NULL; - } else { - context->chunks[i] = reallocated; - } - newChunk = context->chunks[i]; - } - } - - // Return the new pointer - return newChunk; - -} - -int smMemoryGroupFreeAll(struct _VmApiInternalContext* vmapiContextP) { - smMemoryGroupContext * context = vmapiContextP->memContext; - // Variables - int i; - - // Check that memory structure is initialized, if not then just return - if (context->arraySize < quantum || context->chunks == 0) { - return 0; - } - - // Free all the memory recorded in the tracking array - for (i = 0; i <= context->lastChunk; i++) { - if (context->chunks[i]) - FREE_MEMORY(context->chunks[i]); - } - - // Reset the tracking array to empty - if (context->arraySize != quantum) { - context->arraySize = quantum; - context->chunks = (void **) realloc(context->chunks, context->arraySize - * sizeof(void *)); - } - context->lastChunk = -1; - - // Return successfully - return 0; - -} - -int smMemoryGroupTerminate(struct _VmApiInternalContext* vmapiContextP) { - smMemoryGroupContext * context = vmapiContextP->memContext; - - // Check that memory structure is initialized, if not then just return - if (context->arraySize < quantum || context->chunks == 0) { - return 0; - } - - // Free the tracking array - FREE_MEMORY(context->chunks); - - // Return successfully - return 0; -} diff --git a/zhcp/zhcp-build/resource_access/src/smSocket.c b/zhcp/zhcp-build/resource_access/src/smSocket.c deleted file mode 100644 index 6544274..0000000 --- a/zhcp/zhcp-build/resource_access/src/smSocket.c +++ /dev/null @@ -1,659 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef AF_IUCV -#define AF_IUCV 32 -#endif - -#ifndef PF_IUCV -#define PF_IUCV AF_IUCV -#endif - -struct sockaddr_iucv { - sa_family_t siucv_family; - unsigned short siucv_port; - unsigned int siucv_addr; - char siucv_nodeid[8]; - char siucv_userid[8]; - char siucv_name[8]; -}; - -// This macro is used to check return values on close -// and do one retry if the close had an EINTR error -#define CHECK_SOCKET_CLOSE(_SOCKETID_) \ -if (retValue)\ -{\ - saveCloseErrno = errno;\ - sprintf(line, "close() error on socket %d return value %d errno %d\n", _SOCKETID_,retValue, saveCloseErrno);\ - errorLog(vmapiContextP,\ - __func__,\ - TO_STRING(__LINE__),\ - RcIucv,\ - retValue,\ - line);\ - if (EINTR == saveCloseErrno)\ - {\ - retValue = close(_SOCKETID_);\ - if (retValue)\ - {\ - saveCloseErrno = errno;\ - sprintf(line, "retried close() error on socket %d return value %d errno %d\n", _SOCKETID_,retValue, saveCloseErrno);\ - errorLog(vmapiContextP,\ - __func__,\ - TO_STRING(__LINE__),\ - RcIucv,\ - retValue,\ - line);\ - }\ - }\ -} - -static const char* default_IUCV_server = "VSMREQIU"; -static const char* IUCV_programName = "DMSRSRQU"; - -int smSocketInitialize(struct _VmApiInternalContext* vmapiContextP, - int * sockId) { - -#define RETRY_CONNECTION_LIMIT 10 - const int SLEEP_TIMES[RETRY_CONNECTION_LIMIT] = { 0, 0, 1, 1, 2, 2, 8, 8, - 16, 32 }; - int retValue; - char line[LINESIZE]; - int length; - int retryConnection; - int saveErrno, saveCloseErrno; - struct sockaddr_iucv serverSockAddr; - struct timeval timeoutValue; - - // If the trace file has not been read yet, do it - if (!(vmapiContextP->smTraceDetails->traceFileRead)) { - readTraceFile(vmapiContextP); - } - - // Place holders for context and background starting - if (1 != vmapiContextP->contextCreatedFlag) { - retValue = initializeThreadSemaphores(vmapiContextP, "", 1); // Create context using no name to override current context name - if (retValue) { - sprintf( - line, - "smSocketInitialize(): context reserve() returned error: %d\n", - retValue); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, line); - return PROCESSING_ERROR; - } - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "smSocketInitialize: initializeThreadSemaphores completed successfully.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - // If the backend is not marked as running, check it - if (!vmapiContextP->checkBackendFlag) { - retValue = vmbkendCheck(vmapiContextP); - if (retValue) - return retValue; // If any error return - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - // Get a local socket - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketInitialize: trying to obtain local socket.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - *sockId = socket(PF_IUCV, SOCK_STREAM, IPPROTO_IP); - if (*sockId == -1) { - sprintf(line, "smSocketInitialize(): socket() returned errno: %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, *sockId, - line); - return SOCKET_OBTAIN_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "smSocketInitialize: local socket id %d obtained. Now trying connect loop. \n", - *sockId); - TRACE_END_DEBUG(vmapiContextP, line); - - // Initialize the server IUCV socket structure - memset(&serverSockAddr, 0, sizeof(serverSockAddr)); - serverSockAddr.siucv_family = AF_IUCV; - serverSockAddr.siucv_port = 0; - serverSockAddr.siucv_addr = 0; - memset(&serverSockAddr.siucv_nodeid, ' ', - sizeof(serverSockAddr.siucv_nodeid)); - memset(&serverSockAddr.siucv_userid, ' ', - sizeof(serverSockAddr.siucv_userid)); - memset(&serverSockAddr.siucv_name, ' ', sizeof(serverSockAddr.siucv_name)); - - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = 60; // Changed to 60 now that AF IUCV and CMS are working better - retValue = setsockopt(*sockId, SOL_SOCKET, SO_SNDTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): connect timeout returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Do we have an IUCV userID or just use the default? - // Do not copy in the null terminator on strings - length = strlen(vmapiContextP->IucvUserid); - if (length <= 0 || length > 8) { - memcpy(&serverSockAddr.siucv_userid, default_IUCV_server, strlen( - default_IUCV_server)); - } else { - memcpy(&serverSockAddr.siucv_userid, &vmapiContextP->IucvUserid, - strlen(vmapiContextP->IucvUserid)); - } - - // Add in the iucv program name constant - memcpy(&serverSockAddr.siucv_name[0], IUCV_programName, strlen( - IUCV_programName)); - - // Try to connect to the IUCV server - for (retryConnection = 1;; retryConnection++) { - retValue = connect(*sockId, (struct sockaddr *) &serverSockAddr, - sizeof(serverSockAddr)); - if (retValue != 0) { - saveErrno = errno; - sprintf(line, "connect() of socket %d returned %d errno %d\n", - *sockId, retValue, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - retValue, line); - // If we have exceeded the retry limit, then shutdown, close and return with error - if (retryConnection >= RETRY_CONNECTION_LIMIT) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "smSocketInitialize: connect retry limit exceeded.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId); - switch (saveErrno) { - case ECONNREFUSED: - return SOCKET_CONNECT_REFUSED_ERROR; - case EAGAIN: - return SOCKET_CONNECT_TRYAGAIN_ERROR; - default: - return SOCKET_PROCESSING_ERROR; - } - } - - // Is this an errno that we can retry? If so continue the loop - switch (saveErrno) { - case ECONNREFUSED: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "====>>ECONNREFUSED, going to close and retry connect.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - case EAGAIN: - if (saveErrno == EAGAIN) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "====>>EAGAIN, going to close and retry connect.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - } - // Close the current socket - // Get a new one, and retry the connect - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "====>>closing the socket before retry.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId) - ; - - // Delay for a while to give SMAPI some time to restart - if (SLEEP_TIMES[retryConnection] > 0) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "+++++++++ Sleeping for %d seconds\n", - SLEEP_TIMES[retryConnection]); - TRACE_END_DEBUG(vmapiContextP, line); - sleep(SLEEP_TIMES[retryConnection]); - } - - *sockId = socket(PF_IUCV, SOCK_STREAM, IPPROTO_IP); - if (*sockId == -1) { - sprintf( - line, - "smSocketInitialize(): socket() returned errno: %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcIucv, *sockId, line); - return SOCKET_OBTAIN_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "smSocketInitialize: retry obtained new local socket id %d. Now retrying connect.\n", - *sockId); - TRACE_END_DEBUG(vmapiContextP, line); - // Reset the return and reason codes in the context - vmapiContextP->rc = 0; - vmapiContextP->reason = 0; - - continue; // Try to connect again - - default: - break; // Shutdown the socket and return with error if errno is not listed - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "====>>closing the socket \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - retValue = close(*sockId); - CHECK_SOCKET_CLOSE(*sockId); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "====>>return from closing the socket \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return SOCKET_PROCESSING_ERROR; - } else - break; // Got a good connection, leave loop - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, - "smSocketInitialize: Socket connect completed successfully.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - return 0; -} - -int smSocketWrite(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * data, int dataLen) { - - int retValue; - char line[LINESIZE]; - struct timeval timeoutValue; - int onValue = 1; - int saveErrno, saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_BUFFER_OUT); - dumpArea(vmapiContextP, data, dataLen); - TRACE_END; - - // Set the send socket timeout value - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = Socket_Timeout; - retValue = setsockopt(sockId, SOL_SOCKET, SO_SNDTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): send timeout returned errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Set the reuse socket address value - onValue = 1; - retValue = setsockopt(sockId, SOL_SOCKET, SO_REUSEADDR, (int *) &onValue, - sizeof(int)); - if (retValue < 0) { - sprintf(line, "setsockopt(): reuse addr returned errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Write the data to the socket - while (dataLen > 0) { - retValue = send(sockId, (void *) data, dataLen, 0); - if (retValue < 0) { - saveErrno = errno; - // Log a special message and set the return and reason code if a timeout - if (errno == EAGAIN) { - sprintf(line, "smSocketWrite(): timeout errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsSocketTimeout, line); - } else { - sprintf(line, "smSocketWrite(): send() returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - errno, line); - } - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - if (saveErrno == EAGAIN) - return SOCKET_TIMEOUT_ERROR; - if (saveErrno == ENOTCONN) - return SOCKET_WRITE_RETRYABLE_ERROR; - return SOCKET_WRITE_ERROR; - } - data = data + retValue; - dataLen = dataLen - retValue; - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return 0; -} - -int smSocketRead(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len) { - - int retValue; - int lenRead; - int retryNoData; - char line[LINESIZE]; - retryNoData = 0; - struct timeval timeoutValue; - unsigned long ulTimeoutSeconds; - long ulTimeoutSecondsRequested = 0; - char * ptrTimeOutValue; - int onValue = 1; - void * buffPtr; - int buffLength; - int saveErrno, saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - buffPtr = (void *) buff; - buffLength = len; - ulTimeoutSeconds = Socket_Timeout; - - // Obtain read timeout environment variable - ptrTimeOutValue = getenv("ZVMMAP_READ_TIMEOUT_SECONDS"); - if (ptrTimeOutValue) { - ulTimeoutSecondsRequested = atol(ptrTimeOutValue); - if (ulTimeoutSecondsRequested > 0) { - ulTimeoutSeconds = ulTimeoutSecondsRequested; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "Socket read timeout set from enviromentVariable. %lu seconds.\n", - ulTimeoutSeconds); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - - // Set the read socket timeout value - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = ulTimeoutSeconds; - retValue = setsockopt(sockId, SOL_SOCKET, SO_RCVTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): receive timeout returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Set the reuse socket address value - onValue = 1; - retValue = setsockopt(sockId, SOL_SOCKET, SO_REUSEADDR, (int *) &onValue, - sizeof(int)); - if (retValue < 0) { - sprintf(line, "setsockopt(): reuse addr returned errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - /* Read the data from the socket */ - lenRead = 0; - while (lenRead < len) { - retValue = recv(sockId, buffPtr, buffLength, 0); - if (retValue < 0) { - saveErrno = errno; - // Log a special message and set the return and reason code if a timeout - if (errno == EAGAIN) { - sprintf(line, "smSocketRead(): timeout errno %d\n", errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsSocketTimeout, line); - } else { - sprintf(line, "smSocketRead(): recv() returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - errno, line); - } - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - if (saveErrno == EAGAIN) - return SOCKET_TIMEOUT_ERROR; - if (saveErrno == ENOTCONN) - return SOCKET_READ_RETRYABLE_ERROR; - return SOCKET_READ_ERROR; - } - - // No data returned? - // Retry 10 times if we haven't received any data - if (retValue == 0) { - retryNoData++; - if (retryNoData > 10 && lenRead == 0) { - sprintf(line, - "smSocketRead(): recv() returned no data after 10 retries.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsUnexpected, line); - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_READ_ERROR; - } - } - lenRead += retValue; - buffPtr += retValue; - buffLength -= retValue; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_BUFFER_IN); - dumpArea(vmapiContextP, buff, lenRead); - TRACE_END; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketRead(): read %d bytes of data \n", lenRead); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - return 0; -} - -int smSocketReadLoop(struct _VmApiInternalContext* vmapiContextP, int sockId, - char * buff, int len) { - - int retValue; - int lenRead; - int retryNoData; - char line[LINESIZE]; - retryNoData = 0; - struct timeval timeoutValue; - unsigned long ulTimeoutSeconds; - long ulTimeoutSecondsRequested = 0; - char * ptrTimeOutValue; - void * buffPtr; - int buffLength; - int saveErrno, saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "--> Inside smSocketReadLoop:.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - - buffPtr = (void *) buff; - buffLength = len; - - ulTimeoutSeconds = Socket_Indication_Timeout; - - // Obtain read timeout environment variable - ptrTimeOutValue = getenv("ZVMMAP_READ_INDICATION_TIMEOUT_SECONDS"); - if (ptrTimeOutValue) { - ulTimeoutSecondsRequested = atol(ptrTimeOutValue); - if (ulTimeoutSecondsRequested > 0) { - ulTimeoutSeconds = ulTimeoutSecondsRequested; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "Socket read indication timeout set from enviromentVariable. %lu seconds.\n", - ulTimeoutSeconds); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - - // Set the read socket timeout value - timeoutValue.tv_usec = 0; - timeoutValue.tv_sec = ulTimeoutSeconds; - retValue = setsockopt(sockId, SOL_SOCKET, SO_RCVTIMEO, - (struct timeval *) &timeoutValue, sizeof(struct timeval)); - if (retValue < 0) { - sprintf(line, "setsockopt(): receive timeout returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, errno, - line); - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - // Read the data from the socket - lenRead = 0; - while (lenRead < len) { - retValue = recv(sockId, buffPtr, buffLength, 0); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "--> return value of recv inside socketReadLoop = %d \n", - retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - if (retValue < 0) { - saveErrno = errno; - // Log a special message and set the return and reason code if a timeout - if (errno == EAGAIN) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "--> Errno inside socketReadLoop = %d for recv() return value = %d \n", - errno, retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - return CUSTOM_DEFINED_SOCKET_RETRY; - - } else { - sprintf(line, "smSocketRead(): recv() returned errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - errno, line); - } - - retValue = close(sockId); - CHECK_SOCKET_CLOSE(sockId); - if (saveErrno == EAGAIN) - return SOCKET_TIMEOUT_ERROR; - if (saveErrno == ENOTCONN) - return SOCKET_READ_RETRYABLE_ERROR; - return SOCKET_READ_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketRead(): retValue %d \n", retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - // No data returned? - //Retry 100 times if we haven't received any data - if (retValue == 0) { - retryNoData++; - if (retryNoData > 100 && lenRead == 0) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf( - line, - "--> Errno inside socketReadLoop = %d for recv() return value = %d \n", - errno, retValue); - TRACE_END_DEBUG(vmapiContextP, line); - - return CUSTOM_DEFINED_SOCKET_RETRY; - } - } - lenRead += retValue; - buffPtr += retValue; - buffLength -= retValue; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_BUFFER_IN); - dumpArea(vmapiContextP, buff, lenRead); - TRACE_END; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "smSocketRead(): read %d bytes of data \n", lenRead); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return 0; -} - -int smSocketTerminate(struct _VmApiInternalContext* vmapiContextP, int sockId) { - int retValue; - char line[LINESIZE]; - int saveCloseErrno; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - - retValue = close(sockId); - if (retValue != 0) { - CHECK_SOCKET_CLOSE(sockId); - return SOCKET_PROCESSING_ERROR; - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET); - return 0; -} diff --git a/zhcp/zhcp-build/resource_access/src/smapiTableParser.c b/zhcp/zhcp-build/resource_access/src/smapiTableParser.c deleted file mode 100644 index 1d8b02a..0000000 --- a/zhcp/zhcp-build/resource_access/src/smapiTableParser.c +++ /dev/null @@ -1,929 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smapiTableParser.h" -#include -#include -#include -#include "smPublic.h" -#include "smSocket.h" - -// Internal function to handle imbedded arrays in smapi output -static int handleArrays(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, int * tableStartingIndex, - tableLayout table, tableParserParms * parms); - -int parseBufferWithTable(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, tableLayout table, tableParserParms *parms) { - int temp, dataType, i, rc, iSize, reachedByteCount; - int cStringArrayPtrOffset, cStringArrayPtrIndex; - int cStringCounterFieldOffset, cStringCounterFieldIndex; - int cStringStructIndex, cStringStructSize; - int cStringFieldIndex, cStringFieldOffset, cStringCurrentStructCount; - char line[LINESIZE]; - - reachedByteCount = 0; // Set this if we are at the end of the data - - // If this is a SCAN mode; clear out the output fields - if (mode == scan) { - parms->outStringByteCount = 0; - for (i = 0; i < MAX_STRUCT_ARRAYS; i++) { - parms->outStructCount[i] = 0; - parms->outStructSizes[i] = 0; - } - } - - parms->byteCount = 0; - - // First entry in the table must be the base structure size - if (table[0][COL_1_TYPE] != APITYPE_BASE_STRUCT_LEN) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - - // If this is scan mode, fill in the output array size for top level structure - if (mode == scan) { - parms->outStructSizes[0] = table[0][COL_6_SIZE_OR_OFFSET]; - parms->outStructCount[0] = 1; - } - - for (i = 1; (table[i][COL_1_TYPE] != APITYPE_END_OF_TABLE) - && (parms->byteCount < parms->dataBufferSize); i++) { - dataType = table[i][COL_1_TYPE]; - switch (dataType) { - case APITYPE_INT1: - if (mode == populate) { - memcpy((parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET]), - parms->smapiBufferCursor, 1); - } - parms->smapiBufferCursor += 1; - parms->byteCount += 1; - break; - - case APITYPE_INT4: - if (mode == populate) { - GET_INT(*((int *) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "int 4 found Value %d stored at %p(+%d) \n", - *((int *) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])), - parms->inStructAddrs[0], table[i][COL_6_SIZE_OR_OFFSET]); - TRACE_END_DEBUG(vmapiContextP, line); - - } else - parms->smapiBufferCursor += 4; - parms->byteCount += 4; - break; - - case APITYPE_INT8: - if (mode == populate) { - GET_64INT(*((long long*) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - } else - parms->smapiBufferCursor += 8; - parms->byteCount += 8; - break; - - case APITYPE_STRING_LEN: - case APITYPE_CHARBUF_LEN: - case APITYPE_C_STR_PTR: - if (APITYPE_C_STR_PTR == dataType) { - temp = strlen(parms->smapiBufferCursor); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "C string found of length %d <%s>\n", temp, - parms->smapiBufferCursor); - TRACE_END_DEBUG(vmapiContextP, line); - parms->byteCount += (temp + 1); - } else { - GET_INT(temp, parms->smapiBufferCursor); - parms->byteCount += 4; - parms->byteCount += temp; - } - // If the string size is incorrect, display error and return. - if (temp < table[i][COL_2_MINSIZE]) // Check for less than min first - { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[i][COL_2_MINSIZE], table[i][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - // If max is not -1, then check for max - if (-1 != table[i][COL_3_MAXSIZE] && temp > table[i][COL_3_MAXSIZE]) { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[i][COL_2_MINSIZE], table[i][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - // If scan update the string byte count - if (mode == scan) { - if (temp > 0) { - parms->outStringByteCount += (temp + 1); - } - if (APITYPE_CHARBUF_LEN == dataType) // Skip past the buf count row in table - { - i++; - (parms->outStringByteCount)--; // Don't need null terminator for char buf - } - } else { // If populate then set the char * in struct; copy the string/charbuf into the buffer - if (temp > 0) { - *((char **) ((parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET]))) - = parms->inStringCursor; - - // If this ia a null terminated string just just strcpy, else use memcpy - if (APITYPE_C_STR_PTR == dataType) { - strcpy(parms->inStringCursor, parms->smapiBufferCursor); - parms->inStringCursor += temp + 1; - } else { - // copy the string/charbuf into the string buffer and add zero terminator if a string - memcpy(parms->inStringCursor, parms->smapiBufferCursor, - temp); - parms->inStringCursor += temp; - if (APITYPE_STRING_LEN == dataType) { - *(parms->inStringCursor) = '\0'; - parms->inStringCursor++; - } else // Char buffer, so no need to add null terminator, but must update count field - { - i++; - *((int*) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])) = temp; - } - } - } else { - *((char**) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])) = NULL; - if (APITYPE_CHARBUF_LEN == dataType) // Set char buf count to 0 - { - i++; - *((int*) (parms->inStructAddrs[0] - + table[i][COL_6_SIZE_OR_OFFSET])) = 0; - } - } - } - if (APITYPE_C_STR_PTR == dataType) { - temp++; // Add on a byte for zero terminator - } - parms->smapiBufferCursor += temp; - break; - - case APITYPE_ARRAY_LEN: - // Call a subroutine to handle this - if (0 != (rc = handleArrays(vmapiContextP, mode, &i, table, parms))) - return rc; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "** Finished handling an array in parseBufferwithTable. Buffer pointer %p \n", - parms->smapiBufferCursor); - TRACE_END_DEBUG(vmapiContextP, line); - - break; - - // If null terminated strings are in the base structure, we need to - // find them all until we use up the buffer. They must be the last - // type of data in the stream. - // For scan mode we need to add up all the string lengths (adding in a byte - // for the null terminator) until the buffer is empty. - // The static table will have the APITYPE_C_STR_ARRAY_PTR, then APITYPE_C_STR_ARRAY_COUNT, - // APITYPE_C_STR_STRUCT_LEN, APITYPE_C_STR_PTR in that order. - case APITYPE_C_STR_ARRAY_PTR: - - cStringArrayPtrOffset = table[i][COL_6_SIZE_OR_OFFSET]; // Get the offset where the array ptr will be stored - cStringArrayPtrIndex = table[i][COL_4_STRUCT_INDEX];// Get the index of this field (should be 0 for this level) - - i++; // Get next table value; which must be the counter info - if (APITYPE_C_STR_ARRAY_COUNT != table[i][COL_1_TYPE]) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - cStringCounterFieldOffset = table[i][COL_6_SIZE_OR_OFFSET]; - cStringCounterFieldIndex = table[i][COL_4_STRUCT_INDEX]; - - i++; // Get next table value; which must be the c array structure size info - if (APITYPE_C_STR_STRUCT_LEN != table[i][COL_1_TYPE]) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - cStringStructSize = table[i][COL_6_SIZE_OR_OFFSET]; - cStringStructIndex = table[i][COL_4_STRUCT_INDEX]; - - i++; // Get next table value; which must be the char * offset in the structure - if (APITYPE_C_STR_PTR != table[i][COL_1_TYPE]) { - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - cStringFieldIndex = table[i][COL_4_STRUCT_INDEX]; - cStringFieldOffset = table[i][COL_6_SIZE_OR_OFFSET]; - - cStringCurrentStructCount = 0; // Used in populate - - // Look through the rest of the buffer. - while (parms->byteCount < parms->dataBufferSize) { - iSize = strlen(parms->smapiBufferCursor) + 1; - // If this is scan, then increment the c string structure count, - // add the output size of the string + byte for zero terminator, and - // move buffer pointer past the string. Increment our count of data bytes - // processed also. - if (mode == scan) { - parms->outStringByteCount += iSize; - parms->smapiBufferCursor += iSize; - parms->outStructCount[cStringStructIndex]++;// Structures hold the char * - - // If the size of the char * structure has not been filled in, do that now - if (0 == parms->outStructSizes[cStringStructIndex]) { - parms->outStructSizes[cStringStructIndex] - = cStringStructSize; - } - } - // If populate, copy the string to the storage area, - // store the pointer to the string in the correct array structure, - // then move to next string. - else { - // If this is the first string/structure, then set the structure pointer to to the - // starting address. The array notation will handle the rest of the addresses. - if (0 == cStringCurrentStructCount) { - *(char **) (parms->inStructAddrs[cStringArrayPtrIndex] - + cStringArrayPtrOffset) - = parms->inStructAddrs[cStringStructIndex]; - - // Copy the struct count from the scan (input to this populate) into the - // count field - *((int *) (parms->inStructAddrs[cStringCounterFieldIndex] - + cStringCounterFieldOffset)) - = parms->outStructCount[cStringStructIndex]; - } - - // Copy the string into the string buffer - strcpy(parms->inStringCursor, parms->smapiBufferCursor); - - // Set the char * pointer in the c structure of char *'s - memcpy((parms->inStructAddrs[cStringStructIndex] - + (cStringCurrentStructCount * cStringStructSize) - + cStringFieldOffset), &(parms->inStringCursor), - sizeof(char *)); - - // Advance to next string storage location and structure counter - parms->inStringCursor += iSize; - parms->smapiBufferCursor += iSize; - - cStringCurrentStructCount++; - } - parms->byteCount += iSize; - }// End while buffer has data - - break; - - case APITYPE_ARRAY_STRUCT_COUNT: // Should not get here, subroutine should be handling this - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - - default: // Error - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - }// End switch on table type - - if (parms->byteCount >= parms->dataBufferSize) { - reachedByteCount = 1; - break; // End of for loop (Will we always get here vs find the last entry in the table?) - } - }// For loop until end of table - return 0; -} - -/** - * Routine for doing all processing when an array is found. - * Can be recursively called if nested arrays - */ -static int handleArrays(struct _VmApiInternalContext* vmapiContextP, - enum tableParserModes mode, int * tableStartingIndex, - tableLayout table, tableParserParms *parms) { - // At our calling the table index should be at the arrayLen field, and next field should be - // struct len details. - int arrayByteMax, arrayByteCount, arrayPointerOffset, arrayPointerIndex, j, - dataType; - int dataBuffStructSize, outStructSize, structIndex, structByteCount; - int tableIndex, tableMaxIndex, temp, rc, arrayNestLevel; - int structCounter, structCounterField, structCounterIndex; - int noBufferStructLen; // set to 1 if SMAPI array doesn't have an inner structure length - char * structStorage; - char line[LINESIZE]; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, - "** Array found. Starting table index is %d buffer pointer %p \n", - *tableStartingIndex, parms->smapiBufferCursor); - TRACE_END_DEBUG(vmapiContextP, line); - - arrayByteCount = 0; - tableMaxIndex = 0; // Used to find end of table entries for this structure - structCounter = 0; // Used for populate of structure (an address multiplier) - - GET_INT(arrayByteMax, parms->smapiBufferCursor);// Actual size of SMAPI array data - - arrayPointerOffset = table[*tableStartingIndex][COL_6_SIZE_OR_OFFSET]; - arrayPointerIndex = table[*tableStartingIndex][COL_4_STRUCT_INDEX]; - arrayNestLevel = table[*tableStartingIndex][COL_5_NEST_LEVEL]; - (*tableStartingIndex)++; // Position at the struct len in this table (or struct count) - - // If the struct count field was specified, then make a note of that for populate step - if (APITYPE_ARRAY_STRUCT_COUNT == table[*tableStartingIndex][COL_1_TYPE]) { - if (mode == populate) { - structCounterField - = table[*tableStartingIndex][COL_6_SIZE_OR_OFFSET]; - structCounterIndex = table[*tableStartingIndex][COL_4_STRUCT_INDEX]; - } else { - structCounterField = 0; - structCounterIndex = 0; - } - (*tableStartingIndex)++; // Position at the struct length APITYPE_STRUCT_LEN - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "SMAPI buffer array found: %d bytes \n", arrayByteMax); - TRACE_END_DEBUG(vmapiContextP, line); - - structIndex = table[*tableStartingIndex][COL_4_STRUCT_INDEX]; - outStructSize = table[*tableStartingIndex][COL_6_SIZE_OR_OFFSET]; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Output struct size is %d \n", outStructSize); - TRACE_END_DEBUG(vmapiContextP, line); - - // Figure out where is the ending index of the structure. This will be used in case the - // array is empty or the size of the structure is larger than we expect. (The actual - // structure could be bigger if the next release of SMAPI adds more fields at the end.) - tableMaxIndex = *tableStartingIndex; - while (arrayNestLevel < table[tableMaxIndex + 1][COL_5_NEST_LEVEL] - && APITYPE_END_OF_TABLE != table[tableMaxIndex + 1][COL_1_TYPE]) { - tableMaxIndex++; - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Structure's table max index is %d \n", tableMaxIndex); - TRACE_END_DEBUG(vmapiContextP, line); - - // Find each structure until we reach array max - while (arrayByteCount < arrayByteMax) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Loop to scan buffer for structure data. \n"); - TRACE_END_DEBUG(vmapiContextP, line); - noBufferStructLen = 0; - tableIndex = *tableStartingIndex; - // Start at the field past the array in the table - // next table field should be the array structure size or if no nested inner structure - // the NOBUFFER keyword - if ((APITYPE_STRUCT_LEN != table[tableIndex][COL_1_TYPE]) - && (APITYPE_NOBUFFER_STRUCT_LEN - != table[tableIndex][COL_1_TYPE])) { - printf("table index %d column1 type: %d \n", tableIndex, - table[tableIndex][COL_1_TYPE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - } - structByteCount = 0; - - GET_INT(dataBuffStructSize, parms->smapiBufferCursor); - // If the SMAPI buffer does not contain a nested structure size, then set - // the data pointer back to make the "implied" structure. - if (APITYPE_NOBUFFER_STRUCT_LEN == table[tableIndex][COL_1_TYPE]) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - " There is no inner structure length, so this length %d is first item, back up to re-read it later. \n", - dataBuffStructSize); - TRACE_END_DEBUG(vmapiContextP, line); - parms->smapiBufferCursor -= 4; - noBufferStructLen = 1; // set flag so that correct count at bottom of loop is done - } - - if (mode == scan) { - parms->outStructCount[structIndex]++; - // If the size of the structure has not been filled in, do that now - if (0 == parms->outStructSizes[structIndex]) { - parms->outStructSizes[structIndex] - = table[tableIndex][COL_6_SIZE_OR_OFFSET]; - } - } else { // If populate and structCounterField specified, then fill it in - if (0 == structCounter) { - *(char **) (parms->inStructAddrs[arrayPointerIndex] - + arrayPointerOffset) - = parms->inStructAddrs[structIndex]; - } - if (structCounterField) { - *((int *) (parms->inStructAddrs[structCounterIndex] - + structCounterField)) - = parms->outStructCount[structIndex]; - } - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - if (noBufferStructLen == 1) { - sprintf( - line, - " table index %d implied Array struct index %d first data item size %d\n", - tableIndex, structIndex, dataBuffStructSize); - } else { - sprintf(line, - " table index %d Array struct index %d data size %d\n", - tableIndex, structIndex, dataBuffStructSize); - } - TRACE_END_DEBUG(vmapiContextP, line); - if (dataBuffStructSize == 0) - continue; // Probably rare? - - - tableIndex++; - // Loop until reaching the end of the table or if an imbedded structure size, - // When the data has been all read. - while ((noBufferStructLen == 0 - && (structByteCount < dataBuffStructSize)) - || (noBufferStructLen && (tableIndex <= tableMaxIndex))) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - " noBufferStructLen %d structByteCount %d table index %d \n", - noBufferStructLen, structByteCount, tableIndex); - TRACE_END_DEBUG(vmapiContextP, line); - - // If we are at the end of this table, then adjust the byte count and leave - // this loop. This would happen if there is more data than we expect. (A newer - // version of SMAPI may of added more fields at the end. - if (tableIndex > tableMaxIndex) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - " Reached the end of the table. Unexpected condition. Table index %d \n", - tableIndex); - TRACE_END_DEBUG(vmapiContextP, line); - structByteCount = dataBuffStructSize; - break; - } - - dataType = table[tableIndex][0]; - switch (dataType) { - case APITYPE_INT1: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Int1 found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - if (mode == populate) { - memcpy((parms->inStructAddrs[structIndex] + (structCounter - * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET]), - parms->smapiBufferCursor, 1); - } - parms->smapiBufferCursor += 1; - structByteCount += 1; - break; - - case APITYPE_INT4: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Int4 found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - if (mode == populate) { - GET_INT(*((int*) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "int 4 found Value %d stored at %p(+%d) \n", - *((int *) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->inStructAddrs[structIndex], - table[tableIndex][COL_6_SIZE_OR_OFFSET]); - TRACE_END_DEBUG(vmapiContextP, line); - } else - parms->smapiBufferCursor += 4; - - structByteCount += 4; - break; - - case APITYPE_INT8: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Int8 found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - if (mode == populate) { - GET_64INT(*((long long*) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->smapiBufferCursor); - } else - parms->smapiBufferCursor += 8; - structByteCount += 8; - break; - - case APITYPE_STRING_LEN: - case APITYPE_CHARBUF_LEN: - case APITYPE_C_STR_PTR: - if (APITYPE_C_STR_PTR == dataType) { - temp = strlen(parms->smapiBufferCursor); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " C string found. Length %d\n", temp); - TRACE_END_DEBUG(vmapiContextP, line); - } else { - GET_INT(temp, parms->smapiBufferCursor); - structByteCount += 4; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - if (dataType == APITYPE_CHARBUF_LEN) { - sprintf(line, " Charbuf with length %d found.\n", temp); - } else { - sprintf(line, " String with length %d found.\n", temp); - } - TRACE_END_DEBUG(vmapiContextP, line); - } - - // If the string size is incorrect, display error and return. - if (temp < table[tableIndex][COL_2_MINSIZE]) // Check for less than min first - { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[tableIndex][COL_2_MINSIZE], - table[tableIndex][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - // If max is not -1, then check for max - if (-1 != table[tableIndex][COL_3_MAXSIZE] && temp - > table[tableIndex][COL_3_MAXSIZE]) { - sprintf( - line, - "String size found: %d (@ %p), not in correct range %d-%d \n", - temp, (parms->smapiBufferCursor - 4), - table[tableIndex][COL_2_MINSIZE], - table[tableIndex][COL_3_MAXSIZE]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, line); - return PARSER_ERROR_INVALID_STRING_SIZE; - } - - // If scan update the string byte count - if (mode == scan) { - if (temp > 0) { - parms->outStringByteCount += (temp + 1); - } - if (dataType == APITYPE_CHARBUF_LEN) { - tableIndex++; // Position at the char buf count in the table - } - } else { // If populate then set the char * in struct; copy the string into the buffer - if (temp > 0) { - *((char **) ((parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET]))) - = parms->inStringCursor; - - // If this ia a null terminated string just just strcpy, else use memcpy - if (APITYPE_C_STR_PTR == dataType) { - strcpy(parms->inStringCursor, - parms->smapiBufferCursor); - parms->inStringCursor += temp + 1; - } else { - // Copy the string into the string buffer and add zero terminator - TRACE_START(vmapiContextP, - TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "Memcopying string data from %p into %p for length %d \n", - parms->smapiBufferCursor, - parms->inStringCursor, temp); - TRACE_END_DEBUG(vmapiContextP, line); - memcpy(parms->inStringCursor, - parms->smapiBufferCursor, temp); - parms->inStringCursor += temp; - - if (APITYPE_STRING_LEN == dataType) { - *parms->inStringCursor = '\0'; - parms->inStringCursor++; - TRACE_START(vmapiContextP, - TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "String found Value '%s' next avail struct pointer %p \n", - *((char**) (parms->inStructAddrs[structIndex] - + (structCounter - * outStructSize) - + +table[tableIndex][COL_6_SIZE_OR_OFFSET])), - parms->inStringCursor); - TRACE_END_DEBUG(vmapiContextP, line); - } else // Char buffer, so no need to add null terminator, but must update count field - { - tableIndex++; // Position at the char buf count in the table - *((int*) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])) - = temp; - TRACE_START(vmapiContextP, - TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf( - line, - "Charbuf count at table index %d updated \n", - tableIndex); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - } else { - *((char**) (parms->inStructAddrs[structIndex] - + (structCounter * outStructSize) - + table[tableIndex][COL_6_SIZE_OR_OFFSET])) - = NULL; - } - } - if (APITYPE_C_STR_PTR == dataType) { - temp++; // Add on a byte for zero terminator - } - parms->smapiBufferCursor += temp; - structByteCount += temp; - break; - - case APITYPE_ARRAY_LEN: - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " Array found.\n"); - TRACE_END_DEBUG(vmapiContextP, line); - // Call a subroutine to handle this - if (0 != (rc = handleArrays(vmapiContextP, mode, &tableIndex, - table, parms))) - return rc; - - break; - - case APITYPE_ARRAY_STRUCT_COUNT: // Should not get here, subroutine should be handling this - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - - default: // Error - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsUnexpected, - "Parser found a problem in the internal table\n"); - return PARSER_ERROR_INVALID_TABLE; - break; - } - tableIndex++; - } - structCounter++; - - if (noBufferStructLen) { - arrayByteCount += structByteCount; - } else { - arrayByteCount += structByteCount + 4; // Add in struct len field also - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, " current arrayByteCount subtotal is %d \n", - arrayByteCount); - TRACE_END_DEBUG(vmapiContextP, line); - } - *tableStartingIndex = tableMaxIndex; - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "table starting Index on return is %d \n", - *tableStartingIndex); - TRACE_END_DEBUG(vmapiContextP, line); - return 0; -} - -/** - * This helper function will handle connecting and reading of the SMAPI buffer data. - */ -int getAndParseSmapiBuffer( - struct _VmApiInternalContext* vmapiContextP, - char * * inputPp, // input buffer pointer pointer - int inputSize, tableLayout parserTable, char * parserTableName, - char * * outData //Output pointer for base structure -) { - int sockDesc; - tableParserParms parserParms; - int requestId; - int tempSize; - int * pReturnCode; - int * pReasonCode; - int rc, i, j; - char line[BUFLEN]; - char * smapiOutputP = 0; - rc = 0; - const int SLEEP_TIMES[SEND_RETRY_LIMIT] = { 0, 8, 16, 16 }; - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_PARSER, - TRACELEVEL_DETAILS); - sprintf(line, "Table being parsed: <%s> \n", parserTableName); - TRACE_END_DEBUG(vmapiContextP, line); - - // Initialize our socket - if (0 != (rc = smSocketInitialize(vmapiContextP, &sockDesc))) { - FREE_MEMORY(*inputPp); - return rc; - } - TRACE_START(vmapiContextP, TRACEAREA_SMAPI_ONLY, TRACELEVEL_DETAILS); - sprintf(line, "Socket write starting for <%s> \n", parserTableName); - TRACE_END_DEBUG(vmapiContextP, line); - - // Retry the send if the error detected is ok to retry - for (j = 0;; j++) { - if (0 != (rc = smSocketWrite(vmapiContextP, sockDesc, *inputPp, - inputSize))) { - if (rc == SOCKET_WRITE_RETRYABLE_ERROR) { - if (j < SEND_RETRY_LIMIT) { - // Delay for a while to give SMAPI some time to restart - if (SLEEP_TIMES[j] > 0) { - sleep(SLEEP_TIMES[j]); - } - continue; - } - // Change the internal return code to general write one - rc = SOCKET_WRITE_ERROR; - } - FREE_MEMORY(*inputPp); - TRACE_START(vmapiContextP, TRACEAREA_SMAPI_ONLY, TRACELEVEL_DETAILS); - sprintf( - line, - "Socket write for <%s> did not complete after %d retries \n", - parserTableName, SEND_RETRY_LIMIT); - TRACE_END_DEBUG(vmapiContextP, line); - return rc; - } - break; - } - - FREE_MEMORY(*inputPp); - - // Get the request id - if (0 - != (rc = smSocketRead(vmapiContextP, sockDesc, (char*) &requestId, - 4))) { - sprintf(line, "Socket %d receive of the requestId failed\n", sockDesc); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsUnexpected, line); - return rc; - } - - // Read in the output length - if (0 - != (rc = smSocketRead(vmapiContextP, sockDesc, (char *) &tempSize, - 4))) { - sprintf(line, "Socket %d receive of the buffer length failed\n", - sockDesc); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcIucv, - RsUnexpected, line); - return rc; - } - tempSize = ntohl(tempSize); - - // Read in the rest of the output buffer - if (tempSize >= (3* 4 )) // Must have at least 3 more ints - { - if (0 == (smapiOutputP = malloc(tempSize))) { - sprintf(line, "Insufficiant memory (request=%d bytes)\n", tempSize); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsNoMemory, line); - return MEMORY_ERROR; - } - - if (0 != (rc = smSocketRead(vmapiContextP, sockDesc, smapiOutputP, - tempSize))) { - FREE_MEMORY(smapiOutputP); - return rc; - } - - if (0 != (rc = smSocketTerminate(vmapiContextP, sockDesc))) { - FREE_MEMORY(smapiOutputP); - return rc; - } - - TRACE_START(vmapiContextP, TRACEAREA_SMAPI_ONLY, TRACELEVEL_DETAILS); - pReturnCode = (int *) (smapiOutputP + 4); - pReasonCode = (int *) (smapiOutputP + 8); - sprintf(line, "SMAPI return code %d reason code %d \n", *pReturnCode, - *pReasonCode); - TRACE_END_DEBUG(vmapiContextP, line); - - // Scan the SMAPI output data to get sizes of structures and strings. - // A non zero return code indicates errors. - parserParms.smapiBufferCursor = smapiOutputP; - parserParms.dataBufferSize = tempSize; - - rc = parseBufferWithTable(vmapiContextP, scan, parserTable, - &parserParms); - if (rc != 0) { - // If we have an error because of invalid string size, dump out the - // buffer to help with diagnosis. Limit the dump to 5000 characters - if (rc == PARSER_ERROR_INVALID_STRING_SIZE) { - if (tempSize > 5000) { - dumpArea(vmapiContextP, smapiOutputP, 5000); - } else { - dumpArea(vmapiContextP, smapiOutputP, tempSize); - } - - } - FREE_MEMORY(smapiOutputP); - return rc; - } - - // We can add up all the storage or get each structure independently, do independent for now - for (i = 0; i < MAX_STRUCT_ARRAYS; i++) { - if (parserParms.outStructSizes[i] == 0 - || parserParms.outStructCount[i] == 0) - continue; - parserParms.inStructAddrs[i] = smMemoryGroupAlloc(vmapiContextP, - parserParms.outStructSizes[i] - * parserParms.outStructCount[i]); - if (parserParms.inStructAddrs[i] == 0) { - FREE_MEMORY(smapiOutputP); - sprintf(line, "Insufficiant memory (request=%d bytes)\n", - parserParms.outStructSizes[i] - * parserParms.outStructCount[i]); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return MEMORY_ERROR; - } - } - - // If any string data, just get one chunk of storage for that - if (parserParms.outStringByteCount > 0) { - parserParms.inStringCursor = smMemoryGroupAlloc(vmapiContextP, - parserParms.outStringByteCount); - if (parserParms.inStringCursor == 0) { - FREE_MEMORY(smapiOutputP); - sprintf(line, "Insufficiant memory (request=%d bytes)\n", - parserParms.outStringByteCount); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return MEMORY_ERROR; - } - } - - // Set the output pointer to the level 0 structure's storage - *outData = parserParms.inStructAddrs[0]; - - parserParms.smapiBufferCursor = smapiOutputP; // reset the output cursor pointer - - rc = parseBufferWithTable(vmapiContextP, populate, parserTable, - &parserParms); - if (rc != 0) { - FREE_MEMORY(smapiOutputP); - return rc; - } - - } else { - sprintf(line, "Insufficiant memory (request=%d bytes)/n", - parserParms.outStringByteCount); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, line); - return INVALID_DATA; // Not enough data returned - } - FREE_MEMORY(smapiOutputP); - return 0; -} diff --git a/zhcp/zhcp-build/resource_access/src/smapiUtilities.c b/zhcp/zhcp-build/resource_access/src/smapiUtilities.c deleted file mode 100644 index 5dca5fa..0000000 --- a/zhcp/zhcp-build/resource_access/src/smapiUtilities.c +++ /dev/null @@ -1,2265 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smPublic.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "vmapiSystem.h" -#include "vmapiAsynchronous.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include "smSocket.h" - -#define VMAPILIB "libvmapi.so" - -int vmbkendSockaddrFileInfo(struct _VmApiInternalContext* vmapiContextP, - int readOrWrite, struct sockaddr_in *saddr); - -// Externally visible storage for trace -smTrace externSmapiTraceFlags = { 0 }; - -// Semaphore locking fields for trace and the backend -enum SemaphoreIndex { - ContextSemaphoreIndex = 0, TraceSemaphoreIndex = 1, - BackendSemaphoreIndex = 2, NumberOfSemaphores -}; - -// ------------ Context ones ------------ -static struct sembuf contextSemaphoreReserve[] = { ContextSemaphoreIndex, -1, - SEM_UNDO }; -static const int contextSemaphoreReserveN = sizeof(contextSemaphoreReserve) - / sizeof(contextSemaphoreReserve[0]); - -static struct sembuf contextSemaphoreRelease[] = { ContextSemaphoreIndex, 1, - SEM_UNDO }; -static const int contextSemaphoreReleaseN = sizeof(contextSemaphoreRelease) - / sizeof(contextSemaphoreRelease[0]); - -// ------------ Trace ones ------------ -static struct sembuf traceSemaphoreReserve[] = { TraceSemaphoreIndex, -1, - SEM_UNDO }; -static const int traceSemaphoreReserveN = sizeof(traceSemaphoreReserve) - / sizeof(traceSemaphoreReserve[0]); - -static struct sembuf traceSemaphoreRelease[] = { TraceSemaphoreIndex, 1, - SEM_UNDO }; -static const int traceSemaphoreReleaseN = sizeof(traceSemaphoreRelease) - / sizeof(traceSemaphoreRelease[0]); - -// ------------ VMbackend ones ------------ -static struct sembuf backendSemaphoreReserve[] = { BackendSemaphoreIndex, -1, - SEM_UNDO }; -static const int backendSemaphoreReserveN = sizeof(backendSemaphoreReserve) - / sizeof(backendSemaphoreReserve[0]); - -static struct sembuf backendSemaphoreRelease[] = { BackendSemaphoreIndex, 1, - SEM_UNDO }; -static const int backendSemaphoreReleaseN = sizeof(backendSemaphoreRelease) - / sizeof(backendSemaphoreRelease[0]); - -pthread_mutex_t mutex; -pthread_cond_t thread_initialized_cv; - -int checkAbbreviation(const char* aStringP, - const Abbreviation* anAbbreviationListP, int anAbbreviationN) { - - int x; - int checkL; - int stringL; - - int isAbbreviation = 0; - if (aStringP == 0) - return 0; - - stringL = strlen(aStringP); - - for (x = 0; x < anAbbreviationN; ++x) { - checkL = anAbbreviationListP[x].minimum; - if (checkL > stringL) - continue; - if (0 == strncasecmp(aStringP, anAbbreviationListP[x].nameP, checkL)) { - isAbbreviation = 1; - break; - } - } - - return isAbbreviation; - -} - -int checkBoolean(const char* aStringP) { - - const Abbreviation booleanTrues[] = { { "TRUE", 1 }, { "YES", 1 }, - { "1", 1 } }; - - return checkAbbreviation(aStringP, booleanTrues, (sizeof(booleanTrues) - / sizeof(booleanTrues[0]))); - -} - -int checkPrefixCommand(const char* aCommandP) { - - const Abbreviation prefixCommands[] = { { "REQUEST", 3 }, { "TOSYS", 5 }, { - "TONODE", 6 }, { "ASUSER", 2 }, { "BYUSER", 2 }, { "FORUSER", 3 }, - { "PRESET", 6 }, { "MULTIUSER", 5 }, { "ATNODE", 6 }, - { "ATSYS", 5 } }; - - return checkAbbreviation(aCommandP, prefixCommands, (sizeof(prefixCommands) - / sizeof(prefixCommands[0]))); - -} - -const char* -contextGetMessageFilename(struct _VmApiInternalContext* vmapiContextP, - char* aBufferP, int aBufferS) { - - char line[LINESIZE]; - int len = 0; - const char* msgName = "messages"; - const char* msgSuffixName = ".eng"; // Language-dependent - char* pathP = 0; - int pathL = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Obtain VMAPI environment variable - memset(aBufferP, 0, aBufferS); - pathP = getenv("VMAPI"); - - if (pathP) { - pathL = strlen(pathP); - len = pathL + 12; // Adjust once we know NLS file structure - if (len > aBufferS) { - sprintf( - line, - "contextGetMessageFilename: Insufficient path buffer size; needed %d, have %d.", - len, (aBufferS - 1)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcContext, - RsInternalBufferTooSmall, line); - } - strncpy(aBufferP, pathP, pathL); - if (aBufferP[pathL - 1] == '/') { - strcat(aBufferP, ".cimvm/"); - } else { - strcat(aBufferP, "/.cimvm/"); - } - } else { - strcpy(aBufferP, "/root/.cimvm/"); - } - - strcat(aBufferP, msgName); // Adjust when we know real NLS stuff - strcat(aBufferP, msgSuffixName); - - return aBufferP; - -} - -int createDirectories(const char* aFilenameP) { - - int filenameL = strlen(aFilenameP); - char filename[LINESIZE]; - int rc; - char* sP = 0; - char* eP = 0; - - if (filenameL >= (sizeof(filename) - 1)) - return 0; - - memset(filename, 0, sizeof(filename)); - strcpy(filename, aFilenameP); - - sP = filename; - eP = filename + sizeof(filename) - 1; - while ((sP < eP) && (sP = strchr(sP + 1, '/'))) { - *sP = '\0'; - mkdir(filename, S_IRWXU); - *sP = '/'; - } - - return 0; - -} - -int initializeThreadSemaphores(struct _VmApiInternalContext* vmapiContextP, - const char* aContextNameP, int aCreateFlag) { - char pathAndFile[PATHLENGTH + strlen(CACHE_SEMAPHORE_FILENAME)]; - FILE* idFileP = 0; - int len = 0; - char line[LINESIZE]; - const char* logFilenameP = 0; - union semun { - int val; - struct semid_ds* buf; - ushort* array; - } semArgument; - int semInitRequired = 0; - int pathLength = 0; - char* pathPtr = 0; - int rc = 0; - int savedSize = 0; - - memset(vmapiContextP->path, 0, sizeof(vmapiContextP->path)); // Clear out path string - memset(pathAndFile, 0, sizeof(pathAndFile)); - - // Save the name passed in; into the context if specified - if (strlen(aContextNameP) > 0) { - strncpy(vmapiContextP->name, aContextNameP, sizeof(vmapiContextP->name) - - 1); - } - - // Obtain VMAPI environment variable - pathPtr = getenv("ZVMMAP_VAR"); - if (pathPtr) { // ZVMMAP_VAR is defined - pathLength = strlen(pathPtr); - len = pathLength + strlen(CACHE_SEMAPHORE_DIRECTORY); - if (len > sizeof(pathAndFile)) { - sprintf( - line, - "contextReserve: Insufficient path buffer size; needed %d, have %d.", - len, sizeof(pathAndFile) - 1); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcContext, - RsInternalBufferTooSmall, line); - return PROCESSING_ERROR; - } - strncpy(vmapiContextP->path, pathPtr, sizeof(vmapiContextP->path) - - (strlen(CACHE_SEMAPHORE_DIRECTORY) + 2)); - len = strlen(vmapiContextP->path); - if (vmapiContextP->path[len - 1] == '/') { - strcat(vmapiContextP->path, CACHE_SEMAPHORE_DIRECTORY); // Add on .vmapi/ directory - } else { - strcat(vmapiContextP->path, "/"); - strcat(vmapiContextP->path, CACHE_SEMAPHORE_DIRECTORY); - } - } else { // ZVMMAP_VAR is undefined, set default - strcpy(vmapiContextP->path, CACHE_PATH_DEFAULT); - } - - // Create or obtain semaphore set - strcpy(pathAndFile, vmapiContextP->path); - strcat(pathAndFile, CACHE_SEMAPHORE_FILENAME); - createDirectories(pathAndFile); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: Semaphore file name is %s \n", - pathAndFile); - TRACE_END_DEBUG(vmapiContextP, line); - - // Try to open or create a file that can be used for semaphore handle - FILE* semFileP = fopen(pathAndFile, "r"); - if (!semFileP) { - semFileP = fopen(pathAndFile, "w"); - } - if (semFileP) { - fclose(semFileP); - } - - vmapiContextP->semKey = ftok(pathAndFile, 'V'); - vmapiContextP->semId = semget(vmapiContextP->semKey, 2, 0600); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: semKey = %d \n", - vmapiContextP->semKey); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: semId = %d \n", - vmapiContextP->semId); - TRACE_END_DEBUG(vmapiContextP, line); - - if ((0 > vmapiContextP->semId) && (ENOENT == errno)) { - semInitRequired = 1; - vmapiContextP->semId = semget(vmapiContextP->semKey, - NumberOfSemaphores, 0600 | IPC_CREAT); - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER_SOCKET, - TRACELEVEL_DETAILS); - sprintf(line, "initializeThreadSemaphores: semInitRequired = %d \n", - semInitRequired); - TRACE_END_DEBUG(vmapiContextP, line); - - if (0 > vmapiContextP->semId) { - sprintf( - line, - "contextReserve: Unable to create semaphore array identified by %s; errno=%d text: %s", - pathAndFile, errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - - if (semInitRequired) { - semArgument.val = 1; - rc = semctl(vmapiContextP->semId, TraceSemaphoreIndex, SETVAL, - semArgument); - if (0 > rc) { - sprintf(line, - "Unable to initialize Trace semaphore; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - - rc = semctl(vmapiContextP->semId, BackendSemaphoreIndex, SETVAL, - semArgument); - if (0 > rc) { - sprintf( - line, - "Unable to initialize Backend semaphore; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - rc = semctl(vmapiContextP->semId, ContextSemaphoreIndex, SETVAL, - semArgument); - if (0 > rc) { - sprintf( - line, - "Unable to initialize context semaphore; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotCreated, line); - return PROCESSING_ERROR; - } - } - - // Obtain the Context semaphore before manipulating context related stuff - rc = semop(vmapiContextP->semId, contextSemaphoreReserve, - contextSemaphoreReserveN); - if (rc < 0) { - sprintf(line, - "contextReserve: semop (decrement) failed; errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotObtained, line); - return PROCESSING_ERROR; - } - - // Create or obtain context for the name passed in - strcpy(pathAndFile, vmapiContextP->path); - strcat(pathAndFile, CACHE_DIRECTORY); - createDirectories(pathAndFile); - - // Release the Context semaphore after manipulating context related stuff - rc = semop(vmapiContextP->semId, contextSemaphoreRelease, - contextSemaphoreReleaseN); - if (rc < 0) { - sprintf(line, - "contextReserve: semop (increment) failed, errno=%d text: %s", - errno, strerror(errno)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsSemaphoreNotReleased, line); - return PROCESSING_ERROR; - } - vmapiContextP->contextCreatedFlag = 1; // Set flag to indicate context set up - return 0; -} - -/** - * Unit test code - */ -void dumpArea(struct _VmApiInternalContext* vmapiContextP, void * pstor, - int len) { - unsigned int offset, i, j, k; - char trans[17]; - char line[LINESIZE]; - char phrase[80]; - unsigned char storByte; - int transAvail; - offset = 0; - transAvail = 0; - for (k = 0; k < sizeof(trans); k++) { - trans[k] = '\0'; - } - - storByte = *((char *) pstor); - sprintf(line, "=== dump of area %p for length %d ", pstor, len); - for (i = 0; i < len; i++) { - j = i % 16; - if (j == 0) { - if (transAvail) { - sprintf(phrase, " %s", trans); - strcat(line, phrase); - for (k = 0; k < sizeof(trans); k++) { - trans[k] = '\0'; - } - transAvail = 0; - } - strcat(line, "\n"); - logLine(vmapiContextP, LOGLINE_DEBUG, line); - sprintf(line, "%6d %14p ", offset, (pstor + offset)); - offset += 16; - } else if (0 == (k = i % 4)) { - strcat(line, " "); - } - storByte = *((char*) (pstor + i)); - if (isprint(storByte)) { - trans[j] = storByte; - } else { - trans[j] = '.'; - } - transAvail = 1; - - sprintf(phrase, "%02X", storByte); - strcat(line, phrase); - - } - if (transAvail) { - for (k = j + 1; k < 16; k++) { - if (0 == k % 4) { - strcat(line, " "); - } - strcat(line, " "); - } - sprintf(phrase, " %s", trans); - strcat(line, phrase); - } - strcat(line, "\n"); - logLine(vmapiContextP, LOGLINE_DEBUG, line); -} - -void errorLog(struct _VmApiInternalContext* vmapiContextP, - const char * functionName, const char * lineNumber, int aRc, - int aReason, const char* aLineP) { - - char line[LINESIZE]; - - sprintf(line, "%s:%s %s", functionName, lineNumber, aLineP); - - vmapiContextP->rc = aRc; - vmapiContextP->reason = aReason; - errorLine(vmapiContextP, line); - -} - -void errorLine(struct _VmApiInternalContext* vmapiContextP, const char* aLineP) { - int lineL = strlen(aLineP); - - logLine(vmapiContextP, 'E', aLineP); - - // If this is the first error for this context, save it - if (!vmapiContextP->firstFailureCaptured) { - strncpy(vmapiContextP->strFirstFailureMsg, aLineP, - FIRST_FAILURE_MESSAGE_MAX_LEN); - vmapiContextP->strFirstFailureMsg[FIRST_FAILURE_MESSAGE_MAX_LEN] = '\0'; - vmapiContextP->firstFailureCaptured = 1; // 1:true - } - -} - -char* -getArg(int anIndex, int anArgc, const char** anArgvPP, const char* aDefaultP) { - - int x = anIndex; - - if (x > (anArgc - 1)) - return (char*) aDefaultP; - - return (char*) (anArgvPP[x] ? anArgvPP[x] : aDefaultP); - -} - -Dedicate* -getDedicates(struct _VmApiInternalContext* vmapiContextP) { - - char* itemP = 0; - Record* recordP = 0; - - char* lastP = 0; - char line[LINESIZE]; - char tokenLine[LINESIZE]; - - Dedicate* currentDedicateP = 0; - Dedicate* dedicatesP = 0; - Dedicate* newDedicateP = 0; - - recordP = vmapiContextP->outputStream.currentP; - - while (recordP) { - - strncpy(tokenLine, recordP->data, sizeof(tokenLine)); - - itemP = strtok_r(tokenLine, " ", &lastP); - - if (itemP && (0 == strcmp(itemP, "DEDICATE"))) { - - newDedicateP = calloc(1, sizeof(Dedicate)); - if (newDedicateP == 0) { - while (dedicatesP != 0) { - currentDedicateP = dedicatesP->nextP; - free(dedicatesP); - dedicatesP = currentDedicateP; - } - sprintf(line, "%s: Insufficiant memory (request=%d bytes)", - "getDedicates", sizeof(Dedicate)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return 0; - } - - if (currentDedicateP == 0) { - dedicatesP = newDedicateP; - currentDedicateP = newDedicateP; - } else { - currentDedicateP->nextP = newDedicateP; - currentDedicateP = newDedicateP; - } - newDedicateP->nextP = 0; - - itemP = strtok_r(0, " ", &lastP); - if (itemP) { - sscanf(itemP, "%x", &(newDedicateP->vnum)); - itemP = strtok_r(0, " ", &lastP); - } - - if (itemP) { - sscanf(itemP, "%x", &(newDedicateP->rnum)); - itemP = strtok_r(0, " ", &lastP); - } - - } - - recordP = recordP->nextP; - - } - - return dedicatesP; - -} - -Minidisk* -getMinidisks(struct _VmApiInternalContext* vmapiContextP) { - - char* itemP; - Record* recordP = 0; - - char* lastP = 0; - char line[LINESIZE]; - char tokenLine[LINESIZE]; - - Minidisk* currentMinidiskP = 0; - Minidisk* minidisksP = 0; - Minidisk* newMinidiskP = 0; - - recordP = vmapiContextP->outputStream.firstP; - - while (recordP) { - - strncpy(tokenLine, recordP->data, sizeof(tokenLine)); - itemP = strtok_r(tokenLine, " ", &lastP); - - if (itemP && (0 == strcmp(itemP, "MDISK"))) { - - newMinidiskP = calloc(1, sizeof(Minidisk)); - if (newMinidiskP == 0) { - while (minidisksP != 0) { - currentMinidiskP = minidisksP->nextP; - free(minidisksP); - minidisksP = currentMinidiskP; - } - sprintf(line, "%s: Insufficiant memory (request=%d bytes)", - "getMinidisks", sizeof(Minidisk)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, line); - return 0; - } - - if (currentMinidiskP == 0) { - minidisksP = newMinidiskP; - currentMinidiskP = newMinidiskP; - } else { - currentMinidiskP->nextP = newMinidiskP; - currentMinidiskP = newMinidiskP; - } - - newMinidiskP->nextP = 0; - itemP = strtok_r(0, " ", &lastP); - if (itemP) { - sscanf(itemP, "%x", &(newMinidiskP->address)); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - strncpy(newMinidiskP->type, itemP, sizeof(newMinidiskP->type)); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - sscanf(itemP, "%d", &newMinidiskP->location); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - sscanf(itemP, "%d", &newMinidiskP->extent); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - strncpy(newMinidiskP->volser, itemP, - sizeof(newMinidiskP->volser)); - itemP = strtok_r(0, " ", &lastP); - } - if (itemP) { - strncpy(newMinidiskP->mode, itemP, sizeof(newMinidiskP->mode)); - } - - } - - recordP = recordP->nextP; - - } - - return minidisksP; - -} - -/** - * Return 1 If a real device number is of an OSA type - * 0 Otherwise (or on failure to check) - */ -int isOSA(struct _VmApiInternalContext* vmapiContextP, char* rdev) { - smMemoryGroupContext localMemoryGroup; - smMemoryGroupContext * saveMemoryGroup; - vmApiSystemIoQueryOutput * ptrCommandOutput; - char *tokptr; - char *delim = " "; - char *tok; - int osaFound = 0; - int x; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - - smMemoryGroupInitialize(vmapiContextP); - - if (smSystem_IO_Query(vmapiContextP, rdev, &ptrCommandOutput)) { - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - return osaFound; - } - - // Loop through all the output found looking for "OSA", "OSD", or "IQDC" - // Output string will be "chpid string" or just "chpid" - for (x = 0; x < ptrCommandOutput->chipidCount; x++) { - // Get the chipid id first - tok = strtok_r(ptrCommandOutput->chipidList->vmapiString, delim, - &tokptr); - // See if there is data for this chipid - if (tok = strtok_r(NULL, delim, &tokptr)) { - if (!strcmp(tok, "OSA") || !strcmp(tok, "OSD") || !strcmp(tok, - "IQDC")) { - osaFound = 1; - } - } - } - - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - return osaFound; - -} - -/** - * Append data to a list - */ -void listAppendLine(struct _VmApiInternalContext* vmapiContextP, List* aListP, - const char* aLineP) { - - int lineL = strlen(aLineP); - - Record* newRecordP = smMemoryGroupAlloc(vmapiContextP, sizeof(Record) - + lineL + 1); - if (newRecordP == 0) - return; - - strncpy(newRecordP->data, aLineP, lineL); - - listAppendRecord(aListP, newRecordP); - -} - -/** - * Append data to a list - */ -void listAppendRecord(List* aListP, Record* aRecordP) { - - if (aListP->firstP == 0) { - aListP->firstP = aRecordP; - } else { - if (aListP->currentP == 0) { - aListP->currentP = aListP->firstP; - while (aListP->currentP->nextP) { - aListP->currentP = aListP->currentP->nextP; - } - } - aListP->currentP->nextP = aRecordP; - } - aListP->currentP = aRecordP; - ++(aListP->size); - aRecordP->nextP = 0; - -} - -/** - * Delete the current record from the list - */ -void listDeleteCurrent(List* aListP) { - - Record* currentP = 0; - Record* prevP = 0; - - if (aListP == 0) - return; - - if (aListP->firstP == 0) - return; - - // Current not set yet ? - if (aListP->currentP == 0) - return; - - currentP = aListP->currentP; - if (aListP->firstP == aListP->currentP) { - aListP->currentP = aListP->firstP->nextP; - aListP->firstP = aListP->firstP->nextP; - } else { - // Find the record before aListP->currentP - prevP = aListP->firstP; - while (prevP && (prevP->nextP != currentP)) { - prevP = prevP->nextP; - } - // Remove recordP from list - if (prevP) { - prevP->nextP = currentP->nextP; - } - } - - free(currentP); - --(aListP->size); - -} - -/** - * Dequeue a line from the front of the list - */ -Record* -listDequeueRecord(List* aListP) { - - Record* recordP = 0; - - if (aListP == 0) - return 0; - - if (aListP->firstP == 0) - return 0; - - recordP = aListP->firstP; - - if (recordP == aListP->currentP) { - aListP->currentP = recordP->nextP; - } - - aListP->firstP = recordP->nextP; - - --(aListP->size); - - return recordP; - -} - -/** - * Free all records from a list - */ -void listFree(List* aListP) { - - Record* recordP = aListP->firstP; - Record* nextP = 0; - - while (recordP) { - nextP = recordP->nextP; - free(recordP); - recordP = nextP; - } - - aListP->firstP = 0; - aListP->currentP = 0; - aListP->size = 0; - -} - -/** - * Return Append data to a list - */ -const char* -listNextLine(List* aListP) { - - const Record* recordP = listNextRecord(aListP); - if (recordP == 0) - return 0; - return recordP->data; - -} - -/** - * Return Append data to a list - */ -const Record* -listNextRecord(List* aListP) { - - if (aListP == 0) - return 0; - - if (aListP->currentP == 0) { - // This causes a wrap around after the 0 record was returned once, - // that is, after "end of list" was returned once. - aListP->currentP = aListP->firstP; - } else { - aListP->currentP = aListP->currentP->nextP; - } - - return aListP->currentP; - -} - -/** - * Free all records from a list - */ -void listReset(List* aListP) { - - if (aListP == 0) - return; - - aListP->currentP = 0; - -} - -void logLine(struct _VmApiInternalContext* vmapiContextP, char aSeverity, - const char* aLineP) { - - int blankN = 0; - const char* blanks = " "; - char line[LINESIZE]; - const char* prefix = "+ "; - int prefixL = 0; - int syslogSeverity = LOG_INFO; - struct tm *tP; - struct tm tm; - time_t timeValue; - pid_t pidTrace; - pthread_t myThread; - int temp; - - pidTrace = getpid(); - myThread = pthread_self(); - - switch (aSeverity) { - case 'D': - syslogSeverity = LOG_DEBUG; - break; - case 'E': - syslogSeverity = LOG_ERR; - break; - case 'I': - syslogSeverity = LOG_INFO; - break; - case 'N': - syslogSeverity = LOG_NOTICE; - break; - case 'W': - syslogSeverity = LOG_WARNING; - break; - case 'X': - syslogSeverity = LOG_ERR; - break; - default: - syslogSeverity = LOG_INFO; - break; - } - - if (vmapiContextP->printOffset <= 0) { - sprintf(line, "%d.%lu ", pidTrace, myThread); // add process id and blank - temp = strlen(line); - strncpy(line + temp, aLineP, LINESIZE - temp); - } else { - prefixL = 2 * vmapiContextP->printOffset; - if (prefixL > 10) - prefixL = 10; - snprintf(line, LINESIZE, "%*.s%s\n", prefixL, prefix, aLineP); - } - - openlog(NULL, 0, LOG_LOCAL7); - syslog(syslogSeverity, "%s", line); - closelog(); -} - -void outputLine(struct _VmApiInternalContext* vmapiContextP, - const char* aLineP, int aLogFlag) { - - if (aLogFlag) - logLine(vmapiContextP, ' ', aLineP); - listAppendLine(vmapiContextP, &vmapiContextP->outputStream, aLineP); - -} - -/** - * This function will read the trace file if found and set all the - * trace flags to what is in the file. If a flag is not set in the file - * then that trace is left as it was in the trace structure. - * If the trace file is not found, then this function only sets the - * flag in the context to indicate that this function has been called. - */ -void readTraceFile(struct _VmApiInternalContext* vmapiContextP) { - char pathAndFile[PATHLENGTH + strlen(TRACE_LEVELS_FILE)]; - char* pathP = 0; - int pathLength = 0; - unsigned int newTraceFlags[TRACE_AREAS_COUNT]; - unsigned int newTraceFlagFound[TRACE_AREAS_COUNT]; - char lineData[LINESIZE]; - int lineDataLength; - char line[BUFLEN]; - FILE* traceFileP = 0; - int keywordIndex; - int traceSettingIndex; - int x; - int rc; - char * targetPtr; - - // Init new trace flags array - for (x = 0; x < TRACE_AREAS_COUNT; x++) { - newTraceFlags[x] = 0; - newTraceFlagFound[x] = 0; - } - - // Get the path and file name string for the trace command input - // Default it to the root .cimvm dir - memset(pathAndFile, 0, sizeof(pathAndFile)); - strcpy(pathAndFile, TRACE_LEVELS_FILE_DIRECTORY); // initialize to default path - strcat(pathAndFile, TRACE_LEVELS_FILE); // add on file name - - pathP = getenv("VMAPI"); // Is there a VMAPI environment variable set? - if (pathP) { - pathLength = strlen(pathP) + sizeof(TRACE_LEVELS_FILE) + 1; - if (pathLength > sizeof(pathAndFile)) { - sprintf( - line, - "readTraceFile: Insufficient path buffer size; needed %d, have %d.", - pathLength, sizeof(pathAndFile)); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcContext, - RsInternalBufferTooSmall, line); - return; - } - strncpy(pathAndFile, pathP, pathLength); - if (pathAndFile[pathLength - 1] == '/') { - strcat(pathAndFile, TRACE_LEVELS_FILE); - } else { - strcat(pathAndFile, "/"); - strcat(pathAndFile, TRACE_LEVELS_FILE); - } - } - - // Now open the file and figure out the trace flags to set/reset - traceFileP = fopen(pathAndFile, "r"); - if (traceFileP) { - // Look for keywords and comments in the trace command file - while (fgets(lineData, sizeof(lineData), traceFileP)) { - lineDataLength = strlen(lineData); - - // Ignore all 0 length input - if (0 == lineDataLength) { - continue; - } - - // Ignore comment lines - begin with '#' - if (0 != strncmp(lineData, "#", 1)) { - // Try to find a keyword match - keywordIndex = -1; - for (x = 0; x < TRACE_AREAS_COUNT; x++) { - if (0 == strncmp(lineData, TRACE_KEYWORDS[x], strlen( - TRACE_KEYWORDS[x]))) { - keywordIndex = x; - break; - } - } - // If no keyword found, log an error - if (keywordIndex == -1) { - sprintf(line, - "readTraceFile: Unknown keyword on line: <%s> \n", - lineData); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsFunctionUnknown, line); - return; - } - - targetPtr = strstr(lineData, "="); // Find the = sign - if (0 == targetPtr) { - sprintf(line, "readTraceFile: Missing = on line: <%s> \n", - lineData); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsFunctionUnknown, line); - return; - } - - // Look for a trace settings value - traceSettingIndex = -1; - for (x = 0; x < TRACE_LEVELS_COUNT; x++) { - if (0 != strstr(targetPtr, TRACE_LEVELS[x])) { - traceSettingIndex = x; - break; - } - } - - // If no trace setting keyword found, log an error - if (traceSettingIndex == -1) { - sprintf( - line, - "readTraceFile: Unknown trace setting on line: <%s> \n", - lineData); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsFunctionUnknown, line); - return; - } - - // Now set or reset the bits in the new trace flags variable - if (TRACELEVEL_OFF == traceSettingIndex) // if the trace is to be turned off - { - newTraceFlags[keywordIndex] = 0; - newTraceFlagFound[keywordIndex] = 1; - } else { - newTraceFlags[keywordIndex] - |= TRACE_FLAG_VALUES[traceSettingIndex]; - newTraceFlagFound[keywordIndex] = 1; - } - } - } - - // Set the trace flags pointed to from the context - // If there was a keyword found otherwise skip setting it - for (x = 0; x < TRACE_AREAS_COUNT; x++) { - if (newTraceFlagFound[x]) { - vmapiContextP->smTraceDetails->traceFlags[x] = newTraceFlags[x]; - } - } - - fclose(traceFileP); - - } - vmapiContextP->smTraceDetails->traceFileRead = 1; // Set flag that said we read/tried to read trace settings - return; -} - -char* -strip(char* aLineP, char anOption, char aChar) { - - char* lineP = aLineP; - char* lastP = 0; - int lineL = 0; - int x; - - if (lineP == 0) - return lineP; - - // Strip leading chars - if ((anOption == 'L') || (anOption == 'B')) { - - lineL = strlen(lineP); - if (lineL > 0) { - for (x = 0; x < lineL; ++x, ++lineP) { - if (*lineP != aChar) - break; - } - } - - } - - // Strip trailing chars - if ((anOption == 'T') || (anOption == 'B')) { - - lineL = strlen(lineP); - if (lineL > 0) { - lastP = lineP + lineL - 1; - for (x = lineL; x > 0; --x, --lastP) { - if (*lastP != aChar) - break; - *lastP = 0; - } - } - - } - - return lineP; -} - -void sysinfo(struct _VmApiInternalContext* vmapiContextP, int anArgc, - const char** anArgvPP) { - - char buffer[LINESIZE]; - char* bufferP = 0; - int len = 0; - - FILE* sysinfoP = fopen("/proc/sysinfo", "r"); - if (sysinfoP) { - rewind(sysinfoP); - while (bufferP = fgets(buffer, sizeof(buffer), sysinfoP)) { - len = strlen(bufferP); - if ((len > 0) && (bufferP[len - 1] == '\n')) { - bufferP[len - 1] = 0; - } - outputLine(vmapiContextP, bufferP, 0); - } - fclose(sysinfoP); - } - -} - -int testDigit(char aChar) { - - static char digits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; - int x; - for (x = 0; x < (sizeof(digits) / sizeof(digits[0])); ++x) { - if (aChar == digits[x]) - return 1; - } - - return 0; - -} - -const char* -vmApiMessageText(VmApiInternalContext* contextP) { - const char* noCtxMsgP = "(No message available - VmApi context missing)"; - const char* noMsgP = "(No message available for return/reason code pair)"; - - char emsg[LINESIZE]; - int rc = 0; - int rs = 0; - int x = 0; - - const char* msgFilenameP = 0; - FILE* msgFileP = 0; - char completeMatch[20]; - char rcMatch[20]; - char* msgP = 0; - char* targetP = 0; - char* rcP = 0; - char* rsP = 0; - char rcS[6]; - char rsS[6]; - - if (contextP == 0) - return noCtxMsgP; - - strcpy(contextP->emsg, noMsgP); // Default - - char filename[sizeof(contextP->path) + 15]; // Adjust once NLS filenames settled - - // Message text comes from the translatable message file - char resultLine[LINESIZE]; - int resultLineL = 0; - msgFilenameP = contextGetMessageFilename(contextP, filename, - sizeof(filename)); - if (msgFilenameP) { - msgFileP = fopen(msgFilenameP, "r"); - if (msgFileP) { - // Look for matching 'VMAPI rc reason' in message file - while (fgets(resultLine, sizeof(resultLine), msgFileP)) { - resultLineL = strlen(resultLine); - if (0 != strncmp(resultLine, "#", 1)) { // Ignore comment lines - begin with '#' - if (0 == strncmp(resultLine, "VMAPI", 5)) { // Only if component is VMAPI //strip off second word (rc) and third word (reason) - targetP = strstr(resultLine, " "); // First blank - if (targetP) { - rcP = targetP + 1; - while (rcP && (*rcP != ' ')) - ++rcP; // First blank after rc - strncpy(rcS, targetP + 1, ((rcP) - (targetP + 1) - + 1)); - rc = atoi(rcS); - rsP = rcP + 1; // Skip blank - while (rsP && (*rsP != ' ')) - ++rsP; // First blank after rs - strncpy(rsS, rcP + 1, ((rsP) - (rcP + 1) + 1)); - rs = atoi(rsS); - - if ((rc == contextP->rc) - && (rs == contextP->reason)) { - - strcpy(contextP->emsg, resultLine); - break; - } - - // If no specific reason code matches, use return-code-only - // message. This requires that the rs=0 message for a specific - // return code be placed as the last message for that return - // code in the message file. - if ((rc == contextP->rc) && (rs == 0)) { - strcpy(contextP->emsg, resultLine); - break; - } - } - } - } - - } - // If message file can't be opened or msg isn't in file - return - // with the defaule message set above - } - - } - fclose(msgFileP); - return contextP->emsg; -} - -/** - * Procedure: vmbkendcacheEntryInvalidate - * - * Purpose: Mark the specified cache entry as invalid. - * - * Input: pointer to cache path - * name of the user ID to invalidate - * Output: - * 0 : invalidate performed successfully. - * 1 : invalidate unsuccessful because stat indicated ENOENT - * 2 : invalidate unsuccessful because stat got some other error - * 3 : invalidated by removing cache entry due to fopen failure. - * 4 : the fopen failed and the remove failed also. - * - * Operation: - * . Generate the name of the cache file based on the inputs - * . If the cache file can be opened, write 'Invalid' status to beginning - * . Else try to remove the file - */ -int vmbkendCacheEntryInvalidate(struct _VmApiInternalContext* vmapiContextP, - char *pathP, char *useridP) { - - char cacheEntry[CACHEENTRYLEN]; - char status[] = "INVALID"; - FILE* cFP; - int rc; - int exitrc; - struct stat statBuf; - char line[LINESIZE]; - int scaffold = 0; // If scaffolding wanted: No (0) Yes (1) - - int cacheFileFd; - struct flock fl; - - exitrc = 0; // Initialize to success - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - sprintf(cacheEntry, "%s%.8s.direct", pathP, useridP); - - // If the cache file doesn't exist, nothing to do - rc = stat(cacheEntry, &statBuf); - if (rc == -1) { - // Can't continue but check the reason for the stat failing. - if (errno == ENOENT) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: cache file (%s) does not exist.\n", - cacheEntry); - TRACE_END_DEBUG(vmapiContextP, line); - - return 1; - } else { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: stat() on (%s) got errno (0x%x)\n", - cacheEntry, errno); - TRACE_END_DEBUG(vmapiContextP, line); - - return 2; - } - } - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: About to invalidate cache entry (%s)\n", - cacheEntry); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = remove(cacheEntry); - if (rc == -1) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendCacheEntryInvalidate: remove error on (%s), errno (0x%x)\n", - cacheEntry, errno); - TRACE_END_DEBUG(vmapiContextP, line); - - exitrc = 4; - } else { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendCacheEntryInvalidate: removed cache file (%s)\n", - cacheEntry); - TRACE_END_DEBUG(vmapiContextP, line); - - exitrc = 3; - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return exitrc; -} - -int vmbkendCheck(struct _VmApiInternalContext* vmapiContextP) { - - pid_t pid1, pid2, ppid; - int rc, status; - char buf[LINESIZE + LINESIZE]; - char line[LINESIZE]; - - pthread_t thread; - pthread_attr_t attr; - - rc = 0; - - int backendSemaphoreValue = 0; - void *vmapiPtr = NULL; - - // Check if backend already running and return in this case - backendSemaphoreValue = semctl(vmapiContextP->semId, BackendSemaphoreIndex, - GETVAL, 0); - - if (1 != backendSemaphoreValue) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendCheck: Backend apparently running; passing backend start \n"); - TRACE_END_DEBUG(vmapiContextP, line); - vmapiContextP->checkBackendFlag = 1; // Mark the backend as running - return rc; // Backend running - } - - // If vmbkend daemon not started, start it - // Create a pthread and call the vmbkendMain - vmapiPtr = (void*) dlopen(VMAPILIB, RTLD_NOW); // Load the library - - if (vmapiPtr == NULL) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendCheck: Loading library failed %s .\n", dlerror()); - TRACE_END_DEBUG(vmapiContextP, line); - } - - pthread_attr_init(&attr); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendCheck: Creating a pthread \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - - pthread_mutex_lock(&mutex); - rc = pthread_create(&thread, &attr, vmbkendMain, (void *) vmapiContextP); - - pthread_cond_wait(&thread_initialized_cv, &mutex); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendCheck: pthread created with rc = %d \n", rc); - TRACE_END_DEBUG(vmapiContextP, line); - - return 0; -} - -/** - * Procedure: vmbkendgetCachePath - * - * Purpose: Return the path to the $VMAPI/.vmapi/cache directory, where - * $VMAPI is the VMAPI environment variable. If VMAPI is not - * defined, the current working directory '.' is used. - * - * An example of the directory returned is as follows (note the - * slash at the end): - * - * /foo/bar/.vmapi/cache/ - * - * Input: pointer to string for where to put the cache path - * Output: none - * - * Operation: - * . Get VMAPI environment variable - * . Pull together the cache directory using the VMAPI value. - * - */ -void vmbkendGetCachePath(struct _VmApiInternalContext* vmapiContextP, - char *pathP) { - - char *getenvP = 0; - char line[LINESIZE]; - int retValue; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Obtain path to $VMAPI/.vmapi/cache - // If no (context) path string call to initialize things. - if (1 != vmapiContextP->contextCreatedFlag) { - retValue = initializeThreadSemaphores(vmapiContextP, "", 1); // Create context using no name to override current context name - if (retValue) { - sprintf( - line, - "vmbkendGetCachePath(): context reserve() returned error: %d\n", - retValue); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), RcRuntime, - RsUnexpected, line); - return; - } - } - strcpy(pathP, vmapiContextP->path); - - strcat(pathP, CACHE_DIRECTORY); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendGetCachePath: The cache path is (%s)\n", pathP); - TRACE_END_DEBUG(vmapiContextP, line); - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return; - -} - -void *vmbkendMain(void *context) { - - int argIndex; - int serverSock; - struct sockaddr_in serverSockaddr; - struct sockaddr_in serverSockaddr1; - struct sockaddr_in clientSockaddr; - struct sockaddr_in notificationSocketInfo; - struct sockaddr_in previousSockaddr; - - int socklen; - int rc; - int clientLen; - char readBuffer[BUFLEN]; - char userID[BUFLEN]; - unsigned int useridLength; - int bytesRead; - struct sembuf operations[1]; - - char cmd[BUFLEN]; - unsigned int cmdLength; - char subData[BUFLEN]; - unsigned int subDataLength; - struct in_addr inaddr; - int x; - - int clientSock; - int totalRead; - - char hostid[20]; - unsigned char *ipP = 0; - char path[BUFLEN + 1]; - char cachePath[BUFLEN + 1]; - char userListPath[BUFLEN + 1]; - - time_t ltime; - char line[LINESIZE + LINESIZE]; - pid_t pid; - - char ourIpAddr[20]; - unsigned int ourPort; - smMemoryGroupContext localMemoryGroup; - smMemoryGroupContext * saveMemoryGroup; - vmApiAsynchronousNotificationEnableDmOutput * ptrEnableOutputData; - vmApiAsynchronousNotificationDisableDmOutput * ptrDisableOutputData; - - VmApiInternalContext *vmapiContextP; - - VmApiInternalContext vmapiContext; - smMemoryGroupContext memContext; - extern struct _smTrace externSmapiTraceFlags; - int smrc; - pthread_mutex_lock(&mutex); - - // Expand the macro for time being - memset(&vmapiContext, 0, sizeof(*(&vmapiContext))); - memset(&memContext, 0, sizeof(*(&memContext))); - (&vmapiContext)->memContext = &memContext; - (&vmapiContext)->smTraceDetails - = (struct _smTrace *) &externSmapiTraceFlags; - smrc = smMemoryGroupInitialize(&vmapiContext); - - if (0 == smrc) { - readTraceFile(&vmapiContext); - } else { - logLine(&vmapiContext, 'E', "Unexpected smMemoryGroupInitializeError!"); - } - - vmapiContextP = &vmapiContext; - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "Inside back end thread \n"); - TRACE_END_DEBUG(vmapiContextP, line); - - if (1 != vmapiContextP->contextCreatedFlag) { - rc = initializeThreadSemaphores(vmapiContextP, "", 1); // create context using no name to override current context name - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "Inside back end thread retValue = %d \n", rc); - TRACE_END_DEBUG(vmapiContextP, line); - } - - // Indicate this is the backend - vmapiContextP->isBackend = 1; - - // Obtain the Backend semaphore to before manipulating context related stuff - operations[0].sem_num = BackendSemaphoreIndex; - operations[0].sem_op = -1; - operations[0].sem_flg = SEM_UNDO; - rc = semop(vmapiContextP->semId, operations, sizeof(operations) - / sizeof(operations[0])); - if (rc < 0) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: semop (decrement) failed, errno=%d text: %s", - errno, strerror(errno)); - TRACE_END_DEBUG(vmapiContextP, line); - } - - // OK: ready to go - time(<ime); - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Entry to --> at %s", ctime(<ime)); - TRACE_END_DEBUG(vmapiContextP, line); - - // Build path to the cache directory. - memset(path, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - - // Call routine to remove the cache. - vmbkendRemoveEntireCache(vmapiContextP, cachePath); - - // Do the necessary socket server setup - serverSock = socket(AF_INET, SOCK_DGRAM, 0); - exit_if_error(Socket, serverSock, serverSock); - - memset(&serverSockaddr, 0, sizeof serverSockaddr); - - // Read and use any previous port number that may have - // been set by a previous run of vmbkend. If no previous - // run or error, the value zero is returned. - vmbkendSockaddrFileInfo(vmapiContextP, 0, &previousSockaddr); - serverSockaddr.sin_port = previousSockaddr.sin_port; - serverSockaddr.sin_family = AF_INET; - serverSockaddr.sin_addr.s_addr = htonl(INADDR_ANY); - - rc = bind(serverSock, (struct sockaddr *) &serverSockaddr, - sizeof serverSockaddr); - - if (-1 == rc) { // Bind failure - if (0 == serverSockaddr.sin_port) { - // The bind for an ephemeral port failed. - exit_if_error(Bind, rc, serverSock); - } else { - // We used a previous port and this failed, - // Retry the bind for any ephemeral port. - memset(&serverSockaddr, 0, sizeof serverSockaddr); - serverSockaddr.sin_port = 0; - serverSockaddr.sin_addr.s_addr = htonl(INADDR_ANY); - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - TRACE_END_DEBUG(vmapiContextP, - "vmbkendMain: Retrying bind for sin_port <0>\n"); - rc = bind(serverSock, (struct sockaddr *) &serverSockaddr, - sizeof serverSockaddr); - - exit_if_error(Bind, rc, serverSock); - } - } - - memset(&serverSockaddr1, 0, sizeof serverSockaddr1); - socklen = sizeof serverSockaddr1; - - rc - = getsockname(serverSock, (struct sockaddr *) &serverSockaddr1, - &socklen); - exit_if_error(Getsockname, rc, serverSock); - - // Show the IP address for our system - get_myaddress(¬ificationSocketInfo); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - // Show what port number we are listening on - sprintf(line, "vmbkendMain: Listening on %s:%u", inet_ntoa( - notificationSocketInfo.sin_addr), (unsigned) ntohs( - serverSockaddr1.sin_port)); - TRACE_END_DEBUG(vmapiContextP, line); - - // Set port for notification - notificationSocketInfo.sin_port = serverSockaddr1.sin_port; - - // If we used different information from a previous run - // then: - // - write new info to the file PORT_FILENAME - // - unregister old info with the directory manager. - if ((previousSockaddr.sin_port != notificationSocketInfo.sin_port) - || (previousSockaddr.sin_addr.s_addr - != notificationSocketInfo.sin_addr.s_addr)) { - - // Write new info to PORT_FILENAME - vmbkendSockaddrFileInfo(vmapiContextP, 1, ¬ificationSocketInfo); - - // If previous registration, unregister it - if (0 != previousSockaddr.sin_port) { - sprintf(ourIpAddr, "%s", inet_ntoa(previousSockaddr.sin_addr)); - ourPort = previousSockaddr.sin_port; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - smMemoryGroupInitialize(vmapiContextP); - - rc = smAsynchronous_Notification_Disable_DM(vmapiContextP, "", // IUCV userID and password not needed - 0, // Password length - "", // Password - "ALL", // Target identifier - 1, // Entity_type directory - 2, // UDP communication_type, - ourPort, // Port_number, - ourIpAddr, // IP_address string, - 1, // ASCII encoding, - 0, // Subscriber_data_length, - "", // Subscriber_data, - &ptrDisableOutputData); - if (0 != rc || 0 != ptrDisableOutputData->returnCode) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendMain: call to asynch unregister got rc1 %d rc2 %d \n", - rc, ptrDisableOutputData->returnCode); - TRACE_END_DEBUG(vmapiContextP, line); - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - } - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - } - } // Used different port number - - // Call asynchronous notify RPC to register with the - // directory manager. - sprintf(ourIpAddr, "%s", inet_ntoa(notificationSocketInfo.sin_addr)); - ourPort = notificationSocketInfo.sin_port; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - smMemoryGroupInitialize(vmapiContextP); - - rc = smAsynchronous_Notification_Enable_DM(vmapiContextP, "", // IUCV userID and password not needed - 0, // Password length - "", // Password - "ALL", // Target identifier - 1, // Entity_type directory - 1, // Include subscription type - 2, // UDP subscription_type - ourPort, // Port_number - ourIpAddr, // IP_address - 1, // ASCII encoding - 0, // Subscriber_data_length - "", // Subscriber_data - &ptrEnableOutputData); - if (0 == rc && 0 != ptrEnableOutputData->returnCode) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendMain: call to asynch register got rc1 %d rc2 %d and rs %d\n", - rc, ptrEnableOutputData->returnCode, - ptrEnableOutputData->reasonCode); - TRACE_END_DEBUG(vmapiContextP, line); - - // If Subscription exists... Do not do anything. - if (!ptrEnableOutputData->returnCode == 428) { - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - } - } else if (0 != rc) { - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - - } - - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - // Wait for and handle incoming requests from the - // directory manager. - pthread_cond_signal(&thread_initialized_cv); - pthread_mutex_unlock(&mutex); - for (;;) { - time(<ime); - - // UDP - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: About to receive on %s", ctime(<ime)); - TRACE_END_DEBUG(vmapiContextP, line); - - memset(readBuffer, 0, sizeof readBuffer); - memset(&clientSockaddr, 0, sizeof clientSockaddr); - clientLen = sizeof clientSockaddr; - bytesRead = 0; - useridLength = 0; - - bytesRead = recvfrom(serverSock, readBuffer, sizeof(readBuffer), 0, - (struct sockaddr *) &clientSockaddr, &clientLen); - - if (bytesRead == -1) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: recvfrom got errno %d\n", errno); - TRACE_END_DEBUG(vmapiContextP, line); - break; - } - continue_if_error(Recvfrom, bytesRead, bytesRead); - - strcpy(path, cachePath); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Read %d bytes from %s at time: %s\n", - bytesRead, inet_ntoa(clientSockaddr.sin_addr), ctime(<ime)); - TRACE_END_DEBUG(vmapiContextP, line); - - // If the message is too small, this is an error, go get - // the next message. - if (bytesRead <= LENGTH_OF_USERID_LENGTH_FIELD) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Message is too short"); - TRACE_END_DEBUG(vmapiContextP, line); - continue; - } - - // Pull out the user ID length - useridLength = *(int *) &readBuffer; - useridLength = ntohl(useridLength); - - // Get the user ID - memset(userID, 0, sizeof userID); - strncpy(userID, readBuffer + 4, useridLength); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: User ID length is >%d< and User ID is >%s<\n", - useridLength, userID); - TRACE_END_DEBUG(vmapiContextP, line); - - // Get the command length - cmdLength = *(int *) (readBuffer + 4 + useridLength); - cmdLength = ntohl(cmdLength); - - // Get the command - memset(cmd, 0, sizeof cmd); - strncpy(cmd, readBuffer + 4 + useridLength + 4, cmdLength); - - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Command is >%s<\n", cmd); - TRACE_END_DEBUG(vmapiContextP, line); - - if (strcasecmp(cmd, "add") == 0 || strcasecmp(cmd, "purge") == 0) { - strcpy(userListPath, cachePath); - strcat(userListPath, "users.list"); - rc = remove(userListPath); - if (rc == -1) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: remove error on (%s), errno (0x%x)\n", - userListPath, errno); - TRACE_END_DEBUG(vmapiContextP, line); - } - } - - // Get the subscriber data length - subDataLength - = *(int *) (readBuffer + 4 + useridLength + 4 + cmdLength); - subDataLength = ntohl(subDataLength); - - // Invalidate the cache entry - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, "vmbkendMain: Invalidating cache for user ID (%s)\n", - userID); - TRACE_END_DEBUG(vmapiContextP, line); - - for (x = 0; x < useridLength; ++x) { - userID[x] = tolower(userID[x]); - } - - vmbkendCacheEntryInvalidate(vmapiContextP, path, userID); - - // Clear out the .scan files - } - - // Call asynchronous notify RPC to unregister with the - // directory manager. - sprintf(ourIpAddr, "%s", inet_ntoa(notificationSocketInfo.sin_addr)); - ourPort = notificationSocketInfo.sin_port; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - smMemoryGroupInitialize(vmapiContextP); - - rc = smAsynchronous_Notification_Disable_DM(vmapiContextP, "", // IUCV userID and password not needed - 0, // Password length - "", // password - "ALL", // Target identifier - 1, // Entity_type directory - 2, // UDP communication_type, - ourPort, // Port_number, - ourIpAddr, // IP_address, - 1, // ASCII encoding, - 0, // Subscriber_data_length, - "", // Subscriber_data, - &ptrDisableOutputData); - if (0 != rc || 0 != ptrDisableOutputData->returnCode) { - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendMain: call to asynch unregister got rc1 %d rc2 %d \n", - rc, ptrDisableOutputData->returnCode); - TRACE_END_DEBUG(vmapiContextP, line); - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - close(serverSock); - pthread_exit(NULL); - } - - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - // Close the server socket - TRACE_START(vmapiContextP, - TRACEAREA_BACKGROUND_DIRECTORY_NOTIFICATION_THREAD, - TRACELEVEL_DETAILS); - TRACE_END_DEBUG(vmapiContextP, - "vmbkendMain: About to close() server socket\n"); - rc = close(serverSock); - exit_if_error(Close, rc, rc); - pthread_exit(NULL); -} - -/** - * Procedure: vmbkendremoveCachedScanFiles - * - * Purpose: Remove the ***.scan files. - * - * Input: pointer to cache path - * Output: none - * - * Operation: - * . Build the rm command from the input path - * . Issue the rm command via system() - */ -int vmbkendRemoveCachedScanFiles(struct _VmApiInternalContext* vmapiContextP, - char *pathP) { - - char command[300]; - char line[LINESIZE]; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build the remove command - sprintf(command, "rm -f %s%s", pathP, ALL_SCAN_FILES); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendRemoveCachedScanFiles: About to issue: system(%s)\n", - command); - TRACE_END_DEBUG(vmapiContextP, line); - - if (system(command)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendRemoveCachedScanFiles: Error removing scan files, errno 0x%X: reason(%s)\n", - errno, strerror(errno)); - TRACE_END_DEBUG(vmapiContextP, line); - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - return 0; - -} - -/** - * Procedure: vmbkendremoveEntireCache - * - * Purpose: Remove all cache entries from the cache directory. - * - * Input: pointer to the cache directory - * Output: none - * - * Operation: - * . Build rm command from input cache directory - * . Issue the rm command via system() - */ -void vmbkendRemoveEntireCache(struct _VmApiInternalContext* vmapiContextP, - char *cachePathP) { - - char command[300]; - char line[LINESIZE]; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build the remove command - sprintf(command, "rm -rf %s*", cachePathP); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendRemoveEntireCache: About to issue: system(%s)\n", - command); - TRACE_END_DEBUG(vmapiContextP, line); - - if (system(command)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendRemoveEntireCache: Error removing file, errno 0x%X: reason(%s)\n", - errno, strerror(errno)); - TRACE_END_DEBUG(vmapiContextP, line); - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return; -} - -/** - * Procedure: vmbkendSockaddrFileInfo - * - * Purpose: Save new or retrieve previous bind information to or from - * the file defined by $VMAPI/PORT_FILENAME. - * - * Input: int readOrWrite : 0 = read it; 1 = write it - * sockaddr_in saddr: If readOrWrite is read, then on input this is - * is the address of where to store the retrieved bind info. - * If readOrWrite is write, then on input this is the address of - * the sockaddr_in containing the bind info to save. - * - * Output: rc = 0 ; success; if read then saddr contains the read value. - * if write, then the file is updated. - * rc = -1 ; failure; if read, saddr value returned is zeroes. - * if write, saddr is unchanged. - * - * Operation: - * . Get the path to the file $VMAPI/.vmapi/PORT_FILENAME - * . Open the file read or write based on the value of readOrWrite input - * . If error, - * - if read, set saddr to zeroes - * - return -1 - * . If read then read the info - * Else write the info - * . Close the file. - */ -int vmbkendSockaddrFileInfo(struct _VmApiInternalContext* vmapiContextP, - int readOrWrite, struct sockaddr_in *saddr) { - - FILE *fileP = (FILE *) NULL; - char fName[BUFLEN + 1]; - char *getenvP = 0; - int rc = 0; - char line[LINESIZE]; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - strcpy(fName, vmapiContextP->path); - strcat(fName, PORT_FILENAME); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: PORT_FILENAME %s \n", fName); - TRACE_END_DEBUG(vmapiContextP, line); - - errno = 0; - if (0 == readOrWrite) { // Read - // If error reading record, return saddr value of zeroes - memset(saddr, 0, sizeof(struct sockaddr_in)); - fileP = fopen(fName, "r"); - } else { - fileP = fopen(fName, "w"); - } - - if (fileP == (FILE *) NULL) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendSockaddrFileInfo: Errno %d opening %s for %s()\n", - errno, fName, (readOrWrite == 0 ? "read" : "write")); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = -1; - goto exit_error2; - } - - if (readOrWrite == 0) { // read - if (EOF == fscanf(fileP, "%x:%hu", &(saddr->sin_addr.s_addr), - &(saddr->sin_port))) { - // If error reading record, return saddr value of zeroes - memset(saddr, 0, sizeof(struct sockaddr_in)); - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf(line, - "vmbkendSockaddrFileInfo: Errno %d reading file %s\n", - errno, fName); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = -1; - goto exit_error1; - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: Read %x:%hu\n", - saddr->sin_addr.s_addr, saddr->sin_port); - TRACE_END_DEBUG(vmapiContextP, line); - - } else { // Write - if (-1 == fprintf(fileP, "%x:%hu", saddr->sin_addr.s_addr, - saddr->sin_port)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, - TRACELEVEL_DETAILS); - sprintf( - line, - "vmbkendSockaddrFileInfo: Errno %d writing %x:%hu to %s\n", - errno, saddr->sin_addr.s_addr, saddr->sin_port, fName); - TRACE_END_DEBUG(vmapiContextP, line); - - rc = -1; - goto exit_error1; - } - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: Wrote %x:%hu\n", - saddr->sin_addr.s_addr, saddr->sin_port); - TRACE_END_DEBUG(vmapiContextP, line); - } - - exit_error1: if (EOF == fclose(fileP)) { - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(line, "vmbkendSockaddrFileInfo: Errno %d closing file %s()\n", - errno, fName); - TRACE_END_DEBUG(vmapiContextP, line); - } - exit_error2: TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - return (rc); -} - -void waitForPendingWorkunits(struct _VmApiInternalContext* vmapiContextP, - int waitIntervalInSeconds) // 0 = wait forever -{ - - int argN = 2; - const char* args[2]; - char line[LINESIZE]; - int maxRc = 0; - int maxReason = 0; - int x = 0; - int workunitsPending = 1; - int workunitId; - int duration; - int interval; - int rc; - time_t startTime; - - smMemoryGroupContext localMemoryGroup; - smMemoryGroupContext * saveMemoryGroup; - vmApiQueryAsynchronousOperationDmOutput * ptrQueryAsynchOutputData; - - // Duration == 0 is assumed as infinite duration - duration = waitIntervalInSeconds; - time(&startTime); - - while (workunitsPending && duration >= 0) { - - workunitsPending = 0; - - for (x = 0; (x < (sizeof(vmapiContextP->pendingWorkunits) - / sizeof(vmapiContextP->pendingWorkunits[0]))); ++x) { - - if (vmapiContextP->pendingWorkunits[x] == 0) - continue; - - workunitId = vmapiContextP->pendingWorkunits[x]; - - vmapiContextP->rc = 0; - vmapiContextP->reason = 0; - - saveMemoryGroup = vmapiContextP->memContext; - vmapiContextP->memContext = &localMemoryGroup; - - smMemoryGroupInitialize(vmapiContextP); - if (0 != (rc = smQuery_Asychronous_Operation_DM(vmapiContextP, - "", // Userid is not required for IUCV - 0, // Length 0; no password of IUCV - "", // No password - vmapiContextP->useridForAsynchNotification, workunitId, - &ptrQueryAsynchOutputData))) { - } - - vmapiContextP->rc = ptrQueryAsynchOutputData->returnCode; - vmapiContextP->reason = ptrQueryAsynchOutputData->reasonCode; - - // Since the only result data we care about is the return and reason codes, we can - // free any working memory now. - smMemoryGroupFreeAll(vmapiContextP); - smMemoryGroupTerminate(vmapiContextP); - vmapiContextP->memContext = saveMemoryGroup; - - // check for finished operation - if ((vmapiContextP->rc == 0) && (vmapiContextP->reason == 100)) { - vmapiContextP->pendingWorkunits[x] = 0; - continue; - } - - // Check for ongoing operation - if ((vmapiContextP->rc == 0) && (vmapiContextP->reason == 104)) { - workunitsPending = 1; // At least this one - continue; - } - - // Check for failed operation - if ((vmapiContextP->rc == 0) && (vmapiContextP->reason == 108)) { - vmapiContextP->rc = 200; // Set failed image operation error code - vmapiContextP->reason = 0; - } - - // Here when an error occurred - // The workunit is assumed to be either finished or failed, - // that is it is not assumed to be ongoing any more. - if ((vmapiContextP->rc == maxRc) && (vmapiContextP->reason - > maxReason)) { - maxReason = vmapiContextP->reason; - } else if (vmapiContextP->rc > maxRc) { - maxRc = vmapiContextP->rc; - maxReason = vmapiContextP->reason; - } - - } - - interval = SleepInterval; - if ((duration > 0) && (interval > duration)) - interval = duration; - - if (workunitsPending && (interval > 0)) { - - sleep(interval); - - } - - if (duration > 0) { - duration -= interval; - // Since == 0 is assumed to be indefinite set -1 in this case - if (duration == 0) - duration = -1; - } - - } - - // Quickfix to overcome problems on tmcc system - sleep(5); - - vmapiContextP->rc = maxRc; - vmapiContextP->reason = maxReason; - -} - -/** - * A valid cache file has good time interval and no "INVALID" PAS0304 - * file is closed for stat to work - */ -int cacheFileValid(struct _VmApiInternalContext* vmapiContextP, - const char* cFNameP) { - - int defaultTimeLimit = 5000; // Seconds = approx 1.5 hours - int timeLimit = 0; - struct stat statbuf; - time_t currentTime; - double fileAgeSeconds = 0; - time_t fileTime = 0; - unsigned int x = 0; - - if (getenv("EPP_CACHE_TIMELIMIT")) { - timeLimit = atoi(getenv("EPP_CACHE_TIMELIMIT")); - } else { - timeLimit = defaultTimeLimit; - } - - if (-1 == time(¤tTime)) - return 0; // Current time failed - - if (-1 == stat(cFNameP, &statbuf)) - return 0; // Stat failed - - fileTime = statbuf.st_mtime; - - fileAgeSeconds = difftime(currentTime, fileTime); - - if ((fileAgeSeconds < 0) || (fileAgeSeconds > timeLimit)) - return 0; - - return 1; -} diff --git a/zhcp/zhcp-build/resource_access/src/startvs.c b/zhcp/zhcp-build/resource_access/src/startvs.c deleted file mode 100644 index 73a3cc9..0000000 --- a/zhcp/zhcp-build/resource_access/src/startvs.c +++ /dev/null @@ -1,73 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Logs on the specified virtual server. - * - * @param $1: The name of the guest which is to be logged on - * - * @return 0 If the image is powered on upon completion - * 1 If given invalid parameters - * 2 If power-on failed - */ -int main(int argC, char* argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get the virtual server name - char* imageName = argV[1]; - // Check if the virtual server name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Starting %s... ", imageName); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageActivateOutput* output; - - // Log on virtual server - int rc = smImage_Activate(&context, "", 0, "", // Authorizing user, password length, password. - imageName, // Image name. - &output); - - int rtnCode = output->common.returnCode; - int rsnCode = output->common.reasonCode; - - // If return code = 200 and reason code = 8, virtual server is logged on - if (rc || (output->common.returnCode && output->common.returnCode != 200 - || (output->common.reasonCode && output->common.reasonCode != 8))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/stopvs.c b/zhcp/zhcp-build/resource_access/src/stopvs.c deleted file mode 100644 index a28d9f5..0000000 --- a/zhcp/zhcp-build/resource_access/src/stopvs.c +++ /dev/null @@ -1,69 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Log off the specified virtual server. - * - * @param $1: The z/VM guest ID of the virtual server which is to be stopped - * - * @return 0 If the image is powered off upon completion - * 1 If given invalid parameters - * 2 If power-off failed - */ -int main(int argC, char* argV[]) { - - if (argC != 2) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - // Get the virtual server name - char* imageName = argV[1]; - // Check if the virtual server name is between 1 and 8 characters - if (isImageNameInvalid(imageName)) - return 1; - - printf("Stopping %s... ", imageName); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeactivateOutput* output; - - // Log off virtual server - int rc = smImage_Deactivate(&context, "", 0, "", // Authorizing user, password length, password. - imageName, "IMMED", // Immediate deactivation. - &output); - - if (rc || (output->common.returnCode && output->common.returnCode != 200 - || (output->common.reasonCode && output->common.reasonCode != 12))) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->common.returnCode, - output->common.reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/undedicatedevice.c b/zhcp/zhcp-build/resource_access/src/undedicatedevice.c deleted file mode 100644 index 82683b6..0000000 --- a/zhcp/zhcp-build/resource_access/src/undedicatedevice.c +++ /dev/null @@ -1,66 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * Removes a dedicated device from a virtual image's directory entry. - * - * @param $1: The name of the guest from which a device is to be removed - * @param $2: The virtual device address assigned to the device - * - * @return 0 If the dedicated device was removed successfully - * 1 If given invalid parameters - * 2 If device undedication failed. - */ -int main(int argC, char* argV[]) { - - if (argC != 6) { - printf("Error: Wrong number of parameters\n"); - return 1; - } - - char* image = argV[1]; - char* vdev = argV[2]; - - if (isImageNameInvalid(image)) - return 1; - - printf("Removing device %s on %s... ", vdev, image); - - VmApiInternalContext context; - - // Initialize context - extern struct _smTrace externSmapiTraceFlags; - smMemoryGroupContext memContext; - memset(&context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - context.smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context.memContext = &memContext; - - vmApiImageDeviceUndedicateDmOutput* output; - - int rc = smImage_Device_Undedicate_DM(&context, "", 0, "", // Authorizing user, password length, password. - image, vdev, &output); - - if (rc || output->returnCode || output->reasonCode) { - printf("Failed\n"); - - rc ? printf(" Return Code: %d\n", rc) : printf(" Return Code: %d\n" - " Reason Code: %d\n", output->returnCode, output->reasonCode); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 2; - } else { - printf("Done\n"); - - // Release context - smMemoryGroupFreeAll(&context); - smMemoryGroupTerminate(&context); - - return 0; - } -} diff --git a/zhcp/zhcp-build/resource_access/src/virtualImage.h b/zhcp/zhcp-build/resource_access/src/virtualImage.h deleted file mode 100644 index 48b5416..0000000 --- a/zhcp/zhcp-build/resource_access/src/virtualImage.h +++ /dev/null @@ -1,70 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include -#include "smPublic.h" -#include "vmapiSystem.h" -#include "vmapiImage.h" -#include "vmapiVirtual.h" -#include "smPublic.h" -#include "vmapiAsynchronous.h" -#include "vmapiAuthorization.h" -#include "vmapiCheckAuthentication.h" -#include "vmapiDirectoryManager.h" -#include "vmapiName.h" -#include "vmapiProfile.h" -#include "vmapiPrototype.h" - -/* Check if Smapi is up and running - *****************************************************************************************/ -int checkSmapi(VmApiInternalContext vmapiContext); - -/* Use Profile_Create_DM to create a profile directory entry to be included in - * the definition of a virtual image in the directory. - *****************************************************************************************/ -int createProfile(VmApiInternalContext vmapiContext); - -/* Use Prototype_Create_DM to create a new virtual image prototype - *****************************************************************************************/ -int createProto(VmApiInternalContext vmapiContext); - -/* Use Image_Create_DM to define a new virtual image in the directory - *****************************************************************************************/ -int createImage(VmApiInternalContext vmapiContext, char * argV); - -/* Use Prototype_Name_Query_DM to obtain a list of names of defined prototypes - *****************************************************************************************/ -int queryProto(VmApiInternalContext vmapiContext, char * argV); - -/* Use Profile_Query_DM to query a profile directory entry - *****************************************************************************************/ -int queryProfile(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Query_DM to obtain a virtual image’s directory entry - *****************************************************************************************/ -int queryImage(VmApiInternalContext vmapiContext, char * argV); - -/* Use Profile_Delete_DM to delete a profile directory entry - *****************************************************************************************/ -int deleteProfile(VmApiInternalContext vmapiContext, char * argV); - -/* Use Prototype_Delete_DM to delete an image prototype - *****************************************************************************************/ -int deleteProto(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Delete_DM to delete a virtual image's definition from the directory - *****************************************************************************************/ -int deleteImage(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Disk_Create_DM to add a disk to a virtual image’s directory entry - *****************************************************************************************/ -int addDisk(VmApiInternalContext vmapiContext, char * argV); - -/* Use Image_Query_DM to obtain a virtual image’s directory entry - *****************************************************************************************/ -void getImage(VmApiInternalContext vmapiContext, - vmApiImageRecord imageRecord[], char * argV); - -/* Internal function to display error text to console - *****************************************************************************************/ -static void displayErrorText(int errorCode); - diff --git a/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationDisableDm.c b/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationDisableDm.c deleted file mode 100644 index fae3fa1..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationDisableDm.c +++ /dev/null @@ -1,105 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAsynchronous.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Asynchronous_Notification_Disable_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAsynchronousNotificationDisableDmOutput - -/** - * Asynchronous_Notification_Disable_DM SMAPI interface - */ -int smAsynchronous_Notification_Disable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationDisableDmOutput ** outData) { - const char * const functionName = "Asynchronous_Notification_Disable_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - // The input buffer size of the VMAPI socket call is calculated by adding up all the - // field lengths and data (see System management application programming manual for details) - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 + 1 + 4 + 4 - + strlen(ip_address) + 1 + 4 + subscriber_data_length; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = entity_type; // Entity_type int1 - cursor++; - - *cursor = communication_type; // Communication_type int1 - cursor++; - - PUT_INT(port_number, cursor); // Port_number int4 - - tempSize = strlen(ip_address); // IP_address 7..15 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, ip_address, tempSize); - cursor += tempSize; - - *cursor = encoding; // Encoding - cursor++; - - tempSize = subscriber_data_length; // Subscriber_data 0..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, subscriber_data, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationEnableDm.c b/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationEnableDm.c deleted file mode 100644 index ecc62af..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationEnableDm.c +++ /dev/null @@ -1,106 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAsynchronous.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Asynchronous_Notification_Enable_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAsynchronousNotificationEnableDmOutput - -/** - * Asynchronous_Notification_Enable_DM SMAPI interface - */ -int smAsynchronous_Notification_Enable_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char subscription_type, char communication_type, - int port_number, char * ip_address, char encoding, - int subscriber_data_length, char * subscriber_data, - vmApiAsynchronousNotificationEnableDmOutput ** outData) { - const char * const functionName = "Asynchronous_Notification_Enable_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 + 1 + 1 + 4 + 4 - + strlen(ip_address) + 1 + 4 + subscriber_data_length; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = entity_type; // Entity_type int1 - cursor++; - - *cursor = subscription_type; // Subscription_type int1 - cursor++; - - *cursor = communication_type; // Communication_type int1 - cursor++; - - PUT_INT(port_number, cursor); // Port_number int4 - - tempSize = strlen(ip_address); // IP_address 7..15 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, ip_address, tempSize); - cursor += tempSize; - - *cursor = encoding; // Encoding - cursor++; - - tempSize = subscriber_data_length; // Subscriber_data 0..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, subscriber_data, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationQueryDm.c deleted file mode 100644 index c148a76..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiAsynchronousNotificationQueryDm.c +++ /dev/null @@ -1,105 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAsynchronous.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Asynchronous_Notification_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAsynchronousNotificationQueryDmOutput - -/** - * Asynchronous_Notification_Query_DM SMAPI interface - */ -int smAsynchronous_Notification_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char entity_type, char communication_type, int port_number, - char * ip_address, char encoding, int subscriber_data_length, - char * subscriber_data, - vmApiAsynchronousNotificationQueryDmOutput ** outData) { - const char * const functionName = "Asynchronous_Notification_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 + 1 + 4 + 4 - + strlen(ip_address) + 1 /* Encoding */+ 4 + subscriber_data_length; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - tempSize = strlen(functionName); - - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = entity_type; // Entity_type int1 - cursor++; - - *cursor = communication_type; // Communication_type int1 - cursor++; - - PUT_INT(port_number, cursor); // Port_number int4 - - tempSize = strlen(ip_address); // IP_address 7..15 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, ip_address, tempSize); - cursor += tempSize; - - *cursor = encoding; // Encoding - cursor++; - - tempSize = subscriber_data_length; // Subscriber_data 0..64 chars - PUT_INT(tempSize, cursor); - - if (tempSize > 0) { - memcpy(cursor, subscriber_data, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListAdd.c b/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListAdd.c deleted file mode 100644 index d22c0fd..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListAdd.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAuthorization.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Authorization_List_Add_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAuthorizationListAddOutput - -/** - * Authorization_List_Add SMAPI interface - */ -int smAuthorization_List_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListAddOutput ** outData) { - const char * const functionName = "Authorization_List_Add"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + strlen(for_id) + 4 + strlen(function_id); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(for_id); // For_id 1..8 or 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, for_id, tempSize); - cursor += tempSize; - - tempSize = strlen(function_id); // Function_id 1..64 OR 1..* chars - PUT_INT(tempSize, cursor); - memcpy(cursor, function_id, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListQuery.c deleted file mode 100644 index 0e493e4..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListQuery.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAuthorization.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Authorization_List_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAuthorizationListQueryOutput - -/** - * Authorization_List_Query SMAPI interface - */ -int smAuthorization_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListQueryOutput ** outData) { - const char * const functionName = "Authorization_List_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + strlen(for_id) + 4 + strlen(function_id); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(for_id); // For_id 0..8 or 0..64 or 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, for_id, tempSize); - cursor += tempSize; - - tempSize = strlen(function_id); // Function_id 0..64 OR 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, function_id, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListRemove.c b/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListRemove.c deleted file mode 100644 index 64a3415..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiAuthorizationListRemove.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiAuthorization.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Authorization_List_Remove_Layout -#define OUTPUT_STRUCTURE_NAME vmApiAuthorizationListRemoveOutput - -/** - * Authorization_List_Remove SMAPI interface - */ -int smAuthorization_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * for_id, char * function_id, - vmApiAuthorizationListRemoveOutput ** outData) { - const char * const functionName = "Authorization_List_Remove"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + strlen(for_id) + 4 + strlen(function_id); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(for_id); // For_id 1..8 or 1..64 or 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, for_id, tempSize); - cursor += tempSize; - - tempSize = strlen(function_id); // Function_id 1..64 OR 1 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, function_id, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiCheckAuthentication.c b/zhcp/zhcp-build/resource_access/src/vmapiCheckAuthentication.c deleted file mode 100644 index 1c3132d..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiCheckAuthentication.c +++ /dev/null @@ -1,71 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiCheckAuthentication.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Check_Authentication_Layout -#define OUTPUT_STRUCTURE_NAME vmApiCheckAuthenticationOutput - -/** - * Check_Authentication_DM SMAPI interface - */ -int smCheck_Authentication(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - vmApiCheckAuthenticationOutput ** outData) { - const char * const functionName = "Check_Authentication"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c b/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c deleted file mode 100644 index e262981..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDefineDm.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagDefineDmOutput - -/** - * Directory_Manager_Local_Tag_Define_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_ordinal, char createOrChange, - vmApiDirectoryManagerLocalTagDefineDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name) + 4 + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - PUT_INT(tag_ordinal, cursor); - - *cursor = createOrChange; // Create or change request - *cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c deleted file mode 100644 index 394561c..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagDeleteDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagDeleteDmOutput - -/** - * Directory_Manager_Local_Tag_Delete_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, vmApiDirectoryManagerLocalTagDeleteDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c deleted file mode 100644 index 2a9f18b..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagQueryDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagQueryDmOutput - -/** - * Directory_Manager_Local_Tag_Query_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, vmApiDirectoryManagerLocalTagQueryDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c b/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c deleted file mode 100644 index 18d20fb..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerLocalTagSetDm.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Local_Tag_Set_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerLocalTagSetDmOutput - -/** - * Directory_Manager_Local_Tag_Set_DM SMAPI interface - */ -int smDirectory_Manager_Local_Tag_Set_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * tag_name, int tag_value_length, char * tag_value, - vmApiDirectoryManagerLocalTagSetDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Local_Tag_Set_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - tag_name) + 4 + tag_value_length; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(tag_name); // Tag_name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_name, tempSize); - cursor += tempSize; - - tempSize = tag_value_length; // Tag_value 1..240 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, tag_value, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerSearchDm.c b/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerSearchDm.c deleted file mode 100644 index fbf9bab..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerSearchDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Search_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerSearchDmOutput - -/** - * Directory_Manager_Search_DM SMAPI interface - */ -int smDirectory_Manager_Search_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int search_pattern_length, - char * search_pattern, vmApiDirectoryManagerSearchDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Search_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + search_pattern_length; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = search_pattern_length; // Search_pattern 1..72 charNA - PUT_INT(tempSize, cursor); - memcpy(cursor, search_pattern, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c b/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c deleted file mode 100644 index cc1f6b8..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiDirectoryManagerTaskCancelDm.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiDirectoryManager.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Directory_Manager_Task_Cancel_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiDirectoryManagerTaskCancelDmOutput - -/** - * Directory_Manager_Task_Cancel_DM SMAPI interface - */ -int smDirectory_Manager_Task_Cancel_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operation_id, vmApiDirectoryManagerTaskCancelDmOutput ** outData) { - const char * const functionName = "Directory_Manager_Task_Cancel_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - PUT_INT(operation_id, cursor); - cursor += 4; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiIPaddrGet.c b/zhcp/zhcp-build/resource_access/src/vmapiIPaddrGet.c deleted file mode 100644 index 84ac556..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiIPaddrGet.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiSystem.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME IPaddr_Get_Layout -#define OUTPUT_STRUCTURE_NAME vmApiIPaddrGetOutput - -/** - * Virtual_Network_Query_OSA SMAPI interface - */ -int smIPaddr_Get(struct _VmApiInternalContext* vmapiContextP, - vmApiIPaddrGetOutput ** outData) { - const char * const functionName = "IPaddr_Get"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageActivate.c b/zhcp/zhcp-build/resource_access/src/vmapiImageActivate.c deleted file mode 100644 index a94498f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageActivate.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Activate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageActivateOutput - -/** - * Image_Activate SMAPI interface - */ -int smImage_Activate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageActivateOutput ** outData) { - const char * const functionName = "Image_Activate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 or 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageActiveConfigurationQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiImageActiveConfigurationQuery.c deleted file mode 100644 index 7561e1e..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageActiveConfigurationQuery.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Active_Configuration_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageActiveConfigurationQueryOutput - -/** - * Image_Active Configiration Query SMAPI interface - */ -int smImage_Active_Configuration_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageActiveConfigurationQueryOutput ** outData) { - const char * const functionName = "Image_Active_Configuration_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (userid) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefine.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefine.c deleted file mode 100644 index 5bd08bf..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefine.c +++ /dev/null @@ -1,87 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Define_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDefineOutput - -/** - * Image_CPU_Define SMAPI interface - */ -int smImage_CPU_Define(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char cpuType, - vmApiImageCpuDefineOutput ** outData) { - const char * const functionName = "Image_CPU_Define"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress) + 1; /* CPU type */ - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - *cursor = cpuType; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefineDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefineDm.c deleted file mode 100644 index e293d50..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDefineDm.c +++ /dev/null @@ -1,102 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDefineDmOutput - -/** - * Image_CPU_Define_DM SMAPI interface - */ -int smImage_CPU_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, char baseCpu, char * cpuId, - char dedicateCpu, char cryptoCpu, - vmApiImageCpuDefineDmOutput ** outData) { - const char * const functionName = "Image_CPU_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress) + 1 /* Base CPU */+ 4 + strlen(cpuId) + 1 - /* Dedicate CPU */+ 1; /* Crypto */ - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - *cursor = baseCpu; - cursor++; - - tempSize = strlen(cpuId); // CPU ID 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, cpuId, tempSize); - cursor += tempSize; - } - - *cursor = dedicateCpu; - cursor++; - - *cursor = cryptoCpu; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDelete.c deleted file mode 100644 index 7931c0f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDelete.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDeleteOutput - -/** - * Image_CPU_Delete SMAPI interface - */ -int smImage_CPU_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteOutput ** outData) { - const char * const functionName = "Image_CPU_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // UserID 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDeleteDm.c deleted file mode 100644 index 5f499b5..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuDeleteDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuDeleteDmOutput - -/** - * Image_CPU_Delete_DM SMAPI interface - */ -int smImage_CPU_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuDeleteDmOutput ** outData) { - const char * const functionName = "Image_CPU_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuQuery.c deleted file mode 100644 index 90c6067..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuQuery.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuQueryOutput - -/** - * Image_CPU_Query SMAPI interface - */ -int smImage_CPU_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageCpuQueryOutput ** outData) { - const char * const functionName = "Image_CPU_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuQueryDm.c deleted file mode 100644 index d53e93b..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuQueryDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuQueryDmOutput - -/** - * Image_CPU_Query_DM SMAPI interface - */ -int smImage_CPU_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * cpuAddress, - vmApiImageCpuQueryDmOutput ** outData) { - const char * const functionName = "Image_CPU_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - cpuAddress); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(cpuAddress); // CPU address 1..2 - PUT_INT(tempSize, cursor); - memcpy(cursor, cpuAddress, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuSetMaximumDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCpuSetMaximumDm.c deleted file mode 100644 index e2b3995..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCpuSetMaximumDm.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_CPU_Set_Maximum_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCpuSetMaximumDmOutput - -/** - * Image_CPU_Set_Maximum_DM SMAPI interface - */ -int smImage_CPU_Set_Maximum_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int maxCpus, - vmApiImageCpuSetMaximumDmOutput ** outData) { - const char * const functionName = "Image_CPU_Set_Maximum_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* Max CPUs */; - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - PUT_INT(maxCpus, cursor); - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageCreateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageCreateDm.c deleted file mode 100644 index 3064b28..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageCreateDm.c +++ /dev/null @@ -1,122 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageCreateDmOutput - -/** - * Image_Create_DM SMAPI interface - */ -int smImage_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * prototypeName, - int initialPasswordLength, char * initialPassword, - char * initialAccountNumber, int imageRecordCount, - vmApiImageRecord * imageRecordList, vmApiImageCreateDmOutput ** outData) { - const char * const functionName = "Image_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - prototypeName) + 4 + initialPasswordLength + 4 + strlen( - initialAccountNumber) + 4; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int imageRecordTotal = 0; - for (i = 0; i < imageRecordCount; i++) { - inputSize += 4; // Record length integer - inputSize += imageRecordList[i].imageRecordLength; // Data length - - imageRecordTotal += 4; - imageRecordTotal += imageRecordList[i].imageRecordLength; - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(prototypeName); // Prototype name 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, prototypeName, tempSize); - cursor += tempSize; - } - - tempSize = initialPasswordLength; // Initial password 0..200 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, initialPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(initialAccountNumber); // Initial account number 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, initialAccountNumber, tempSize); - cursor += tempSize; - } - - // Add in the length of images array then the data if available - PUT_INT(imageRecordTotal, cursor); - if (imageRecordTotal > 0) { - for (i = 0; i < imageRecordCount; i++) { - tempSize = imageRecordList[i].imageRecordLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, imageRecordList[i].imageRecord, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeactivate.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeactivate.c deleted file mode 100644 index ac0f4e9..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeactivate.c +++ /dev/null @@ -1,86 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Deactivate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeactivateOutput - -/** - * Image_Deactivate SMAPI interface - */ -int smImage_Deactivate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * forceTime, - vmApiImageDeactivateOutput ** outData) { - const char * const functionName = "Image_Deactivate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - forceTime); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 or 1..64 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(forceTime); // Force time 0..12 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, forceTime, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeleteDm.c deleted file mode 100644 index b60a58a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeleteDm.c +++ /dev/null @@ -1,82 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeleteDmOutput - -/** - * Image_Delete_DM SMAPI interface - */ -int smImage_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dataSecurityErase, - vmApiImageDeleteDmOutput ** outData) { - const char * const functionName = "Image_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1; - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Data security erase byte - *cursor = dataSecurityErase; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicate.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicate.c deleted file mode 100644 index d79cdec..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicate.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Dedicate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceDedicateOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Dedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateOutput ** outData) { - const char * const functionName = "Image_Device_Dedicate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(realDeviceNumber) + 1; // For readonly char - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(realDeviceNumber); // Real device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, realDeviceNumber, tempSize); - cursor += tempSize; - - // Readonly byte - *cursor = readonly; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicateDm.c deleted file mode 100644 index e16b105..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceDedicateDm.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Dedicate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceDedicateDmOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Dedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - char * realDeviceNumber, char readonly, - vmApiImageDeviceDedicateDmOutput ** outData) { - const char * const functionName = "Image_Device_Dedicate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(realDeviceNumber) + 1; // For readonly char - - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(realDeviceNumber); // Real device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, realDeviceNumber, tempSize); - cursor += tempSize; - - // Readonly byte - *cursor = readonly; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceReset.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceReset.c deleted file mode 100644 index b23345a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceReset.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Reset_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceResetOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Reset(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceResetOutput ** outData) { - const char * const functionName = "Image_Device_Reset"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicate.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicate.c deleted file mode 100644 index acb863a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicate.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Undedicate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceUndedicateOutput - -/** - * Image_Device_Dedicate SMAPI interface - */ -int smImage_Device_Undedicate(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateOutput ** outData) { - const char * const functionName = "Image_Device_Undedicate"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicateDm.c deleted file mode 100644 index 198564d..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDeviceUndedicateDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Device_Undedicate_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDeviceUndedicateOutput - -/** - * Image_Device_Undedicate_DM SMAPI interface - */ -int smImage_Device_Undedicate_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumber, - vmApiImageDeviceUndedicateDmOutput ** outData) { - const char * const functionName = "Image_Device_Undedicate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopy.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopy.c deleted file mode 100644 index f3e65bb..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopy.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Copy_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCopyOutput - -/** - * Image_Device_Undedicate_DM SMAPI interface - */ -int smImage_Disk_Copy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskCopyOutput ** outData) { - const char * const functionName = "Image_Disk_Copy"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopyDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopyDm.c deleted file mode 100644 index 2c2805d..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCopyDm.c +++ /dev/null @@ -1,144 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Copy_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCopyDmOutput - -/** - * Image_Disk_Copy_DM - */ -int smImage_Disk_Copy_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * sourceImageName, char * sourceImageDiskNumber, - char * imageDiskAllocationType, char * allocationAreaName, - char * imageDiskMode, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCopyDmOutput ** outData) { - const char * const functionName = "Image_Disk_Copy_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(sourceImageName) + 4 + strlen( - sourceImageDiskNumber) + 4 + strlen(imageDiskAllocationType) + 4 - + strlen(allocationAreaName) + 4 + strlen(imageDiskMode) + 4 - + strlen(readPassword) + 4 + strlen(writePassword) + 4 + strlen( - multiPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(sourceImageName); // Image name 1..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, sourceImageName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(sourceImageDiskNumber); // Source image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, sourceImageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskAllocationType); // Image allocation type 0..10 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskAllocationType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(allocationAreaName); // Allocation area name 0..10 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, allocationAreaName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(imageDiskMode); // Image disk mode 0..5 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskMode, tempSize); - cursor += tempSize; - } - - tempSize = strlen(readPassword); // Read password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(writePassword); // Write password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, writePassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(multiPassword); // Multi password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, multiPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreate.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreate.c deleted file mode 100644 index 8522ff4..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreate.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCreateOutput - -/** - * Image_Disk_Create SMAPI interface - */ -int smImage_Disk_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, char * imageDiskMode, - vmApiImageDiskCreateOutput ** outData) { - const char * const functionName = "Image_Disk_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(imageDiskMode); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskMode); // Image disk mode 0..5 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskMode, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreateDm.c deleted file mode 100644 index c7ce7a6..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskCreateDm.c +++ /dev/null @@ -1,150 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskCreateDmOutput - -/** - * Image_Disk_Create_DM SMAPI interface - */ -int smImage_Disk_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * imageDiskDeviceType, char * imageDiskAllocationType, - char * allocationAreaNameOrVolser, char allocationUnitSize, - int imageDiskSize, char * imageDiskMode, char imageDiskFormatting, - char * imageDiskLabel, char * readPassword, char * writePassword, - char * multiPassword, vmApiImageDiskCreateDmOutput ** outData) { - const char * const functionName = "Image_Disk_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(imageDiskDeviceType) + 4 + strlen( - imageDiskAllocationType) + 4 + strlen(allocationAreaNameOrVolser) - + 1 + /* allocationUnitSize */4 /* imageDiskSize */+ 4 + strlen( - imageDiskMode) + 1 /* imageDiskFormatting */+ 4 + strlen( - imageDiskLabel) + 4 + strlen(readPassword) + 4 + strlen( - writePassword) + 4 + strlen(multiPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskDeviceType); // Image disk device type 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskDeviceType, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskAllocationType); // Image disk allocation type 1..10 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskAllocationType, tempSize); - cursor += tempSize; - - tempSize = strlen(allocationAreaNameOrVolser); // Allocation area name or volser 0..8, 0..6 or 0..4 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, allocationAreaNameOrVolser, tempSize); - cursor += tempSize; - } - - *cursor = allocationUnitSize; // Allocation Unit size - cursor++; - - PUT_INT(imageDiskSize, cursor); // Image disk size - - tempSize = strlen(imageDiskMode); // Image disk mode 1..5 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskMode, tempSize); - cursor += tempSize; - - *cursor = imageDiskFormatting; // Image disk formatting - cursor++; - - tempSize = strlen(imageDiskLabel); // Image disk label 0..6 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageDiskLabel, tempSize); - cursor += tempSize; - } - - tempSize = strlen(readPassword); // Read password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(writePassword); // Write password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, writePassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(multiPassword); // Multi password 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, multiPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskDelete.c deleted file mode 100644 index 7d2f260..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskDelete.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskDeleteOutput - -/** - * Image_Disk_Delete SMAPI interface - */ -int smImage_Disk_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskDeleteOutput ** outData) { - const char * const functionName = "Image_Disk_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskDeleteDm.c deleted file mode 100644 index f8a4558..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskDeleteDm.c +++ /dev/null @@ -1,86 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskDeleteDmOutput - -/** - * Image_Disk_Delete SMAPI interface - */ -int smImage_Disk_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char dataSecurityErase, vmApiImageDiskDeleteDmOutput ** outData) { - const char * const functionName = "Image_Disk_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 1 /* dataSecurityErase */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - *cursor = dataSecurityErase; // Data security erase byte - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskShare.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskShare.c deleted file mode 100644 index 273ff39..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskShare.c +++ /dev/null @@ -1,111 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Share_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskShareOutput - -/** - * Image_Disk_Share SMAPI interface - */ -int smImage_Disk_Share(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareOutput ** outData) { - const char * const functionName = "Image_Disk_Share"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(targetImageName) + 4 + strlen( - targetImageDiskNumber) + 4 + strlen(readWriteMode) + 4 + strlen( - optionalPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageName); // Target image name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageDiskNumber); // Target image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(readWriteMode); // Read write mode 0-4 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readWriteMode, tempSize); - cursor += tempSize; - } - - tempSize = strlen(optionalPassword); // Optional password to share the disk 0-8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, optionalPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskShareDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskShareDm.c deleted file mode 100644 index 7fc9fe3..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskShareDm.c +++ /dev/null @@ -1,111 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Share_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskShareDmOutput - -/** - * Image_Disk_Share_DM SMAPI interface - */ -int smImage_Disk_Share_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - char * readWriteMode, char * optionalPassword, - vmApiImageDiskShareDmOutput ** outData) { - const char * const functionName = "Image_Disk_Share_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(targetImageName) + 4 + strlen( - targetImageDiskNumber) + 4 + strlen(readWriteMode) + 4 + strlen( - optionalPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageName); // Target image name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageDiskNumber); // Target image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(readWriteMode); // Read write mode 0-4 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, readWriteMode, tempSize); - cursor += tempSize; - } - - tempSize = strlen(optionalPassword); // Optional password to share the disk 0-8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, optionalPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshare.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshare.c deleted file mode 100644 index 6fd5b66..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshare.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Unshare_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskUnshareOutput - -/** - * Image_Disk_Unshare SMAPI interface - */ -int smImage_Disk_Unshare(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - vmApiImageDiskUnshareOutput ** outData) { - const char * const functionName = "Image_Disk_Unshare"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshareDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshareDm.c deleted file mode 100644 index 01a663a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageDiskUnshareDm.c +++ /dev/null @@ -1,95 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Disk_Unshare_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageDiskUnshareDmOutput - -/** - * Image_Disk_Unshare_DM SMAPI interface - */ -int smImage_Disk_Unshare_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDiskNumber, - char * targetImageName, char * targetImageDiskNumber, - vmApiImageDiskUnshareDmOutput ** outData) { - const char * const functionName = "Image_Disk_Unshare_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDiskNumber) + 4 + strlen(targetImageName) + 4 + strlen( - targetImageDiskNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDiskNumber); // Image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageName); // Target image name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(targetImageDiskNumber); // Target image disk number 1..4 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetImageDiskNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageIplDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageIplDeleteDm.c deleted file mode 100644 index b01b79e..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageIplDeleteDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplDeleteDmOutput - -/** - * Image_IPL_Delete_DM SMAPI interface - */ -int smImage_IPL_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplDeleteDmOutput ** outData) { - const char * const functionName = "Image_IPL_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageIplDeviceQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiImageIplDeviceQuery.c deleted file mode 100644 index f9aebb0..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageIplDeviceQuery.c +++ /dev/null @@ -1,62 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Device_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplDeviceQueryOutput - -/** - * Image_IPL_Device_Query SMAPI interface - */ -int smImage_IPL_Device_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, vmApiImageIplDeviceQueryOutput ** outData) { - const char * const functionName = "Image_IPL_Device_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1 /* Null term */+ strlen( - userid) + 1 /* Null term */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - tempSize = strlen(userid); - strcpy(cursor, userid); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageIplQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageIplQueryDm.c deleted file mode 100644 index 94cc311..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageIplQueryDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplQueryDmOutput - -/** - * Image_IPL_Query_DM SMAPI interface - */ -int smImage_IPL_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageIplQueryDmOutput ** outData) { - const char * const functionName = "Image_IPL_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageIplSetDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageIplSetDm.c deleted file mode 100644 index 1666064..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageIplSetDm.c +++ /dev/null @@ -1,98 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_IPL_Set_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageIplSetDmOutput - -/** - * Image_IPL_Set_DM SMAPI interface - */ -int smImage_IPL_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * savedSystem, char * loadParameter, - char * parameterString, vmApiImageIplSetDmOutput ** outData) { - const char * const functionName = "Image_IPL_Set_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - savedSystem) + 4 + strlen(loadParameter) + 4 + strlen( - parameterString); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(savedSystem); // Saved system 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, savedSystem, tempSize); - cursor += tempSize; - - tempSize = strlen(loadParameter); // Load parameter 0..10 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, loadParameter, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parameterString); // Parameter string 0..64 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parameterString, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageLockDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageLockDm.c deleted file mode 100644 index a732419..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageLockDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Lock_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageLockDmOutput - -/** - * Image_Lock_DM SMAPI interface - */ -int smImage_Lock_DM(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * deviceAddress, vmApiImageLockDmOutput ** outData) { - const char * const functionName = "Image_Lock_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - deviceAddress); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(deviceAddress); // Device address 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, deviceAddress, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageNameQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageNameQueryDm.c deleted file mode 100644 index 0c2861b..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageNameQueryDm.c +++ /dev/null @@ -1,411 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Name_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageNameQueryDmOutput - -/** - * Image_Name_Query_DM SMAPI interface - */ -int smImage_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageNameQueryDmOutput ** outData) { - const char * const functionName = "Image_Name_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc = 0; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - int i; - int temp; - char *imageName; - vmApiImageName *nameList; - - FILE* cacheFileP = 0; - char resultLine[10]; - int resultLineL = 0; - char cachePath[BUFLEN + 1]; - int cacheFileFD; - struct flock fl; - int recordCount = 0; - char traceLine[LINESIZE + 100]; - int dataReadFromCache = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - // Read from the cache file, if exists. - - memset(cachePath, 0, sizeof(cachePath)); - strcpy(cachePath, "/var/opt/ibm/zvmmap/.vmapi/.cache/"); - strcat(cachePath, "users.list"); - - TRACE_START(vmapiContextP, TRACEAREA_RESOURCE_LAYER, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file to look for: <%.*s> \n", LINESIZE, cachePath); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cachePath) { - if (cacheFileValid(vmapiContextP, cachePath)) { - cacheFileP = fopen(cachePath, "r"); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file pointer opened for read: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileP != NULL) { - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while reading, so no one else is writing into it - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - // Try to get the lock, if the file is in use by some other process, fetch the information from directory - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - *outData = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiImageNameQueryDmOutput)); - nameList = smMemoryGroupAlloc(vmapiContextP, - sizeof(nameList)); - - if (nameList == 0 || *outData == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, traceLine); - return MEMORY_ERROR; - } - - while (fgets(resultLine, sizeof(resultLine), cacheFileP)) { - resultLineL = strlen(resultLine); - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Found the user <%s> in Cache \n", - resultLine); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - recordCount++; - if (resultLineL > 0) { - if (resultLine[resultLineL - 1] == '\n') { - --resultLineL; - resultLine[resultLineL] = 0; - } - } - imageName = smMemoryGroupAlloc(vmapiContextP, - resultLineL); - if (imageName == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, - traceLine); - return MEMORY_ERROR; - } - - strcpy(imageName, resultLine); - dataReadFromCache = 1; - - if (recordCount > 1) { - nameList = smMemoryGroupRealloc(vmapiContextP, - (void *) nameList, recordCount - * sizeof(nameList)); - if (nameList == 0) { - sprintf( - traceLine, - "***Error trying to obtain realloc memory for cache records of size %d.\n", - recordCount * sizeof(nameList)); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), RcRuntime, - RsNoMemory, traceLine); - return MEMORY_ERROR; - } - } - nameList[recordCount - 1].imageName = imageName; - } - - (*outData) -> nameList = nameList; - (*outData) -> nameCount = recordCount; - (*outData) -> common.returnCode - = (*outData) -> common.reasonCode = 0; - - // Unlock the file - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file read lock to be unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - sprintf(traceLine, - "***Error trying to unlock cache file read lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If cache data used return to caller - if (dataReadFromCache) { - return rc; - } - - } - } - // Cache file is invalid/missing/(out of date) remove it - else { - if (remove(cachePath)) { - // If the error is anything but the file is not found - if (ENOENT != errno) { - sprintf( - traceLine, - "***Error removing out of date cache file <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file not found.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } else { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file erased, too old.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } - } - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - - if (0 == rc) { - if ((0 == (*outData)->common.returnCode) && (0 - == (*outData)->common.reasonCode)) { - // Write the cache file - // Build path to the cache directory - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - strcat(cachePath, "users.list"); - - if (cachePath) { - createDirectories(cachePath); - cacheFileP = fopen(cachePath, "w"); - if (NULL == cacheFileP) { - sprintf( - traceLine, - "***Error trying to open cache file for write. errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file pointer opened for WRITE: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileP != NULL) { - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while writing, so no one else is using it - fl.l_type = F_WRLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file WRITE lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - temp = (*outData)->nameCount; - - if (temp > 0) { - for (i = 0; i < temp; i++) { - memset(resultLine, 0, 9); - memcpy( - resultLine, - (*outData)->nameList[i].imageName, - strlen( - (*outData)->nameList[i].imageName) - + 1); - strcat(resultLine, "\n"); - fprintf(cacheFileP, "%s", resultLine); - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf( - traceLine, - "Adding user id <%s> in Cache \n", - resultLine); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - rc = fflush(cacheFileP); - if (EOF == rc) { - // Can't write to file, try to remove file - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - cacheFileP = 0; - if (remove(cachePath)) { - sprintf( - traceLine, - "***Error removing cache file after write error <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - return rc; // Continue processing even if cache file was removed - } - } - } - - // Unlock the file - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file WRITE lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file write lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - } - } - - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImagePasswordSetDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImagePasswordSetDm.c deleted file mode 100644 index cf5ff58..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImagePasswordSetDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Password_Set_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImagePasswordSetDmOutput - -/** - * Image_Password_Set_DM SMAPI interface - */ -int smImage_Password_Set_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imagePasswordLength, char * imagePassword, - vmApiImagePasswordSetDmOutput ** outData) { - const char * const functionName = "Image_Password_Set_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 - + imagePasswordLength; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = imagePasswordLength; // Image password 1..200 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imagePassword, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageQueryActivateTime.c b/zhcp/zhcp-build/resource_access/src/vmapiImageQueryActivateTime.c deleted file mode 100644 index 39f7be2..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageQueryActivateTime.c +++ /dev/null @@ -1,80 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Query_Activate_Time_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageQueryActivateTimeOutput - -/** - * Image_Query_Activate_Time SMAPI interface - */ -int smImage_Query_Activate_Time(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char dateFormat, - vmApiImageQueryActivateTimeOutput ** outData) { - const char * const functionName = "Image_Query_Activate_Time"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 /* Data format char */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = dateFormat; // Date format character - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageQueryDm.c deleted file mode 100644 index 8e38172..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageQueryDm.c +++ /dev/null @@ -1,563 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include "smPublic.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageQueryDmOutput - -extern void vmbkendGetCachePath(struct _VmApiInternalContext* vmapiContextP, - char *pathP); - -void hidePassword(char *directoryRecord); - -/** - * Image_Query_DM SMAPI interface - */ -int smImage_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageQueryDmOutput ** outData, - bool readFromCache) { - - char cachePath[BUFLEN + 1]; - char userID[10]; - FILE* cacheFileP = 0; - char resultLine[256]; - int resultLineL = 0; - const char* cP = 0; - - const char * const functionName = "Image_Query_DM"; - int tempSize; - char * cursor; - int rc = 0; - char traceLine[LINESIZE + 100]; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - int i; - int temp; - - char * tempTargetIdentifier = targetIdentifier; - - vmApiImageRecord *recordList; - char *imageRecord; - int imageRecordLen; - - int recordCount = 0; - int dataReadFromCache = 0; - - int cacheFileFD; - struct flock fl; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - memset(userID, 0, sizeof(userID)); - - i = 0; - for (; *tempTargetIdentifier != '\0'; tempTargetIdentifier++) { - userID[i++] = tolower(*tempTargetIdentifier); - } - - tempTargetIdentifier = targetIdentifier; - - userID[i--] = '\0'; - strcat(cachePath, userID); - strcat(cachePath, ".direct"); - - if (cachePath && readFromCache) { - - if (cacheFileValid(vmapiContextP, cachePath)) { - cacheFileP = fopen(cachePath, "r"); - if (cacheFileP) { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file pointer opened for read: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while reading, so no one else is writing into it - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - // Try to get the lock, if the file is in use by some other process, fetch the information from directory - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - recordList = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiImageRecord)); - *outData = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiImageQueryDmOutput)); - if (recordList == 0 || *outData == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, traceLine); - return MEMORY_ERROR; - } - while (fgets(resultLine, sizeof(resultLine), cacheFileP)) { - resultLineL = strlen(resultLine); - recordCount++; - if (resultLineL > 0) { - if (resultLine[resultLineL - 1] == '\n') { - --resultLineL; - resultLine[resultLineL] = 0; - } - } - imageRecordLen = resultLineL; - imageRecord = smMemoryGroupAlloc(vmapiContextP, - imageRecordLen); - if (imageRecord == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, - traceLine); - return MEMORY_ERROR; - } - strcpy(imageRecord, resultLine); - dataReadFromCache = 1; - - if (recordCount > 1) { - recordList = smMemoryGroupRealloc( - vmapiContextP, (void *) recordList, - recordCount * sizeof(vmApiImageRecord)); - if (recordList == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), RcRuntime, - RsNoMemory, traceLine); - return MEMORY_ERROR; - } - } - recordList[recordCount - 1].imageRecord - = imageRecord; - recordList[recordCount - 1].imageRecordLength - = imageRecordLen; - - } - - (*outData) -> imageRecordList = recordList; - (*outData) -> imageRecordCount = recordCount; - (*outData) -> common.returnCode - = (*outData) -> common.reasonCode = 0; - // Unlock the file. - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file read lock to be unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file read lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file read lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - // Else if not able to get lock, continue with call - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If cache data used return to caller - if (dataReadFromCache) { - return rc; - } - } - } - // Cache file is invalid/missing/(out of date) remove it - else { - if (remove(cachePath)) { - // If the error is anything but the file is not found - if (ENOENT != errno) { - sprintf( - traceLine, - "***Error removing out of date cache file <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file not found.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } else { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file erased, too old.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } - } - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - - // Do the caching of the image. - if ((0 == rc) && readFromCache) // Do not store if the call was for getting data with password - { - if ((0 == (*outData)->common.returnCode) && (0 - == (*outData)->common.reasonCode)) { - // Write the cache file - // Build path to the cache directory. - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - memset(userID, 0, sizeof(userID)); - - i = 0; - for (; *tempTargetIdentifier != '\0'; tempTargetIdentifier++) { - userID[i++] = tolower(*tempTargetIdentifier); - } - userID[i--] = '\0'; - strcat(cachePath, userID); - strcat(cachePath, ".direct"); - - if (cachePath) { - cacheFileP = 0; - createDirectories(cachePath); - cacheFileP = fopen(cachePath, "w"); - if (NULL == cacheFileP) { - sprintf( - traceLine, - "***Error trying to open cache file for write. errno %d\n", - errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file pointer opened for WRITE: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If the file opened for write then add cache information - if (cacheFileP != NULL) { - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while writing, so no one else is using it - fl.l_type = F_WRLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file WRITE lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - temp = (*outData)->imageRecordCount; - - if (temp > 0) { - for (i = 0; i < temp; i++) { - memset(resultLine, 0, sizeof(resultLine)); - memcpy( - resultLine, - (*outData)->imageRecordList[i].imageRecord, - (*outData)->imageRecordList[i].imageRecordLength); - resultLineL = strlen(resultLine); - if (resultLineL > 71) { - resultLine[71] = 0; - resultLineL = 71; - } - strip(resultLine, 'T', ' '); - cP = &resultLine[0]; - while (cP && (*cP == ' ')) - ++cP; - - hidePassword(resultLine); - strcat(resultLine, "\n"); - fprintf(cacheFileP, "%s", resultLine); - rc = fflush(cacheFileP); - if (EOF == rc) { - // Can't write to file, try to remove file - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - cacheFileP = 0; - if (remove(cachePath)) { - sprintf( - traceLine, - "***Error removing cache file after write error <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - return rc; // Continue processing even if cache file was removed - } - } - } - - // Unlock the file - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file WRITE lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Cache file write lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - } - } - - return rc; -} - -/** - * This function removes the password field of USER and MDISK statements. - */ -void hidePassword(char *directoryRecord) { - char tempBuffer[100]; - char * savePtr; - int length = strlen(directoryRecord); - - char replacedString[100]; - char * token; - memcpy(tempBuffer, directoryRecord, length); - tempBuffer[length] = '\0'; - token = strtok_r(tempBuffer, " ", &savePtr); - - if (token != NULL) { - if (0 == strncasecmp(token, "USER", strlen(token))) { - strcpy(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); // This is userID - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, "XXXXX"); // This is password - strcat(replacedString, " "); - - while (token != NULL) { - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, token); // This is userID - strcat(replacedString, " "); - } - } - - strcpy(directoryRecord, replacedString); - } else if (strncasecmp(token, "MDISK", strlen(token)) == 0) { - strcpy(replacedString, token); - strcat(replacedString, " "); - - // MDISK Address(VDEV) Value - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - - // MDISK Dev Type Value - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - // DEVICE Number Value - if (strncasecmp(token, "DEVNO", strlen(token)) == 0) { - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } - // V_DISK Value in Blocks - else if (strncasecmp(token, "V-DISK", strlen(token)) == 0) { - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } - // T-DISK Value in Cylinders or Blocks - else if (strncasecmp(token, "T-DISK", strlen(token)) == 0) { - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } else { - // CYL or BLK Start - strcat(replacedString, token); - strcat(replacedString, " "); - - //CYL or BLK End - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - - // Volume Serial Number - token = strtok_r(NULL, " ", &savePtr); - strcat(replacedString, token); - strcat(replacedString, " "); - } - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - // Access Mode - strcat(replacedString, token); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, "XXXXX"); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, "XXXXX"); - strcat(replacedString, " "); - - token = strtok_r(NULL, " ", &savePtr); - if (token != NULL) { - strcat(replacedString, "XXXXX"); - strcat(replacedString, " "); - - } - } - } - strcpy(directoryRecord, replacedString); - } - } - } - } -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageRecycle.c b/zhcp/zhcp-build/resource_access/src/vmapiImageRecycle.c deleted file mode 100644 index 267d31f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageRecycle.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Recycle_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageRecycleOutput - -/** - * Image_Recycle SMAPI interface - */ -int smImage_Recycle(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageRecycleOutput ** outData) { - const char * const functionName = "Image_Recyle"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageReplaceDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageReplaceDm.c deleted file mode 100644 index 9c41772..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageReplaceDm.c +++ /dev/null @@ -1,95 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Replace_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageReplaceDmOutput - -/** - * Image_Replace_DM SMAPI interface - */ -int smImage_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int imageRecordArrayCount, - vmApiImageRecord * imageRecordList, - vmApiImageReplaceDmOutput ** outData) { - const char * const functionName = "Image_Replace_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* imageRecordArrayLength */; /* Need to add in actual array data size */ - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i, totalArraySize; - - totalArraySize = 0; - for (i = 0; i < imageRecordArrayCount; i++) { - totalArraySize += imageRecordList[i].imageRecordLength + 4; - inputSize += imageRecordList[i].imageRecordLength + 4; - } - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of image record array then the data if available - PUT_INT(totalArraySize, cursor); - - if (totalArraySize > 0) { - for (i = 0; i < imageRecordArrayCount; i++) { - tempSize = imageRecordList[i].imageRecordLength; - PUT_INT(tempSize, cursor); - memcpy(cursor, imageRecordList[i].imageRecord, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c deleted file mode 100644 index 467ea00..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsDefineDm.c +++ /dev/null @@ -1,118 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_SCSI_Characteristics_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageScsiCharacteristicsDefineDmOutput - -/** - * Image_SCSI_Characteristics_Define_DM SMAPI interface - */ -int smImage_SCSI_Characteristics_Define_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * bootProgram, char * brLba, char * lun, char * portName, - char scpDatatype, int scpDataLength, char * scpData, - vmApiImageScsiCharacteristicsDefineDmOutput ** outData) { - const char * const functionName = "Image_SCSI_Characteristics_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - bootProgram) + 4 + strlen(brLba) + 4 + strlen(lun) + 4 + strlen( - portName) + 1 /* SCP data type*/+ 4 + scpDataLength; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(bootProgram); // Boot program 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, bootProgram, tempSize); - cursor += tempSize; - } - - tempSize = strlen(brLba); // BR LBA 0..16 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, brLba, tempSize); - cursor += tempSize; - } - - tempSize = strlen(lun); // LUN 0..16 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, lun, tempSize); - cursor += tempSize; - } - - tempSize = strlen(portName); // Port name 0..16 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, portName, tempSize); - cursor += tempSize; - } - - *cursor = scpDatatype; // Char 1 - - tempSize = scpDataLength; // SCP data 0..4096 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, scpData, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c deleted file mode 100644 index a8c7d68..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageScsiCharacteristicsQueryDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_SCSI_Characteristics_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageScsiCharacteristicsQueryDmOutput - -/** - * Image_SCSI_Characteristics_Query_DM SMAPI interface - */ -int smImage_SCSI_Characteristics_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiImageScsiCharacteristicsQueryDmOutput ** outData) { - const char * const functionName = "Image_SCSI_Characteristics_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageStatusQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiImageStatusQuery.c deleted file mode 100644 index 79ae875..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageStatusQuery.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Status_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageStatusQueryOutput - -/** - * Image_Status_Query SMAPI interface - */ -int smImage_Status_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiImageStatusQueryOutput ** outData) { - const char * const functionName = "Image_Status_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageUnlockDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageUnlockDm.c deleted file mode 100644 index 63fa36f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageUnlockDm.c +++ /dev/null @@ -1,85 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Unlock_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageUnlockDmOutput - -/** - * Image_Unlock_DM SMAPI interface - */ -int smImage_Unlock_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * deviceAddress, - vmApiImageUnlockDmOutput ** outData) { - const char * const functionName = "Image_Unlock_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - deviceAddress); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(deviceAddress); // Device address 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, deviceAddress, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeAdd.c b/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeAdd.c deleted file mode 100644 index 64687f1..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeAdd.c +++ /dev/null @@ -1,150 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Add_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeAddOutput - -/** - * Image_Volume_Add SMAPI interface - */ -int smImage_Volume_Add(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeAddOutput ** outData) { - const char * const functionName = "Image_Volume_Add"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumer) + 4 + strlen(imageVolumeLabel) + 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumer); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumer, tempSize); - cursor += tempSize; - - tempSize = strlen(imageVolumeLabel); // Image volume label 1..6 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageVolumeLabel, tempSize); - cursor += tempSize; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeDelete.c deleted file mode 100644 index c69c70a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeDelete.c +++ /dev/null @@ -1,150 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeDeleteOutput - -/** - * Image_Volume_Delete SMAPI interface - */ -int smImage_Volume_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * imageDeviceNumer, - char * imageVolumeLabel, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, - vmApiImageVolumeAddOutput ** outData) { - const char * const functionName = "Image_Volume_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + strlen(password) + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumer) + 4 + strlen(imageVolumeLabel) + 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = strlen(password); // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumer); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumer, tempSize); - cursor += tempSize; - - tempSize = strlen(imageVolumeLabel); // Image volume label 1..6 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageVolumeLabel, tempSize); - cursor += tempSize; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceDefineDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceDefineDm.c deleted file mode 100644 index 369558c..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceDefineDm.c +++ /dev/null @@ -1,112 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Space_Define_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeSpaceDefineDmOutput - -/** - * Image_Volume_Space_Define_DM SMAPI interface - */ -int smImage_Volume_Space_Define_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, int startCyl, int regionSize, char * groupName, - char deviceType, vmApiImageVolumeSpaceDefineDmOutput ** outData) { - const char * const functionName = "Image_Volume_Space_Define_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 - /* Function type */ + 4 + strlen(regionName) + 4 + strlen( - imageVolumeId) + 4 /* Start cyl */+ 4 /* Region size */+ 4 + strlen( - groupName) + 1 /* DeviceType */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = functionType; // Function type - cursor++; - - tempSize = strlen(regionName); // Region name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, regionName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(imageVolumeId); // Image volume id 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageVolumeId, tempSize); - cursor += tempSize; - } - - PUT_INT(startCyl, cursor); // Start cylinder - - PUT_INT(regionSize, cursor); // Region size - - tempSize = strlen(groupName); // Group name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, groupName, tempSize); - cursor += tempSize; - } - - *cursor = deviceType; - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceQueryDm.c deleted file mode 100644 index 44fcb3e..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceQueryDm.c +++ /dev/null @@ -1,91 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Space_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeSpaceQueryDmOutput - -/** - * Image_Volume_Space_Query_DM SMAPI interface - */ -int smImage_Volume_Space_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char queryType, char entryType, - char * entryNames, vmApiImageVolumeSpaceQueryDmOutput ** outData) { - const char * const functionName = "Image_Volume_Space_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 - /* Query type */+ 1 /* Entry type */+ 4 + strlen(entryNames); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = queryType; // Query type - cursor++; - - *cursor = entryType; // Entry type - cursor++; - - tempSize = strlen(entryNames); // Entry names 0..255 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, entryNames, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c b/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c deleted file mode 100644 index 5375442..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiImageVolumeSpaceRemoveDm.c +++ /dev/null @@ -1,104 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiImage.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Image_Volume_Space_Remove_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiImageVolumeSpaceRemoveDmOutput - -/** - * Image_Volume_Space_Remove_DM SMAPI interface - */ -int smImage_Volume_Space_Remove_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char functionType, char * regionName, - char * imageVolumeId, char * groupName, - vmApiImageVolumeSpaceRemoveDmOutput ** outData) { - const char * const functionName = "Image_Volume_Space_Remove_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 1 - /* Function type */+ 4 + strlen(regionName) + 4 + strlen(imageVolumeId) + 4 - + strlen(groupName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - *cursor = functionType; // Function type - cursor++; - - tempSize = strlen(regionName); // Region name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, regionName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(imageVolumeId); // Image volume id 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, imageVolumeId, tempSize); - cursor += tempSize; - } - - tempSize = strlen(groupName); // Group name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, groupName, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiNameListAdd.c b/zhcp/zhcp-build/resource_access/src/vmapiNameListAdd.c deleted file mode 100644 index f5bdce2..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiNameListAdd.c +++ /dev/null @@ -1,81 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Add_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListAddOutput - -/** - * Name_List_Add SMAPI interface - */ -int smName_List_Add(struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * name, vmApiNameListAddOutput ** outData) { - const char * const functionName = "Name_List_Add"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen(name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(name); // Name 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiNameListDestroy.c b/zhcp/zhcp-build/resource_access/src/vmapiNameListDestroy.c deleted file mode 100644 index 20861ef..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiNameListDestroy.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Destroy_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListDestroyOutput - -/** - * Name_List_Destroy SMAPI interface - */ -int smName_List_Destroy(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListDestroyOutput ** outData) { - const char * const functionName = "Name_List_Destroy"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiNameListQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiNameListQuery.c deleted file mode 100644 index b678023..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiNameListQuery.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListQueryOutput - -/** - * Name_List_Query SMAPI interface - */ -int smName_List_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiNameListQueryOutput ** outData) { - const char * const functionName = "Name_List_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiNameListRemove.c b/zhcp/zhcp-build/resource_access/src/vmapiNameListRemove.c deleted file mode 100644 index 3384d96..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiNameListRemove.c +++ /dev/null @@ -1,82 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiName.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Name_List_Remove_Layout -#define OUTPUT_STRUCTURE_NAME vmApiNameListRemoveOutput - -/** - * Name_List_Remove SMAPI interface - */ -int smName_List_Remove(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * name, - vmApiNameListRemoveOutput ** outData) { - const char * const functionName = "Name_List_Remove"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen(name); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(name); // Name 1..64 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, name, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiProfileCreateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiProfileCreateDm.c deleted file mode 100644 index ed0c639..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiProfileCreateDm.c +++ /dev/null @@ -1,98 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileCreateDmOutput - -/** - * Profile_Create_DM SMAPI interface - */ -int smProfile_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileCreateDmOutput ** outData) { - const char * const functionName = "Profile_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* For profile record array length */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int profileRecordTotal = 0; - for (i = 0; i < profileRecordCount; i++) { - inputSize += 4; // Record length integer - inputSize += profileRecordList[i].profileRecordLength; // Data length - - profileRecordTotal += 4; - profileRecordTotal += profileRecordList[i].profileRecordLength; - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of profile record array then the data if available - PUT_INT(profileRecordTotal, cursor); - if (profileRecordTotal > 0) { - for (i = 0; i < profileRecordCount; i++) { - tempSize = profileRecordList[i].profileRecordLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, profileRecordList[i].recordData, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiProfileDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiProfileDeleteDm.c deleted file mode 100644 index 44d9e96..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiProfileDeleteDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileDeleteDmOutput - -/** - * Profile_Delete_DM SMAPI interface - */ -int smProfile_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileDeleteDmOutput ** outData) { - const char * const functionName = "Profile_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - ; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiProfileQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiProfileQueryDm.c deleted file mode 100644 index 62d14d0..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiProfileQueryDm.c +++ /dev/null @@ -1,427 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include "smPublic.h" -#include -#include -#include -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileQueryDmOutput - -/** - * Profile_Query_DM SMAPI interface - */ -int smProfile_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiProfileQueryDmOutput ** outData) { - const char * const functionName = "Profile_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - // Cache variables - char path[BUFLEN + 1]; - char cachePath[BUFLEN + 1]; - char profileID[10]; - FILE* cacheFileP = 0; - char resultLine[256]; - int resultLineL = 0; - const char* cP = 0; - char * tempTargetIdentifier; - char traceLine[LINESIZE + 100]; - vmApiProfileRecord *recordList; - char *profileRecord; - int profileRecordLen; - int recordCount = 0; - int dataReadFromCache = 0; - int cacheFileFD; - struct flock fl; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - int i; - rc = 0; - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Check if any cache data for this profile - memset(cachePath, 0, sizeof(cachePath)); - vmbkendGetCachePath(vmapiContextP, cachePath); - memset(profileID, 0, sizeof(profileID)); - - // Force profile id name to lowercase and save it in profileID - tempTargetIdentifier = targetIdentifier; - i = 0; - for (; *tempTargetIdentifier != '\0'; tempTargetIdentifier++) { - profileID[i++] = tolower(*tempTargetIdentifier); - } - profileID[i--] = '\0'; - strcat(cachePath, profileID); - strcat(cachePath, ".direct"); - - if (cacheFileValid(vmapiContextP, cachePath)) { - cacheFileP = fopen(cachePath, "r"); - if (cacheFileP) { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file(%s) pointer opened for read: %p \n", - profileID, cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while reading, so no one else is writing into it - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - // Try to get the lock, if the file is in use by some other process, fetch the information from directory - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file read lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - recordList = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiProfileRecord)); - *outData = smMemoryGroupAlloc(vmapiContextP, - sizeof(vmApiProfileQueryDmOutput)); - if (recordList == 0 || *outData == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcRuntime, RsNoMemory, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return MEMORY_ERROR; - } - while (fgets(resultLine, sizeof(resultLine), cacheFileP)) { - resultLineL = strlen(resultLine); - recordCount++; - if (resultLineL > 0) { - if (resultLine[resultLineL - 1] == '\n') { - --resultLineL; - resultLine[resultLineL] = 0; - } - } - profileRecordLen = resultLineL; - profileRecord = smMemoryGroupAlloc(vmapiContextP, - profileRecordLen); - if (profileRecord == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return MEMORY_ERROR; - } - strcpy(profileRecord, resultLine); - dataReadFromCache = 1; - - if (recordCount > 1) { - recordList = smMemoryGroupRealloc(vmapiContextP, - (void *) recordList, recordCount - * sizeof(vmApiProfileRecord)); - if (recordList == 0) { - sprintf(traceLine, - "***Error trying to obtain memory for cache records.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcRuntime, RsNoMemory, - traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return MEMORY_ERROR; - } - } - recordList[recordCount - 1].recordData = profileRecord; - recordList[recordCount - 1].profileRecordLength - = profileRecordLen; - - } - - (*outData) -> profileRecordList = recordList; - (*outData) -> profileRecordCount = recordCount; - (*outData) -> common.returnCode - = (*outData) -> common.reasonCode = 0; - - // Unlock the file. - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file read lock to be unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock cache file read lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file read lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - // Else if not able to get lock, continue with call - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close profile cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If cache data used return to caller - if (dataReadFromCache) { - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return rc; - } - } - } - // Cache file is invalid/missing/(out of date) remove it - else { - if (remove(cachePath)) { - if (ENOENT != errno) // If the error is anything but the file is not found - { - sprintf( - traceLine, - "***Error removing out of date profile cache file <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_CACHE); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file not found.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } else { - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file erased, too old.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - } - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - - // Do the caching of the image. - if (0 == rc) { - if ((0 == (*outData)->common.returnCode) && (0 - == (*outData)->common.reasonCode)) { - // Write the cache file - { - cacheFileP = 0; - createDirectories(cachePath); - cacheFileP = fopen(cachePath, "w"); - if (NULL == cacheFileP) { - sprintf( - traceLine, - "***Error trying to open profile cache file (%s) for write. errno %d\n", - profileID, errno); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file pointer opened for WRITE: %p \n", - cacheFileP); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - // If the file opened for write then add cache information - if (cacheFileP != NULL) { - - cacheFileFD = fileno(cacheFileP); - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf( - traceLine, - "Profile cache file integer descriptor value: %d \n", - cacheFileFD); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - if (cacheFileFD != -1) { - // Lock the file while writing, so no one else is using it - fl.l_type = F_WRLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (fcntl(cacheFileFD, F_SETLK, &fl) != -1) { - - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file WRITE lock obtained.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - tempSize = (*outData)->profileRecordCount; - - if (tempSize > 0) { - for (i = 0; i < tempSize; i++) { - memset(resultLine, 0, sizeof(resultLine)); - memcpy( - resultLine, - (*outData)->profileRecordList[i].recordData, - (*outData)->profileRecordList[i].profileRecordLength); - resultLineL = strlen(resultLine); - if (resultLineL > 71) { - resultLine[71] = 0; - resultLineL = 71; - } - strip(resultLine, 'T', ' '); - cP = &resultLine[0]; - while (cP && (*cP == ' ')) - ++cP; - - // Ignore DIRMAINT control lines - strcat(resultLine, "\n"); - fprintf(cacheFileP, "%s", resultLine); - rc = fflush(cacheFileP); - if (EOF == rc) { - - // Can't write to file, try to remove file - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close profile cache file.\n"); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - cacheFileP = 0; - if (remove(cachePath)) { - sprintf( - traceLine, - "***Error removing profil cache file after write error <%.*s> errno %d\n", - LINESIZE, cachePath, errno); - errorLog(vmapiContextP, __func__, - TO_STRING(__LINE__), - RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - return rc; // Continue processing even if cache file was removed - } - } - } - - // Unlock the file. - fl.l_type = F_UNLCK; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - if (-1 == fcntl(cacheFileFD, F_SETLK, &fl)) { - - sprintf(traceLine, - "***Error trying to unlock profile cache file WRITE lock.\n"); - errorLog(vmapiContextP, __func__, TO_STRING( - __LINE__), RcFunction, RsUnexpected, - traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, - "Profile cache file write lock unlocked.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - - if (0 != fclose(cacheFileP)) { - sprintf(traceLine, - "***Error trying to close profile cache file.\n"); - errorLog(vmapiContextP, __func__, TO_STRING(__LINE__), - RcFunction, RsUnexpected, traceLine); - return PROCESSING_ERROR; - } - TRACE_START(vmapiContextP, TRACEAREA_CACHE, - TRACELEVEL_DETAILS); - sprintf(traceLine, "Profile cache file closed.\n"); - TRACE_END_DEBUG(vmapiContextP, traceLine); - - } - } - } - } - - TRACE_EXIT_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiProfileReplaceDm.c b/zhcp/zhcp-build/resource_access/src/vmapiProfileReplaceDm.c deleted file mode 100644 index cc49777..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiProfileReplaceDm.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiProfile.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Profile_Replace_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiProfileReplaceDmOutput - -/** - * Profile_Replace_DM SMAPI interface - */ -int smProfile_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int profileRecordCount, - vmApiProfileRecord * profileRecordList, - vmApiProfileReplaceDmOutput ** outData) { - const char * const functionName = "Profile_Replace_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* For profile record array length */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int profileRecordTotal = 0; - - for (i = 0; i < profileRecordCount; i++) { - inputSize += 4; // Record length integer - inputSize += profileRecordList[i].profileRecordLength; // Data length - - profileRecordTotal += 4; - profileRecordTotal += profileRecordList[i].profileRecordLength; - } - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 image name - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of profile record array then the data if available - PUT_INT(profileRecordTotal, cursor); - if (profileRecordTotal > 0) { - for (i = 0; i < profileRecordCount; i++) { - tempSize = profileRecordList[i].profileRecordLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, profileRecordList[i].recordData, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeCreateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiPrototypeCreateDm.c deleted file mode 100644 index 535efea..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeCreateDm.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeCreateDmOutput - -/** - * Prototype_Create_DM SMAPI interface - */ -int smPrototype_Create_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeCreateDmOutput ** outData) { - const char * const functionName = "Prototype_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /* recordArraySize */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int recordTotal = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - for (i = 0; i < recordArrayCount; i++) { - inputSize += 4; // Record length integer - inputSize += recordArrayData[i].recordNameLength; // Data length - - recordTotal += 4; - recordTotal += recordArrayData[i].recordNameLength; - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of record array then the data if available - PUT_INT(recordTotal, cursor); - if (recordTotal > 0) { - for (i = 0; i < recordArrayCount; i++) { - tempSize = recordArrayData[i].recordNameLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, recordArrayData[i].recordName, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiPrototypeDeleteDm.c deleted file mode 100644 index 68c75dc..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeDeleteDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeDeleteDmOutput - -/** - * Prototype_Delete_DM SMAPI interface - */ -int smPrototype_Delete_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeDeleteDmOutput ** outData) { - const char * const functionName = "Prototype_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeNameQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiPrototypeNameQueryDm.c deleted file mode 100644 index f9959ea..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeNameQueryDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Name_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeNameQueryDmOutput - -/** - * Prototype_Name_Query_DM SMAPI interface - */ -int smPrototype_Name_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeNameQueryDmOutput ** outData) { - const char * const functionName = "Prototype_Name_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiPrototypeQueryDm.c deleted file mode 100644 index 93f3b2b..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeQueryDm.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeQueryDmOutput - -/** - * Prototype_Query_DM SMAPI interface - */ -int smPrototype_Query_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiPrototypeQueryDmOutput ** outData) { - const char * const functionName = "Prototype_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeReplaceDm.c b/zhcp/zhcp-build/resource_access/src/vmapiPrototypeReplaceDm.c deleted file mode 100644 index 046e345..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiPrototypeReplaceDm.c +++ /dev/null @@ -1,99 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiPrototype.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Prototype_Replace_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiPrototypeReplaceDmOutput - -/** - * Prototype_Replace_DM SMAPI interface - */ -int smPrototype_Replace_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, int recordArrayCount, - vmApiPrototypeRecordList * recordArrayData, - vmApiPrototypeReplaceDmOutput ** outData) { - const char * const functionName = "Prototype_Replace_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /*record array length */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - int recordTotal = 0; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - for (i = 0; i < recordArrayCount; i++) { - inputSize += 4; // Record length integer - inputSize += recordArrayData[i].recordNameLength; // Data length - - recordTotal += 4; - recordTotal += recordArrayData[i].recordNameLength; - } - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize + 4))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 (image name) - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // Add in the length of record array then the data if available - PUT_INT(recordTotal, cursor); - if (recordTotal > 0) { - for (i = 0; i < recordArrayCount; i++) { - tempSize = recordArrayData[i].recordNameLength; // Data length - PUT_INT(tempSize, cursor); - - memcpy(cursor, recordArrayData[i].recordName, tempSize); - cursor += tempSize; - } - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiQueryApiFunctionalLevel.c b/zhcp/zhcp-build/resource_access/src/vmapiQueryApiFunctionalLevel.c deleted file mode 100644 index d10b031..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiQueryApiFunctionalLevel.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Query_API_Functional_Level_Layout -#define OUTPUT_STRUCTURE_NAME vmApiQueryApiFunctionalLevelOutput - -/** - * Query_API_Functional_Level SMAPI interface - */ -int smQuery_API_Functional_Level(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiQueryApiFunctionalLevelOutput ** outData) { - const char * const functionName = "Query_API_Functional_Level"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiQueryAsynchronousOperationDm.c b/zhcp/zhcp-build/resource_access/src/vmapiQueryAsynchronousOperationDm.c deleted file mode 100644 index e97546e..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiQueryAsynchronousOperationDm.c +++ /dev/null @@ -1,79 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Query_Asynchronous_Operation_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiQueryAsynchronousOperationDmOutput - -/** - * Query_Asynchronous_Operation_DM SMAPI interface - */ -int smQuery_Asychronous_Operation_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - int operationId, vmApiQueryAsynchronousOperationDmOutput ** outData) { - const char * const functionName = "Query_Asynchronous_Operation_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 /*operationId*/; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - PUT_INT(operationId, cursor); // Operation ID - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c b/zhcp/zhcp-build/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c deleted file mode 100644 index c956ed0..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiQueryDirectoryManagerLevelDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiQuery.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Query_Directory_Manager_Level_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiQueryDirectoryManagerLevelDmOutput - -/** - * Query_Directory_Manager_Level_DM SMAPI interface - */ -int smQuery_Directory_Manager_Level_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiQueryDirectoryManagerLevelDmOutput ** outData) { - const char * const functionName = "Query_Directory_Manager_Level_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessAddDm.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessAddDm.c deleted file mode 100644 index 675ea2f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessAddDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Access_Add_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryAccessAddDmOutput - -/** - * Shared_Memory_Access_Add_DM SMAPI interface - */ -int smShared_Memory_Access_Add_DM(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryAccessAddDmOutput ** outData) { - const char * const functionName = "Shared_Memory_Access_Add_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessQueryDm.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessQueryDm.c deleted file mode 100644 index 8136016..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessQueryDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Access_Query_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryAccessQueryDmOutput - -/** - * Shared_Memory_Access_Query_DM SMAPI interface - */ -int smShared_Memory_Access_Query_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessQueryDmOutput ** outData) { - const char * const functionName = "Shared_Memory_Access_Query_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c deleted file mode 100644 index e7ff5f9..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryAccessRemoveDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Access_Remove_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryAccessRemoveDmOutput - -/** - * Shared_Memory_Access_Remove_DM SMAPI interface - */ -int smShared_Memory_Access_Remove_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * memorySegmentName, - vmApiSharedMemoryAccessRemoveDmOutput ** outData) { - const char * const functionName = "Shared_Memory_Access_Remove_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryCreate.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryCreate.c deleted file mode 100644 index fd92348..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryCreate.c +++ /dev/null @@ -1,104 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryCreateOutput - -/** - * Shared_Memory_Create SMAPI interface - */ -int smShared_Memory_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - unsigned long long beginPage, unsigned long long endPage, - char pageAccessDescriptor, char memoryAttributes, - char * memoryAccessIdentifier, vmApiSharedMemoryCreateOutput ** outData) { - const char * const functionName = "Shared_Memory_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName) + 8 + 8 /* begin page, end page */+ 1 - /* page access descriptor */+ 1/* memory attribute */+ 4 + strlen( - memoryAccessIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - PUT_64INT(beginPage, cursor); // Begin page - - PUT_64INT(endPage, cursor); // End page - - *cursor = pageAccessDescriptor; // Page access descriptor - cursor++; - - *cursor = memoryAttributes; // Memory attributes - cursor++; - - tempSize = strlen(memoryAccessIdentifier); // Memory access identifier 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, memoryAccessIdentifier, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryDelete.c deleted file mode 100644 index fd9d462..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryDelete.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryDeleteOutput - -/** - * Shared_Memory_Delete SMAPI interface - */ -int smShared_Memory_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryDeleteOutput ** outData) { - const char * const functionName = "Shared_Memory_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryQuery.c deleted file mode 100644 index 77e6a0a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryQuery.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryQueryOutput - -/** - * Shared_Memory_Query SMAPI interface - */ -int smShared_Memory_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - vmApiSharedMemoryQueryOutput ** outData) { - const char * const functionName = "Shared_Memory_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryReplace.c b/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryReplace.c deleted file mode 100644 index 22aa527..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSharedMemoryReplace.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiShared.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Shared_Memory_Replace_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSharedMemoryReplaceOutput - -/** - * Shared_Memory_Replace SMAPI interface - */ -int smShared_Memory_Replace(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * memorySegmentName, - char * memoryAccessIdentifier, - vmApiSharedMemoryReplaceOutput ** outData) { - const char * const functionName = "Shared_Memory_Replace"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - memorySegmentName) + 4 + strlen(memoryAccessIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(memorySegmentName); // Memory segment name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, memorySegmentName, tempSize); - cursor += tempSize; - - tempSize = strlen(memoryAccessIdentifier); // MemoryAccessIdentifier 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, memoryAccessIdentifier, tempSize); - cursor += tempSize; - } - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesActivateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesActivateDm.c deleted file mode 100644 index 2b70a93..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesActivateDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiStatic.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Static_Image_Changes_Activate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiStaticImageChangesActivateDmOutput - -/** - * Static_Image_Changes_Activate_DM SMAPI interface - */ -int smStatic_Image_Changes_Activate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesActivateDmOutput ** outData) { - const char * const functionName = "Static_Image_Changes_Activate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesDeactivateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesDeactivateDm.c deleted file mode 100644 index 8d0a663..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesDeactivateDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiStatic.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Static_Image_Changes_Deactivate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiStaticImageChangesDeactivateDmOutput - -/** - * Static_Image_Changes_Deactivate_DM SMAPI interface - */ -int smStatic_Image_Changes_Deactivate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesDeactivateDmOutput ** outData) { - const char * const functionName = "Static_Image_Changes_Deactivate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesImmediateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesImmediateDm.c deleted file mode 100644 index 8b4b39f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiStaticImageChangesImmediateDm.c +++ /dev/null @@ -1,77 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiStatic.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Static_Image_Changes_Immediate_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiStaticImageChangesImmediateDmOutput - -/** - * Static_Image_Changes_Immediate_DM SMAPI interface - */ -int smStatic_Image_Changes_Immediate_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - vmApiStaticImageChangesImmediateDmOutput ** outData) { - const char * const functionName = "Static_Image_Changes_Immediate_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSystemInfoQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiSystemInfoQuery.c deleted file mode 100644 index 500a549..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSystemInfoQuery.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiSystem.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME System_Info_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSystemInfoQueryOutput - -/** - * System_Info_Query SMAPI interface - */ -int smSystem_Info_Query(struct _VmApiInternalContext* vmapiContextP, - vmApiSystemInfoQueryOutput ** outData) { - const char * const functionName = "System_Info_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1 /* null term */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiSystemIoQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiSystemIoQuery.c deleted file mode 100644 index e69a12f..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiSystemIoQuery.c +++ /dev/null @@ -1,62 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiSystem.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME System_IO_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiSystemIoQueryOutput - -/** - * System_IO_Query SMAPI interface - */ -int smSystem_IO_Query(struct _VmApiInternalContext* vmapiContextP, - char * realDeviceAddress, vmApiSystemIoQueryOutput ** outData) { - const char * const functionName = "System_IO_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1 /* null term */+ strlen( - realDeviceAddress) + 1 /* null term */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - tempSize = strlen(realDeviceAddress); - strcpy(cursor, realDeviceAddress); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreate.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreate.c deleted file mode 100644 index 8d13733..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreate.c +++ /dev/null @@ -1,96 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionCreateOutput - -/** - * Virtual_Channel_Connection_Create SMAPI interface - */ -int smVirtual_Channel_Connection_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - char * coupledImageDeviceNumber, - vmApiVirtualChannelConnectionCreateOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(coupledImageName) + 4 + strlen( - coupledImageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(coupledImageName); // Coupled image name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, coupledImageName, tempSize); - cursor += tempSize; - - tempSize = strlen(coupledImageDeviceNumber); // Coupled image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, coupledImageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c deleted file mode 100644 index a9689e0..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionCreateDm.c +++ /dev/null @@ -1,91 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionCreateDmOutput - -/** - * Virtual_Channel_Connection_Create_DM SMAPI interface - */ -int smVirtual_Channel_Connection_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * coupledImageName, - vmApiVirtualChannelConnectionCreateDmOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(coupledImageName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(coupledImageName); // Coupled image name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, coupledImageName, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDelete.c deleted file mode 100644 index 4567541..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDelete.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionDeleteOutput - -/** - * Virtual_Channel_Connection_Delete SMAPI interface - */ -int smVirtual_Channel_Connection_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c deleted file mode 100644 index dbf7887..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualChannelConnectionDeleteDm.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Channel_Connection_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualChannelConnectionDeleteDmOutput - -/** - * Virtual_Channel_Connection_Delete_DM SMAPI interface - */ -int smVirtual_Channel_Connection_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualChannelConnectionDeleteDmOutput ** outData) { - const char * const functionName = "Virtual_Channel_Connection_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c deleted file mode 100644 index a3e725d..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLan.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_LAN_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectLanOutput - -/** - * Virtual_Network_Adapter_Connect_Lan SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_LAN( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Connect_LAN"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Iinteger table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c deleted file mode 100644 index 1ff996d..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectLanDm.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_LAN_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectLanDmOutput - -/** - * Virtual_Network_Adapter_Connect_Lan_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_LAN_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * lanName, char * lanOwner, - vmApiVirtualNetworkAdapterConnectLanDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Connect_LAN_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c deleted file mode 100644 index b79a8c7..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitch.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_Vswitch_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectVswitchOutput - -/** - * Virtual_Network_Adapter_Connect_Vswitch SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_Vswitch( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Connect_Vswitch"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(switchName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c deleted file mode 100644 index be3adc6..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterConnectVswitchDm.c +++ /dev/null @@ -1,90 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Connect_Vswitch_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterConnectVswitchDmOutput - -/** - * Virtual_Network_Adapter_Connect_Vswitch_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Connect_Vswitch_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char * switchName, - vmApiVirtualNetworkAdapterConnectVswitchDmOutput ** outData) { - const char * const functionName = - "Virtual_Network_Adapter_Connect_Vswitch_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 4 + strlen(switchName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreate.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreate.c deleted file mode 100644 index f10ff78..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreate.c +++ /dev/null @@ -1,97 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterCreateOutput - -/** - * Virtual_Network_Adapter_Create SMAPI interface - */ -int smVirtual_Network_Adapter_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, int networkAdapterDevices, - char * channelPathId, vmApiVirtualNetworkAdapterCreateOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 1 /* adapterType */+ 4 - /* networking adapter devices */+ 4 + strlen(channelPathId); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - *cursor = adapterType; // Adapter type byte - cursor++; - - PUT_INT(networkAdapterDevices, cursor); // Network adapter devices - - tempSize = strlen(channelPathId); // Channel path id 0..2 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, channelPathId, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c deleted file mode 100644 index 6bf68e5..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterCreateDm.c +++ /dev/null @@ -1,106 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Create_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterCreateDmOutput - -/** - * Virtual_Network_Adapter_Create_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Create_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, char adapterType, int networkAdapterDevices, - char * channelPathId, char * macId, - vmApiVirtualNetworkAdapterCreateDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Create_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber) + 1 /* adapterType */ + 4 - /* networking adapter devices */ + 4 + strlen(channelPathId) + 4 - + strlen(macId); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - *cursor = adapterType; // Adapter type byte - cursor++; - - PUT_INT(networkAdapterDevices, cursor); // Network adapter devices - - tempSize = strlen(channelPathId); // Channel path ID 0..2 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, channelPathId, tempSize); - cursor += tempSize; - } - - tempSize = strlen(macId); // Mac ID 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, macId, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDelete.c deleted file mode 100644 index 03bdf94..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDelete.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDeleteOutput - -/** - * Virtual_Network_Adapter_Delete_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c deleted file mode 100644 index fb8730a..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDeleteDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Delete_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDeleteDmOutput - -/** - * Virtual_Network_Adapter_Delete_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Delete_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDeleteDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Delete_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c deleted file mode 100644 index f20b1b4..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnect.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Disconnect_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDisconnectOutput - -/** - * Virtual_Network_Adapter_Disconnect SMAPI interface - */ -int smVirtual_Network_Adapter_Disconnect( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Disconnect"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c deleted file mode 100644 index e8dcb64..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterDisconnectDm.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Disconnect_DM_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterDisconnectDmOutput - -/** - * Virtual_Network_Adapter_Disconnect_DM SMAPI interface - */ -int smVirtual_Network_Adapter_Disconnect_DM( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterDisconnectDmOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Disconnect_DM"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterQuery.c deleted file mode 100644 index b246352..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkAdapterQuery.c +++ /dev/null @@ -1,84 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Adapter_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkAdapterQueryOutput - -/** - * Virtual_Network_Adapter_Query SMAPI interface - */ -int smVirtual_Network_Adapter_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * imageDeviceNumber, - vmApiVirtualNetworkAdapterQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_Adapter_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - imageDeviceNumber); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(imageDeviceNumber); // Image device number 1..4 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, imageDeviceNumber, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccess.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccess.c deleted file mode 100644 index 82a92ab..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccess.c +++ /dev/null @@ -1,100 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Access_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanAccessOutput - -/** - * Virtual_Network_LAN_Access SMAPI interface - */ -int smVirtual_Network_LAN_Access(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - char * accessOption, char * accessGrantName, char * promiscuity, - vmApiVirtualNetworkLanAccessOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Access"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + strlen(lanName) - + 1 + strlen(lanOwner) + 1 + strlen(accessOption) + 1 + strlen( - accessGrantName) + 1 + strlen(promiscuity) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - strcpy(cursor, lanName); - cursor += tempSize + 1; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - strcpy(cursor, lanOwner); - cursor += tempSize + 1; - - tempSize = strlen(accessOption); // Access option GRANT or REVOKE - strcpy(cursor, accessOption); - cursor += tempSize + 1; - - tempSize = strlen(accessGrantName); // Access grant user 1..8 chars - strcpy(cursor, accessGrantName); - cursor += tempSize + 1; - - tempSize = strlen(promiscuity); // Promiscuous or nonpromiscuous - strcpy(cursor, promiscuity); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c deleted file mode 100644 index ad2c37e..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanAccessQuery.c +++ /dev/null @@ -1,87 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Access_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanAccessQueryOutput - -/** - * Virtual_Network_LAN_Access_Query SMAPI interface - */ -int smVirtual_Network_LAN_Access_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * lanName, char * lanOwner, - vmApiVirtualNetworkLanAccessQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Access_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + strlen(lanName) - + 1 + strlen(lanOwner) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - strcpy(cursor, lanName); - cursor += tempSize + 1; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - strcpy(cursor, lanOwner); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanCreate.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanCreate.c deleted file mode 100644 index 0bed79c..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanCreate.c +++ /dev/null @@ -1,94 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanCreateOutput - -/** - * Virtual_Network_Lan_Create SMAPI interface - */ -int smVirtual_Network_LAN_Create(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, char lanType, - char transportType, vmApiVirtualNetworkLanCreateOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - lanName) + 4 + strlen(lanOwner) + 1 /* lanType */+ 1 /* transportType */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - *cursor = lanType; // Lan type byte - cursor++; - - *cursor = transportType; // Transport type byte - cursor++; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanDelete.c deleted file mode 100644 index d596102..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanDelete.c +++ /dev/null @@ -1,89 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanDeleteOutput - -/** - * Virtual_Network_Lan_Delete SMAPI interface - */ -int smVirtual_Network_LAN_Delete(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanDeleteOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; - -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanQuery.c deleted file mode 100644 index 5e804a5..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkLanQuery.c +++ /dev/null @@ -1,88 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_LAN_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkLanQueryOutput - -/** - * Virtual_Network_Lan_Query SMAPI interface - */ -int smVirtual_Network_LAN_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * lanName, char * lanOwner, - vmApiVirtualNetworkLanQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_LAN_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - lanName) + 4 + strlen(lanOwner); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(lanName); // Lan name 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanName, tempSize); - cursor += tempSize; - - tempSize = strlen(lanOwner); // Lan owner 1..8 chars - PUT_INT(tempSize, cursor); - memcpy(cursor, lanOwner, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryLan.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryLan.c deleted file mode 100644 index a41810e..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryLan.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Query_LAN_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkQueryLanOutput - -/** - * Virtual_Network_Query_LAN SMAPI interface - */ -int smVirtual_Network_Query_LAN(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryLanOutput ** outData) { - const char * const functionName = "Virtual_Network_Query_LAN"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryOsa.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryOsa.c deleted file mode 100644 index 1119786..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkQueryOsa.c +++ /dev/null @@ -1,57 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Query_OSA_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkQueryOsaOutput - -/** - * Virtual_Network_Query_OSA SMAPI interface - */ -int smVirtual_Network_Query_OSA(struct _VmApiInternalContext* vmapiContextP, - vmApiVirtualNetworkQueryOsaOutput ** outData) { - const char * const functionName = "Virtual_Network_Query_OSA"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 1 + strlen(functionName) + 1; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - *cursor = 0xFF; // Separator - cursor++; - - tempSize = strlen(functionName); - strcpy(cursor, functionName); - cursor += tempSize + 1; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchCreate.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchCreate.c deleted file mode 100644 index 60e536d..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchCreate.c +++ /dev/null @@ -1,216 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Create_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchCreateOutput - -/** - * Virtual_Network_Vswitch_Create SMAPI interface - */ -int smVirtual_Network_Vswitch_Create( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char * realDeviceAddress, char * portName, - char * controllerName, char connectionValue, int queueMemoryLimit, - char routingValue, char transportType, int vlanId, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - int nativeVlanId, vmApiVirtualNetworkVswitchCreateOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Create"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName) + 4 + strlen(realDeviceAddress) + 4 + strlen(portName) - + 4 + strlen(controllerName) + 1 /* connectionValue */+ 4 - /* queueMemoryLimit */+ 1 /* routingValue */+ 1 /* transportType */+ 4 - /* vlanId */+ 1 /* porttype */+ 1 /* updateSystemConfigIndicator */+ 4 - + strlen(systemConfigName) + 4 + strlen(systemConfigType) + 4 - + strlen(parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword) + 1 - /* gvrpValue */+ 4 /* nativeVlanId */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - tempSize = strlen(realDeviceAddress); // Real device address 0..14 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, realDeviceAddress, tempSize); - cursor += tempSize; - } - - tempSize = strlen(portName); // Port name 0..26 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, portName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(controllerName); // Controller name 0..8 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, controllerName, tempSize); - cursor += tempSize; - } - - *cursor = connectionValue; // Connection value byte - cursor++; - - PUT_INT(queueMemoryLimit, cursor); // Queue memory limit - - *cursor = routingValue; // Routing value byte - cursor++; - - *cursor = transportType; // Transport type byte - cursor++; - - PUT_INT(vlanId, cursor); // Vlan id - - *cursor = portType; // Port type byte - cursor++; - - *cursor = updateSystemConfigIndicator; // Update system config indicator byte - cursor++; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - } - - *cursor = gvrpValue; - cursor++; - - PUT_INT(nativeVlanId, cursor); // Native vlan id - - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchDelete.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchDelete.c deleted file mode 100644 index cf72eec..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchDelete.c +++ /dev/null @@ -1,167 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Delete_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchDeleteOutput - -/** - * Virtual_Network_Vswitch_Delete SMAPI interface - */ -int smVirtual_Network_Vswitch_Delete( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, char updateSystemConfigIndicator, - char * systemConfigName, char * systemConfigType, char * parmDiskOwner, - char * parmDiskNumber, char * parmDiskPassword, - char * altSystemConfigName, char * altSystemConfigType, - char * altParmDiskOwner, char * altParmDiskNumber, - char * altParmDiskPassword, - vmApiVirtualNetworkVswitchDeleteOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Delete"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName) + 1 /* updateSystemConfigIndicator */+ 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - *cursor = updateSystemConfigIndicator; // Update system config indicator byte - cursor++; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchQuery.c deleted file mode 100644 index fd66593..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchQuery.c +++ /dev/null @@ -1,83 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchQueryOutput - -/** - * Virtual_Network_Vswitch_Query SMAPI interface - */ -int smVirtual_Network_Vswitch_Query( - struct _VmApiInternalContext* vmapiContextP, char * userid, - int passwordLength, char * password, char * targetIdentifier, - char * switchName, vmApiVirtualNetworkVswitchQueryOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchSet.c b/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchSet.c deleted file mode 100644 index ab1839c..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVirtualNetworkVswitchSet.c +++ /dev/null @@ -1,237 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVirtual.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME Virtual_Network_Vswitch_Set_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVirtualNetworkVswitchSetOutput - -/** - * Virtual_Network_Vswitch_Set SMAPI interface - */ -int smVirtual_Network_Vswitch_Set(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * switchName, char * grantUserid, - char * userVlanId, char * revokeUserid, char * realDeviceAddress, - char * portName, char * controllerName, char connectionValue, - int queueMemoryLimit, char routingValue, char portType, - char updateSystemConfigIndicator, char * systemConfigName, - char * systemConfigType, char * parmDiskOwner, char * parmDiskNumber, - char * parmDiskPassword, char * altSystemConfigName, - char * altSystemConfigType, char * altParmDiskOwner, - char * altParmDiskNumber, char * altParmDiskPassword, char gvrpValue, - char * macId, vmApiVirtualNetworkVswitchSetOutput ** outData) { - const char * const functionName = "Virtual_Network_Vswitch_Set"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - switchName) + 4 + strlen(grantUserid) + 4 + strlen(userVlanId) + 4 - + strlen(revokeUserid) + 4 + strlen(realDeviceAddress) + 4 - + strlen(portName) + 4 + strlen(controllerName) + 1 - /* connectionValue */+ 4 /* queueMemoryLimit */+ 1 /* routingValue */+ 1 - /* porttype */+ 1 /* updateSystemConfigIndicator */+ 4 + strlen( - systemConfigName) + 4 + strlen(systemConfigType) + 4 + strlen( - parmDiskOwner) + 4 + strlen(parmDiskNumber) + 4 + strlen( - parmDiskPassword) + 4 + strlen(altSystemConfigName) + 4 + strlen( - altSystemConfigType) + 4 + strlen(altParmDiskOwner) + 4 + strlen( - altParmDiskNumber) + 4 + strlen(altParmDiskPassword) + 1 - /* gvrpValue */+ 4 /* macId */; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - //Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(switchName); // Switch name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, switchName, tempSize); - cursor += tempSize; - - tempSize = strlen(grantUserid); // Grant userid 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, grantUserid, tempSize); - cursor += tempSize; - } - - tempSize = strlen(userVlanId); // User vlan id 0..19 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userVlanId, tempSize); - cursor += tempSize; - } - - tempSize = strlen(revokeUserid); // Revoke userid 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, revokeUserid, tempSize); - cursor += tempSize; - } - - tempSize = strlen(realDeviceAddress); // Real device address 0..14 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, realDeviceAddress, tempSize); - cursor += tempSize; - } - - tempSize = strlen(portName); // Port name 0..26 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, portName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(controllerName); // Controller name 0..71 - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, controllerName, tempSize); - cursor += tempSize; - } - - *cursor = connectionValue; // Connection value byte - cursor++; - - PUT_INT(queueMemoryLimit, cursor); // Queue memory limit - - *cursor = routingValue; // Routing value byte - cursor++; - - *cursor = portType; // Port type byte - cursor++; - - *cursor = updateSystemConfigIndicator; // Update system config indicator byte - cursor++; - - tempSize = strlen(systemConfigName); // System config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(systemConfigType); // System config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, systemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskOwner); // Parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskNumber); // Parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(parmDiskPassword); // Parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, parmDiskPassword, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigName); // Alt system config name 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigName, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altSystemConfigType); // Alt system config type 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altSystemConfigType, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskOwner); // Alt parm disk owner 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskOwner, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskNumber); // Alt parm disk number 0..4 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskNumber, tempSize); - cursor += tempSize; - } - - tempSize = strlen(altParmDiskPassword); // Alt parm disk password 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, altParmDiskPassword, tempSize); - cursor += tempSize; - } - - *cursor = gvrpValue; - cursor++; - - tempSize = strlen(macId); // MAC id 0..6 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, macId, tempSize); - cursor += tempSize; - } - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationQuery.c deleted file mode 100644 index c7bc7d6..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationQuery.c +++ /dev/null @@ -1,95 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVMRM.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME VMRM_Configuration_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVmrmConfigurationQueryOutput - -/** - * VMRM_Configuration_Query SMAPI interface - */ -int smVMRM_Configuration_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - vmApiVmrmConfigurationQueryOutput ** outData) { - const char * const functionName = "VMRM_Configuration_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor;// Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - configurationFileName) + 4 + strlen(configurationFileType) + 4 - + strlen(configurationDirName); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileName); // Configuration file name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileName, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileType); // Configuration file type 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileType, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationDirName); // Configuration SFS directory name 1..153 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationDirName, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationUpdate.c b/zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationUpdate.c deleted file mode 100644 index dd6517b..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVmrmConfigurationUpdate.c +++ /dev/null @@ -1,104 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVMRM.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME VMRM_Configuration_Update_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVmrmConfigurationUpdateOutput - -/** - * VMRM_Configuration_Update SMAPI interface - */ -int smVMRM_Configuration_Update(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, char * configurationFileName, - char * configurationFileType, char * configurationDirName, - char syncheckOnly, int updateFileLength, char * updateFile, - vmApiVmrmConfigurationUpdateOutput ** outData) { - const char * const functionName = "VMRM_Configuration_Update"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier) + 4 + strlen( - configurationFileName) + 4 + strlen(configurationFileType) + 4 - + strlen(configurationDirName) + 1 + 4 + updateFileLength; - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - // Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileName); // Configuration file name 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileName, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationFileType); // Configuration file type 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationFileType, tempSize); - cursor += tempSize; - - tempSize = strlen(configurationDirName); // Configuration SFS directory name 1..153 - PUT_INT(tempSize, cursor); - memcpy(cursor, configurationDirName, tempSize); - cursor += tempSize; - - *cursor = syncheckOnly; - cursor++; - - tempSize = updateFileLength; // Update file 1..* - PUT_INT(tempSize, cursor); - memcpy(cursor, updateFile, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, // Integer table - TO_STRING(PARSER_TABLE_NAME), // String name of the table - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/vmapiVmrmMeasurementQuery.c b/zhcp/zhcp-build/resource_access/src/vmapiVmrmMeasurementQuery.c deleted file mode 100644 index fb6787b..0000000 --- a/zhcp/zhcp-build/resource_access/src/vmapiVmrmMeasurementQuery.c +++ /dev/null @@ -1,76 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "smSocket.h" -#include "vmapiVMRM.h" -#include "smapiTableParser.h" -#include -#include -#include - -#define PARSER_TABLE_NAME VMRM_Measurement_Query_Layout -#define OUTPUT_STRUCTURE_NAME vmApiVmrmMeasurementQueryOutput - -/** - * VMRM_Measurement_Query SMAPI interface - */ -int smVMRM_Measurement_Query(struct _VmApiInternalContext* vmapiContextP, - char * userid, int passwordLength, char * password, - char * targetIdentifier, vmApiVmrmMeasurementQueryOutput ** outData) { - const char * const functionName = "VMRM_Measurement_Query"; - tableParserParms parserParms; - int tempSize; - char * cursor; - char * stringCursor; // Used for outData string area pointer - int arrayCount; - int totalStringSize; - int rc; - int sockDesc; - int requestId; - - int inputSize = 4 + 4 + strlen(functionName) + 4 + strlen(userid) + 4 - + passwordLength + 4 + strlen(targetIdentifier); - char * inputP = 0; - char * smapiOutputP = 0; - char line[LINESIZE]; - int i; - - TRACE_ENTRY_FLOW(vmapiContextP, TRACEAREA_RESOURCE_LAYER); - - //Build SMAPI input parameter buffer - if (0 == (inputP = malloc(inputSize))) - return MEMORY_ERROR; - cursor = inputP; - PUT_INT(inputSize - 4, cursor); - - tempSize = strlen(functionName); - PUT_INT(tempSize, cursor); - memcpy(cursor, functionName, tempSize); - cursor += tempSize; - - tempSize = strlen(userid); // Userid 1..8 or 0..8 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, userid, tempSize); - cursor += tempSize; - } - - tempSize = passwordLength; // Password 1..200 or 0..200 chars - PUT_INT(tempSize, cursor); - if (tempSize > 0) { - memcpy(cursor, password, tempSize); - cursor += tempSize; - } - - tempSize = strlen(targetIdentifier); // Target identifier 1..8 - PUT_INT(tempSize, cursor); - memcpy(cursor, targetIdentifier, tempSize); - cursor += tempSize; - - // This routine will send SMAPI the input, delete the input storage - // and call the table parser to set the output in outData - rc = getAndParseSmapiBuffer(vmapiContextP, &inputP, inputSize, - PARSER_TABLE_NAME, - TO_STRING(PARSER_TABLE_NAME), - (char * *) outData); - return rc; -} diff --git a/zhcp/zhcp-build/resource_access/src/wrapperutils.c b/zhcp/zhcp-build/resource_access/src/wrapperutils.c deleted file mode 100644 index b1793b0..0000000 --- a/zhcp/zhcp-build/resource_access/src/wrapperutils.c +++ /dev/null @@ -1,102 +0,0 @@ -// IBM (C) Copyright 2010 Eclipse Public License -// http://www.eclipse.org/org/documents/epl-v10.html -#include "wrapperutils.h" - -/** - * @see wrapperutils.h: releaseContext - */ -void releaseContext(VmApiInternalContext* context) { - smMemoryGroupFreeAll(context); - smMemoryGroupTerminate(context); -} - -/** - * @see wrapperutils.h getContext - */ -void initializeContext(VmApiInternalContext* context) { - - extern struct _smTrace externSmapiTraceFlags; - - smMemoryGroupContext memContext; - - memset(context, 0, sizeof(context)); - memset(&memContext, 0, sizeof(memContext)); - memset(&externSmapiTraceFlags, 0, sizeof(smTrace)); - - context->smTraceDetails = (struct _smTrace *) &externSmapiTraceFlags; - context->memContext = &memContext; - - smMemoryGroupInitialize(context); -} - -/** - * Check if image name is between 1 and 8 characters - */ -int isImageNameInvalid(char* imageName) { - - if (strlen(imageName) < 1 || strlen(imageName) > 8) { - printf(" User ID must be between 1 and 8 characters in length.\n" - "Operation Failed\n"); - return 1; - } else { - return 0; - } -} - -/** - * Check if device addresses are specified as 4-digit hexadecimal numbers - */ -int isDevNumberInvalid(char* devNumber) { - - if ((strlen(devNumber) == 4) && ((devNumber[0] > 47 && devNumber[0] < 58) - || (devNumber[0] > 65 && devNumber[0] < 71) || (devNumber[0] > 97 - && devNumber[0] < 103)) - && ((devNumber[1] > 47 && devNumber[1] < 58) || (devNumber[1] > 65 - && devNumber[1] < 71) || (devNumber[1] > 97 && devNumber[1] - < 103)) && ((devNumber[2] > 47 && devNumber[2] < 58) - || (devNumber[2] > 65 && devNumber[2] < 71) || (devNumber[2] > 97 - && devNumber[2] < 103)) - && ((devNumber[3] > 47 && devNumber[3] < 58) || (devNumber[3] > 65 - && devNumber[3] < 71) || (devNumber[3] > 97 && devNumber[3] - < 103))) { - return 0; - } else { - printf( - " Device addresses must be specified as 4-digit hexadecimal numbers.\n" - "Operation Failed\n"); - return 1; - } -} - -/** - * Trim a specified string - */ -void trim(char * s) { - // Length of specified string - int len = strlen(s); - int end = len - 1; - int start = 0; - int i = 0; - - // Find non-blank space from left - while ((start < len) && (s[start] <= ' ')) { - start++; - } - - // Find non-blank space from right - while ((start < end) && (s[end] <= ' ')) { - end--; - } - - if (start > end) { - memset(s, '\0', len); - return; - } - - for (i = 0; (i + start) <= end; i++) { - s[i] = s[start + i]; - } - - // Trim string - memset((s + i), '\0', len - i); -}