ffi-vix_disk_lib 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,693 @@
1
+ require 'ffi'
2
+
3
+ module FFI
4
+ module VixDiskLib
5
+ module API
6
+ extend FFI::Library
7
+
8
+ def attach_function(*args)
9
+ super
10
+ rescue FFI::NotFoundError
11
+ warn "unable to attach #{args.first}"
12
+ end
13
+
14
+ def self.load_error
15
+ @load_error
16
+ end
17
+
18
+ #
19
+ # Make sure we load one and only one version of VixDiskLib
20
+ #
21
+ version_load_order = %w( 5.5.2 5.5.1 5.5.0 5.1.3 5.1.2 5.1.1 5.1.0 5.0.4 5.0.0 1.2.0 1.1.2 )
22
+ bad_versions = {"5.1.0" => "Disk Open May Core Dump without an SSL Thumbprint"}
23
+ load_errors = []
24
+ loaded_library = ""
25
+ version_load_order.each do |version|
26
+ begin
27
+ loaded_library = ffi_lib ["vixDiskLib.so.#{version}"]
28
+ VERSION_MAJOR, VERSION_MINOR = loaded_library.first.name.split(".")[2, 2].collect(&:to_i)
29
+ if bad_versions.keys.include?(version)
30
+ loaded_library = ""
31
+ @load_error = "VixDiskLib #{version} is not supported: #{bad_versions[version]}"
32
+ end
33
+ break
34
+ rescue LoadError => err
35
+ load_errors << "ffi-vix_disk_lib: failed to load #{version} version with error: #{err.message}."
36
+ next
37
+ end
38
+ end
39
+
40
+ unless @load_error || loaded_library.length > 0
41
+ STDERR.puts load_errors.join("\n")
42
+ @load_error = "ffi-vix_disk_lib: failed to load any version of VixDiskLib!"
43
+ end
44
+ LOADED_LIBRARY = loaded_library
45
+
46
+ # An error is a 64-bit value. If there is no error, then the value is
47
+ # set to VIX_OK. If there is an error, then the least significant bits
48
+ # will be set to one of the integer error codes defined below. The more
49
+ # significant bits may or may not be set to various values, depending on
50
+ # the errors.
51
+
52
+ def self.vix_error_code(err)
53
+ err & 0xFFFF
54
+ end
55
+
56
+ def self.vix_succeeded?(err)
57
+ err == VixErrorType[:VIX_OK]
58
+ end
59
+
60
+ def self.vix_failed?(err)
61
+ err != VixErrorType[:VIX_OK]
62
+ end
63
+
64
+ callback :GenericLogFunc, [:string, :pointer], :void
65
+
66
+ # Prototype for the progress function called by VixDiskLib.
67
+ #
68
+ # @scope class
69
+ # @method ProgressFunc(progress_data, percent_completed)
70
+ # @param progress_data [FFI::Pointer(*Void)] User supplied opaque pointer.
71
+ # @param percent_completed [Integer] Completion percent.
72
+ # @return [Boolean] ignores the return value.
73
+ # This function may be called with the same percentage completion
74
+ # multiple times.
75
+ callback :ProgressFunc, [:pointer, :int], :bool
76
+
77
+ # Perform a cleanup after an unclean shutdown of an application using
78
+ # VixDiskLib.
79
+ #
80
+ # When using VixDiskLib_ConnectEx, some state might have not been cleaned
81
+ # up if the resulting connection was not shut down cleanly. Use
82
+ # VixDiskLib_Cleanup to remove this extra state.
83
+ #
84
+ # @param connection [in] Hostname and login credentials to connect to
85
+ # a host managing virtual machines that were accessed and need
86
+ # cleanup. While VixDiskLib_Cleanup can be invoked for local
87
+ # connections as well, it is a no-op in that case. Also, the
88
+ # vmxSpec property of connectParams should be set to NULL.
89
+ # @param numCleanedUp [out] Number of virtual machines that were
90
+ # successfully cleaned up. -- Can be NULL.
91
+ # @param numRemaining [out] Number of virutal machines that still
92
+ # require cleaning up. -- Can be NULL.
93
+ # @return VIX_OK if all virtual machines were successfully cleaned
94
+ # up or if no virtual machines required cleanup. VIX error
95
+ # code otherwise and numRemaning can be used to check for
96
+ # the number of virtual machines requiring cleanup.
97
+ #
98
+ attach_function :cleanup, :VixDiskLib_Cleanup,
99
+ [
100
+ ConnectParams, # connectParams,
101
+ :pointer, # numCleanedUp,
102
+ :pointer # numRemaining
103
+ ],
104
+ :VixError
105
+
106
+ # Closes the disk.
107
+ #
108
+ # @param diskHandle [in] Handle to an open virtual disk.
109
+ # @return VIX_OK if success, suitable VIX error code otherwise.
110
+ attach_function :close, :VixDiskLib_Close,
111
+ [
112
+ :pointer # disk handle
113
+ ],
114
+ :VixError
115
+
116
+ # Connects to a local / remote server.
117
+ #
118
+ # @param connectParams [in] NULL if manipulating local disks.
119
+ # For remote case this includes esx hostName and
120
+ # user credentials.
121
+ # @param connection [out] Returned handle to a connection.
122
+ # @return VIX_OK if success suitable VIX error code otherwise.
123
+ attach_function :connect, :VixDiskLib_Connect,
124
+ [
125
+ ConnectParams, # connectParams,
126
+ :Connection # connection
127
+ ],
128
+ :VixError
129
+
130
+ # Create a transport context to access disks belonging to a
131
+ # particular snapshot of a particular virtual machine. Using this
132
+ # transport context will enable callers to open virtual disks using
133
+ # the most efficient data acces protocol available for managed
134
+ # virtual machines, hence getting better I/O performance.
135
+ #
136
+ # If this call is used instead of VixDiskLib_Connect, the additional
137
+ # information passed in will be used in order to optimize the I/O
138
+ # access path, to maximize I/O throughput.
139
+ #
140
+ # Note: For local virtual machines/disks, this call is equivalent
141
+ # to VixDiskLib_Connect.
142
+ #
143
+ # @param connectParams [in] NULL if maniuplating local disks.
144
+ # For remote case this includes esx hostName and
145
+ # user credentials.
146
+ # @param readOnly [in] Should be set to TRUE if no write access is needed
147
+ # for the disks to be accessed through this connection. In
148
+ # some cases, a more efficient I/O path can be used for
149
+ # read-only access.
150
+ # @param snapshotRef [in] A managed object reference to the specific
151
+ # snapshot of the virtual machine whose disks will be
152
+ # accessed with this connection. Specifying this
153
+ # property is only meaningful if the vmxSpec property in
154
+ # connectParams is set as well.
155
+ # @param transportModes [in] An optional list of transport modes that
156
+ # can be used for this connection, separated by
157
+ # colons. If NULL is specified, VixDiskLib's default
158
+ # setting of "file:san:hotadd:nbd" is used. If a disk is
159
+ # opened through this connection, VixDiskLib will start
160
+ # with the first entry of the list and attempt to use
161
+ # this transport mode to gain access to the virtual
162
+ # disk. If this does not work, the next item in the list
163
+ # will be used until either the disk was successfully
164
+ # opened or the end of the list is reached.
165
+ # @param connection [out] Returned handle to a connection.
166
+ # @return VIX_OK if success, suitable VIX error code otherwise.
167
+ attach_function :connect_ex, :VixDiskLib_ConnectEx,
168
+ [
169
+ ConnectParams, # connectParams,
170
+ :bool, # readOnly flag
171
+ :pointer, # snapshotRef string
172
+ :pointer, # transportModes string
173
+ :Connection # connection
174
+ ],
175
+ :VixError
176
+
177
+ # Creates a local disk. Remote disk creation is not supported.
178
+ #
179
+ # @param connection [in] A valid connection.
180
+ # @param path [in] VMDK file name given as absolute path
181
+ # e.g. "c:\\My Virtual Machines\\MailServer\SystemDisk.vmdk".
182
+ # @param createParams [in] Specification for the new disk (type, capacity ...).
183
+ # @param progressFunc [in] Callback to report progress.
184
+ # @param progressCallbackData [in] Callback data pointer.
185
+ # @return VIX_OK if success suitable VIX error code otherwise.
186
+ attach_function :create, :VixDiskLib_Create,
187
+ [
188
+ :Connection, # connection,
189
+ :pointer, # path,
190
+ CreateParams, # createParams,
191
+ :ProgressFunc, # progressFunc,
192
+ :pointer # progressCallbackData
193
+ ],
194
+ :VixError
195
+
196
+ # Creates a redo log from a parent disk.
197
+ #
198
+ # @param diskHandle [in] Handle to an open virtual disk.
199
+ # @param childPath [in] Redo log file name given as absolute path
200
+ # e.g. "c:\\My Virtual Machines\\MailServer\SystemDisk_s0001.vmdk".
201
+ # @param diskType [in] Either VIXDISKLIB_DISK_MONOLITHIC_SPARSE or
202
+ # VIXDISKLIB_DISK_SPLIT_SPARSE.
203
+ # @param progressFunc [in] Callback to report progress.
204
+ # @param progressCallbackData [in] Callback data pointer.
205
+ # @return VIX_OK if success, suitable VIX error code otherwise.
206
+ attach_function :create_child, :VixDiskLib_CreateChild,
207
+ [
208
+ :pointer, # diskHandle,
209
+ :pointer, # childPath,
210
+ :int, # diskType,
211
+ :ProgressFunc, # progressFunc,
212
+ :pointer # progressCallbackData
213
+ ],
214
+ :VixError
215
+
216
+ # Breaks an existing connection.
217
+ #
218
+ # @param connection [in] Valid handle to a (local/remote) connection.
219
+ # @return VIX_OK if success suitable VIX error code otherwise.
220
+ attach_function :disconnect, :VixDiskLib_Disconnect,
221
+ [
222
+ :Connection # connection
223
+ ],
224
+ :VixError
225
+
226
+ # This function is used to notify the host of a virtual machine that the
227
+ # virtual machine disks are closed and that the operations which rely on the
228
+ # virtual machine disks to be closed can now be allowed.
229
+ #
230
+ # @param connectParams [in] Always used for a remote connection. Must be the
231
+ # same parameters as used in the corresponding PrepareForAccess call.
232
+ # @param identity [in] An arbitrary string containing the identity of the
233
+ # application.
234
+ # @return VIX_OK of success, suitable VIX error code otherwise.
235
+ attach_function :end_access, :VixDiskLib_EndAccess,
236
+ [
237
+ ConnectParams, # connectParams,
238
+ :pointer # identity string
239
+ ],
240
+ :VixError
241
+
242
+ # Cleans up VixDiskLib.
243
+ #
244
+ # @scope class
245
+ # @method exit
246
+ # @return [nil]
247
+ attach_function :exit, :VixDiskLib_Exit, [], :void
248
+
249
+ # Free the error message returned by get_error_text.
250
+ #
251
+ # @scope class
252
+ # @method free_error_text(errMsg)
253
+ # @param errMsg [FFI:Pointer(*String)] Message string returned by get_error_text.
254
+ # It is OK to call this function with nil.
255
+ # @return [nil]
256
+ attach_function :free_error_text, :VixDiskLib_FreeErrorText,
257
+ [
258
+ :pointer # errMsg to free
259
+ ],
260
+ :void
261
+
262
+ # Returns the textual description of an error.
263
+ #
264
+ # @scope class
265
+ # @method get_error_text(err, locale)
266
+ # @param err [VixError] A VIX error code.
267
+ # @param locale [String] Language locale - not currently supported and must be nil.
268
+ # @return [String] The error message string. This should only be deallocated
269
+ # by free_error_text.
270
+ # Returns NULL if there is an error in retrieving text.
271
+ attach_function :get_error_text, :VixDiskLib_GetErrorText,
272
+ [
273
+ :VixError, # err
274
+ :pointer # locale
275
+ ],
276
+ :pointer
277
+
278
+ # Retrieves the list of keys in the metadata table.
279
+ # Key names are returned as list of null-terminated strings,
280
+ # followed by an additional NULL character.
281
+ #
282
+ # @param diskHandle [in] Handle to an open virtual disk.
283
+ # @param keys [out, optional] Keynames buffer, can be NULL.
284
+ # @param maxLen [in] Size of the keynames buffer.
285
+ # @param requiredLen [out, optional] Space required for the keys including the double
286
+ # end-of-string characters.
287
+ # @return VIX_OK if success, suitable VIX error code otherwise.
288
+ attach_function :get_metadata_keys, :VixDiskLib_GetMetadataKeys,
289
+ [
290
+ :pointer, # diskHandle,
291
+ :pointer, # keys,
292
+ :uint64, # size_t maxLen,
293
+ :pointer, # requiredLen
294
+ ],
295
+ :VixError
296
+
297
+ # Returns a pointer to a static string identifying the transport mode that
298
+ # is used to access the virtual disk's data.
299
+ #
300
+ # If a disk was opened through a connection obtained by VixDiskLib_Connect,
301
+ # the return value will be "file" for a local disk and "nbd" or "nbdssl" for
302
+ # a managed disk.
303
+ #
304
+ # The pointer to this string is static and must not be deallocated by the
305
+ # caller.
306
+ #
307
+ # @param diskHandle [in] Handle to an open virtual disk.
308
+ # @return Returns a pointer to a static string identifying the transport
309
+ # mode used to access the disk's data.
310
+ attach_function :get_transport_mode, :VixDiskLib_GetTransportMode,
311
+ [
312
+ :pointer # diskHandle
313
+ ],
314
+ :pointer # transport mode
315
+
316
+ # Initializes VixDiskLib - deprecated, please use initEx.
317
+ #
318
+ # @scope class
319
+ # @method init(majorVersion, minorVersion, log, warn, panic, libDir)
320
+ # @param majorVersion [Integer] Required major version number for client.
321
+ # @param minorVersion [Integer] Required minor version number for client.
322
+ # @param log [FFI::Pointer(*GenericLogFunc)] Callback for Log entries.
323
+ # @param warn [FFI::Pointer(*GenericLogFunc)] Callback for warnings.
324
+ # @param panic [FFI::Pointer(*GenericLogFunc)] Callback for panic.
325
+ # @param libDir [String] Directory location where dependent libs are located.
326
+ # @return [VixError] VIX_OK on success, suitable VIX error code otherwise.
327
+ attach_function :init, :VixDiskLib_Init,
328
+ [
329
+ :uint32, # majorVersion
330
+ :uint32, # minorVersion
331
+ :GenericLogFunc, # log
332
+ :GenericLogFunc, # warn
333
+ :GenericLogFunc, # panic
334
+ :string, # libDir
335
+ ], :VixError
336
+
337
+ # Initializes VixDiskLib.
338
+ #
339
+ # @scope class
340
+ # @method initEx(majorVersion, minorVersion, log, warn, panic, libDir, configFile)
341
+ # @param majorVersion [Integer] Required major version number for client.
342
+ # @param minorVersion [Integer] Required minor version number for client.
343
+ # @param log [FFI::Pointer(*GenericLogFunc)] Callback for Log entries.
344
+ # @param warn [FFI::Pointer(*GenericLogFunc)] Callback for warnings.
345
+ # @param panic [FFI::Pointer(*GenericLogFunc)] Callback for panic.
346
+ # @param libDir [String] Directory location where dependent libs are located.
347
+ # @param configFile [String] Configuration file path in local encoding.
348
+ # configuration files are of the format
349
+ # name = "value"
350
+ # each name/value pair on a separate line. For a detailed
351
+ # description of allowed values, refer to the
352
+ # documentation.
353
+ # @return [VixError] VIX_OK on success, suitable VIX error code otherwise.
354
+ attach_function :init_ex, :VixDiskLib_InitEx,
355
+ [
356
+ :uint32, # majorVersion
357
+ :uint32, # minorVersion
358
+ :GenericLogFunc, # log
359
+ :GenericLogFunc, # warn
360
+ :GenericLogFunc, # panic
361
+ :string, # libDir
362
+ :string, # configFile
363
+ ],
364
+ :VixError
365
+
366
+ # This function is used to notify the host of the virtual machine that the
367
+ # disks of the virtual machine will be opened. The host disables operations on
368
+ # the virtual machine that may be adversely affected if they are performed
369
+ # while the disks are open by a third party application.
370
+ #
371
+ # @param connectParams [in] This is always used on remote connections.
372
+ # @param identity [in] An arbitrary string containing the identity of the
373
+ # application.
374
+ # @return VIX_OK if success, suitable VIX error code otherwise.
375
+ attach_function :prepare_for_access, :VixDiskLib_PrepareForAccess,
376
+ [
377
+ ConnectParams, # connectParams,
378
+ :pointer # identity
379
+ ],
380
+ :VixError
381
+
382
+ # Get a list of transport modes known to VixDiskLib. This list is also the
383
+ # default used if VixDiskLib_ConnectEx is called with transportModes set
384
+ # to NULL.
385
+ #
386
+ # The string is a list of transport modes separated by colons. For
387
+ # example: "file:san:hotadd:nbd". See VixDiskLib_ConnectEx for more details.
388
+ #
389
+ # @return Returns a string that is a list of plugins. The caller must not
390
+ # free the string.
391
+ attach_function :list_transport_modes, :VixDiskLib_ListTransportModes,
392
+ [
393
+ ],
394
+ :pointer # list of transport plugins
395
+
396
+ # Opens a local or remote virtual disk.
397
+ #
398
+ # @param connection [in] A valid connection.
399
+ # @param path [in] VMDK file name given as absolute path
400
+ # e.g. "[storage1] MailServer/SystemDisk.vmdk"
401
+ # @param flags [in, optional] Bitwise or'ed combination of
402
+ # VIXDISKLIB_FLAG_OPEN_UNBUFFERED
403
+ # VIXDISKLIB_FLAG_OPEN_SINGLE_LINK
404
+ # VIXDISKLIB_FLAG_OPEN_READ_ONLY.
405
+ # @param diskHandle [out] Handle to opened disk, NULL if disk was not opened.
406
+ # @return VIX_OK if success, suitable VIX error code otherwise.
407
+ attach_function :open, :VixDiskLib_Open,
408
+ [
409
+ :Connection, # connection
410
+ :pointer, # path
411
+ :uint32, # flags
412
+ :pointer # disk handle
413
+ ],
414
+ :VixError
415
+
416
+ # Reads a sector range.
417
+ #
418
+ # @param diskHandle [in] Handle to an open virtual disk.
419
+ # @param startSector [in] Absolute offset.
420
+ # @param numSectors [in] Number of sectors to read.
421
+ # @param readBuffer [out] Buffer to read into.
422
+ # @return VIX_OK if success, suitable VIX error code otherwise.
423
+ attach_function :read, :VixDiskLib_Read,
424
+ [
425
+ :pointer, # disk handle
426
+ :SectorType, # start sector
427
+ :SectorType, # number of sectors
428
+ :pointer # read buffer
429
+ ],
430
+ :VixError
431
+
432
+ # Writes a sector range.
433
+ #
434
+ # @param diskHandle [in] Handle to an open virtual disk.
435
+ # @param startSector [in] Absolute offset.
436
+ # @param numSectors [in] Number of sectors to write.
437
+ # @param writeBuffer [in] Buffer to write.
438
+ # @return VIX_OK if success, suitable VIX error code otherwise.
439
+ attach_function :write, :VixDiskLib_Write,
440
+ [
441
+ :pointer, # disk handle
442
+ :SectorType, # start sector
443
+ :SectorType, # number of sectors
444
+ :pointer # write buffer
445
+ ],
446
+ :VixError
447
+
448
+ # Retrieves the value of a metadata entry corresponding to the supplied key.
449
+ #
450
+ # @param diskHandle [in] Handle to an open virtual disk.
451
+ # @param key [in] Key name.
452
+ # @param buf [out, optional] Placeholder for key's value in the metadata store,
453
+ # can be NULL.
454
+ # @param bufLen [in] Size of the buffer.
455
+ # @param requiredLen [out, optional] Size of buffer required for the value (including
456
+ # end of string character)
457
+ # @return VIX_OK if success, VIX_E_DISK_BUFFER_TOO_SMALL if too small a buffer
458
+ # and other errors as applicable.
459
+ attach_function :read_metadata, :VixDiskLib_ReadMetadata,
460
+ [
461
+ :pointer, # diskHandle,
462
+ :pointer, # key,
463
+ :pointer, # buf,
464
+ :uint64, # size_t bufLen,
465
+ :pointer, # size_t *requiredLen
466
+ ],
467
+ :VixError
468
+
469
+ # Creates or modifies a metadata table entry.
470
+ #
471
+ # @param diskHandle [in] Handle to an open virtual disk.
472
+ # @param key [in] Key name.
473
+ # @param val [in] Key's value.
474
+ # @return VIX_OK if success, suitable VIX error code otherwise.
475
+ attach_function :write_metadata, :VixDiskLib_WriteMetadata,
476
+ [
477
+ :pointer, # diskHandle,
478
+ :pointer, # key,
479
+ :pointer # val
480
+ ],
481
+ :VixError
482
+
483
+ # Deletes all extents of the specified disk link. If the path refers to a
484
+ # parent disk, the child (redo log) will be orphaned.
485
+ # Unlinking the child does not affect the parent.
486
+ #
487
+ # @param connection [in] A valid connection.
488
+ # @param path [in] Path to the disk to be deleted.
489
+ # @return VIX_OK if success, suitable VIX error code otherwise.
490
+ attach_function :unlink, :VixDiskLib_Unlink,
491
+ [
492
+ :Connection, # connection,
493
+ :pointer # const char *path
494
+ ],
495
+ :VixError
496
+
497
+ # Grows an existing disk, only local disks are grown.
498
+ #
499
+ # @pre The specified disk is not open.
500
+ # @param connection [in] A valid connection.
501
+ # @param path [in] Path to the disk to be grown.
502
+ # @param capacity [in] Target size for the disk.
503
+ # @param updateGeometry [in] Should vixDiskLib update the geometry?
504
+ # @param progressFunc [in] Callback to report progress (called on the same thread).
505
+ # @param progressCallbackData [in] Opaque pointer passed along with the percent
506
+ # complete.
507
+ # @return VIX_OK if success, suitable VIX error code otherwise.
508
+ attach_function :grow, :VixDiskLib_Grow,
509
+ [
510
+ :Connection, # connection,
511
+ :pointer, # path,
512
+ :SectorType, # capacity,
513
+ :bool, # updateGeometry,
514
+ :ProgressFunc, # progressFunc,
515
+ :pointer # progressCallbackData
516
+ ],
517
+ :VixError
518
+
519
+ # Shrinks an existing disk, only local disks are shrunk.
520
+ #
521
+ # @param diskHandle [in] Handle to an open virtual disk.
522
+ # @param progressFunc [in] Callback to report progress (called on the same thread).
523
+ # @param progressCallbackData [in] Opaque pointer passed along with the percent
524
+ # complete.
525
+ # @return VIX_OK if success, suitable VIX error code otherwise.
526
+ attach_function :shrink, :VixDiskLib_Shrink,
527
+ [
528
+ :pointer, # diskHandle,
529
+ :ProgressFunc, # progressFunc,
530
+ :pointer # progressCallbackData
531
+ ],
532
+ :VixError
533
+
534
+ # Defragments an existing disk.
535
+ #
536
+ # @param diskHandle [in] Handle to an open virtual disk.
537
+ # @param progressFunc [in] Callback to report progress (called on the same thread).
538
+ # @param progressCallbackData [in] Opaque pointer passed along with the percent
539
+ # complete.
540
+ # @return VIX_OK if success, suitable VIX error code otherwise.
541
+ attach_function :defragment, :VixDiskLib_Defragment,
542
+ [
543
+ :pointer, # diskHandle,
544
+ :ProgressFunc, # progressFunc,
545
+ :pointer # progressCallbackData
546
+ ],
547
+ :VixError
548
+
549
+ # Renames a virtual disk.
550
+ #
551
+ # @param srcFileName [in] Virtual disk file to rename.
552
+ # @param dstFileName [in] New name for the virtual disk.
553
+ # @return VIX_OK if success, suitable VIX error code otherwise.
554
+ attach_function :rename, :VixDiskLib_Rename,
555
+ [
556
+ :pointer, # srcFileName,
557
+ :pointer # dstFileName
558
+ ],
559
+ :VixError
560
+
561
+ # Copies a disk with proper conversion.
562
+ #
563
+ # @param dstConnection [in] A valid connection to access the destination disk.
564
+ # @param dstPath [in] Absolute path for the (new) destination disk.
565
+ # @param srcConnection [in] A valid connection to access the source disk.
566
+ # @param srcPath [in] Absolute path for the source disk.
567
+ # @param vixCreateParams [in] creationParameters (disktype, hardware type...).
568
+ # If the destination is remote, createParams is currently
569
+ # ignored and disk with default size and adapter type is
570
+ # created.
571
+ # @param progressFunc [in] Callback to report progress (called on the same thread).
572
+ # @param progressCallbackData [in] Opaque pointer passed along with the percent
573
+ # complete.
574
+ # @param overWrite [in] TRUE if Clone should overwrite an existing file.
575
+ # @return VIX_OK if success, suitable VIX error code otherwise (network errors like
576
+ # file already exists
577
+ # handshake failure, ...
578
+ # are all combined into a generic connect message).
579
+ attach_function :clone, :VixDiskLib_Clone,
580
+ [
581
+ :Connection, # dstConnection,
582
+ :pointer, # dstPath,
583
+ :Connection, # srcConnection,
584
+ :pointer, # srcPath,
585
+ CreateParams, # createParams,
586
+ :ProgressFunc, # progressFunc,
587
+ :pointer, # progressCallbackData
588
+ :bool # overWrite
589
+ ],
590
+ :VixError
591
+
592
+ # Retrieves information about a disk.
593
+ #
594
+ # @param diskHandle [in] Handle to an open virtual disk.
595
+ # @param info [out] Disk information filled up.
596
+ # @return VIX_OK if success, suitable VIX error code otherwise.
597
+ attach_function :get_info, :VixDiskLib_GetInfo,
598
+ [
599
+ :pointer, # disk handle
600
+ :pointer # disk info
601
+ ],
602
+ :VixError
603
+
604
+ # Frees memory allocated in get_info
605
+ #
606
+ # @param info [in] Disk information to be freed.
607
+ attach_function :free_info, :VixDiskLib_FreeInfo,
608
+ [
609
+ :pointer, # disk info to free
610
+ ],
611
+ :void
612
+
613
+ # Return the details for the connection.
614
+ #
615
+ # @param connection [in] A VixDiskLib connection.
616
+ # @param connectParams [out] Details of the connection.
617
+ # @return VIX_OK if success, suitable VIX error code otherwise.
618
+ attach_function :get_connect_params, :VixDiskLib_GetConnectParams,
619
+ [
620
+ :pointer, # connection,
621
+ :pointer # connectParams
622
+ ],
623
+ :VixError
624
+
625
+ # Free the connection details structure allocated during
626
+ # VixDiskLib_GetConnectParams.
627
+ #
628
+ # @param connectParams [out] Connection details to be free'ed.
629
+ # @return None.
630
+ attach_function :free_connect_params, :VixDiskLib_FreeConnectParams,
631
+ [
632
+ :pointer # connectParams
633
+ ],
634
+ :void
635
+
636
+ # Checks if the child disk chain can be attached to the parent disk chain.
637
+ #
638
+ # @param parent [in] Handle to the disk to be attached.
639
+ # @param child [in] Handle to the disk to attach.
640
+ # @return VIX_OK if success, suitable VIX error code otherwise.
641
+ attach_function :is_attach_possible, :VixDiskLib_IsAttachPossible,
642
+ [
643
+ :pointer, # parent,
644
+ :pointer # child
645
+ ],
646
+ :VixError
647
+
648
+ # Attaches the child disk chain to the parent disk chain. Parent handle is
649
+ # invalid after attaching and child represents the combined disk chain.
650
+ #
651
+ # @param parent [in] Handle to the disk to be attached.
652
+ # @param child [in] Handle to the disk to attach.
653
+ # @return VIX_OK if success, suitable VIX error code otherwise.
654
+ attach_function :attach, :VixDiskLib_Attach,
655
+ [
656
+ :pointer, # parent,
657
+ :pointer # child
658
+ ],
659
+ :VixError
660
+
661
+ # Compute the space (in bytes) required to copy a disk chain.
662
+ #
663
+ # @param diskHandle [in] Handle to the disk to be copied.
664
+ # @param cloneDiskType [in] Type of the (to be) newly created disk.
665
+ # If cloneDiskType is VIXDISKLIB_DISK_UNKNOWN, the source disk
666
+ # type is assumed.
667
+ # @param spaceNeeded [out] Place holder for space needed in bytes.
668
+ # @return VIX_OK if success, suitable VIX error code otherwise.
669
+ attach_function :space_needed_for_clone, :VixDiskLib_SpaceNeededForClone,
670
+ [
671
+ :pointer, # diskHandle,
672
+ :int, # cloneDiskType,
673
+ :pointer # spaceNeeded
674
+ ],
675
+ :VixError
676
+
677
+ # Check a sparse disk for internal consistency.
678
+ #
679
+ # @param filename [in] Path to disk to be checked.
680
+ # @param repair [in] TRUE if repair should be attempted, false otherwise.
681
+ # @return VIX_OK if success, suitable VIX error code otherwise. Note
682
+ # this refers to the success of the call, not the consistency of
683
+ # the disk being checked.
684
+ attach_function :check_repair, :VixDiskLib_CheckRepair,
685
+ [
686
+ :pointer, # connection,
687
+ :pointer, # filename,
688
+ :bool # repair
689
+ ],
690
+ :VixError
691
+ end
692
+ end
693
+ end