libvirt_ffi 0.2.1 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +78 -0
  3. data/Gemfile +7 -2
  4. data/Rakefile +6 -1
  5. data/bin/console +1 -0
  6. data/exe/libvirt +1 -0
  7. data/lib/libvirt.rb +14 -13
  8. data/lib/libvirt/base_info.rb +34 -0
  9. data/lib/libvirt/connection.rb +156 -47
  10. data/lib/libvirt/domain.rb +136 -8
  11. data/lib/libvirt/domain_callback_storage.rb +69 -0
  12. data/lib/libvirt/errors.rb +65 -0
  13. data/lib/libvirt/event.rb +60 -38
  14. data/lib/libvirt/ffi.rb +17 -0
  15. data/lib/libvirt/ffi/common.rb +8 -1
  16. data/lib/libvirt/ffi/domain.rb +796 -69
  17. data/lib/libvirt/ffi/error.rb +243 -0
  18. data/lib/libvirt/ffi/event.rb +30 -36
  19. data/lib/libvirt/ffi/helpers.rb +17 -0
  20. data/lib/libvirt/ffi/host.rb +122 -0
  21. data/lib/libvirt/ffi/storage.rb +149 -0
  22. data/lib/libvirt/ffi/stream.rb +74 -0
  23. data/lib/libvirt/node_info.rb +2 -41
  24. data/lib/libvirt/storage_pool.rb +70 -0
  25. data/lib/libvirt/storage_pool_info.rb +7 -0
  26. data/lib/libvirt/storage_volume.rb +51 -0
  27. data/lib/libvirt/storage_volume_info.rb +7 -0
  28. data/lib/libvirt/stream.rb +124 -0
  29. data/lib/libvirt/util.rb +75 -8
  30. data/lib/libvirt/version.rb +1 -1
  31. data/lib/libvirt/xml.rb +23 -0
  32. data/lib/libvirt/xml/disk.rb +59 -0
  33. data/lib/libvirt/xml/domain.rb +76 -0
  34. data/lib/libvirt/xml/generic.rb +252 -0
  35. data/lib/libvirt/xml/graphics.rb +14 -0
  36. data/lib/libvirt/xml/max_vcpu.rb +12 -0
  37. data/lib/libvirt/xml/memory.rb +14 -0
  38. data/lib/libvirt/xml/storage_pool.rb +24 -0
  39. data/lib/libvirt/xml/storage_volume.rb +32 -0
  40. data/lib/libvirt/xml/vcpu.rb +12 -0
  41. data/lib/libvirt_ffi.rb +2 -0
  42. data/libvirt.gemspec +5 -1
  43. data/test_usage/support/libvirt_async.rb +33 -31
  44. data/test_usage/support/log_formatter.rb +5 -10
  45. data/test_usage/test_domain.rb +43 -0
  46. data/test_usage/test_event_loop.rb +134 -33
  47. data/test_usage/test_libvirtd_restart.rb +63 -0
  48. data/test_usage/test_metadata.rb +104 -0
  49. data/test_usage/test_screenshot.rb +197 -0
  50. data/test_usage/test_storage.rb +52 -0
  51. metadata +46 -6
  52. data/lib/libvirt/error.rb +0 -6
  53. data/lib/libvirt/ffi/connection.rb +0 -84
  54. data/lib/libvirt/ffi/libvirt.rb +0 -17
  55. data/lib/libvirt/ffi/node_info.rb +0 -37
@@ -0,0 +1,243 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Libvirt
4
+ module FFI
5
+ module Error
6
+ # https://libvirt.org/html/libvirt-virterror.html
7
+
8
+ extend ::FFI::Library
9
+ extend Helpers
10
+ ffi_lib Util.library_path
11
+
12
+ # enum virErrorDomain
13
+ enum :error_domain, [
14
+ :NONE, 0x0, # None
15
+ :XEN, 0x1, # Error at Xen hypervisor layer
16
+ :XEND, 0x2, # Error at connection with xend daemon
17
+ :XENSTORE, 0x3, # Error at connection with xen store
18
+ :SEXPR, 0x4, # Error in the S-Expression code
19
+ :XML, 0x5, # Error in the XML code
20
+ :DOM, 0x6, # Error when operating on a domain
21
+ :RPC, 0x7, # Error in the XML-RPC code
22
+ :PROXY, 0x8, # Error in the proxy code; unused since 0.8.6
23
+ :CONF, 0x9, # Error in the configuration file handling
24
+ :QEMU, 0xa, # Error at the QEMU daemon
25
+ :NET, 0xb, # Error when operating on a network
26
+ :TEST, 0xc, # Error from test driver
27
+ :REMOTE, 0xd, # Error from remote driver
28
+ :OPENVZ, 0xe, # Error from OpenVZ driver
29
+ :XENXM, 0xf, # Error at Xen XM layer
30
+ :STATS_LINUX, 0x10, # Error in the Linux Stats code
31
+ :LXC, 0x11, # Error from Linux Container driver
32
+ :STORAGE, 0x12, # Error from storage driver
33
+ :NETWORK, 0x13, # Error from network config
34
+ :DOMAIN, 0x14, # Error from domain config
35
+ :UML, 0x15, # Error at the UML driver; unused since 5.0.0
36
+ :NODEDEV, 0x16, # Error from node device monitor
37
+ :XEN_INOTIFY, 0x17, # Error from xen inotify layer
38
+ :SECURITY, 0x18, # Error from security framework
39
+ :VBOX, 0x19, # Error from VirtualBox driver
40
+ :INTERFACE, 0x1a, # Error when operating on an interface
41
+ :ONE, 0x1b, # The OpenNebula driver no longer exists. Retained for ABI/API compat only
42
+ :ESX, 0x1c, # Error from ESX driver
43
+ :PHYP, 0x1d, # Error from the phyp driver, unused since 6.0.0
44
+ :SECRET, 0x1e, # Error from secret storage
45
+ :CPU, 0x1f, # Error from CPU driver
46
+ :XENAPI, 0x20, # Error from XenAPI
47
+ :NWFILTER, 0x21, # Error from network filter driver
48
+ :HOOK, 0x22, # Error from Synchronous hooks
49
+ :DOMAIN_SNAPSHOT, 0x23, # Error from domain snapshot
50
+ :AUDIT, 0x24, # Error from auditing subsystem
51
+ :SYSINFO, 0x25, # Error from sysinfo/SMBIOS
52
+ :STREAMS, 0x26, # Error from I/O streams
53
+ :VMWARE, 0x27, # Error from VMware driver
54
+ :EVENT, 0x28, # Error from event loop impl
55
+ :LIBXL, 0x29, # Error from libxenlight driver
56
+ :LOCKING, 0x2a, # Error from lock manager
57
+ :HYPERV, 0x2b, # Error from Hyper-V driver
58
+ :CAPABILITIES, 0x2c, # Error from capabilities
59
+ :URI, 0x2d, # Error from URI handling
60
+ :AUTH, 0x2e, # Error from auth handling
61
+ :DBUS, 0x2f, # Error from DBus
62
+ :PARALLELS, 0x30, # Error from Parallels
63
+ :DEVICE, 0x31, # Error from Device
64
+ :SSH, 0x32, # Error from libssh2 connection transport
65
+ :LOCKSPACE, 0x33, # Error from lockspace
66
+ :INITCTL, 0x34, # Error from initctl device communication
67
+ :IDENTITY, 0x35, # Error from identity code
68
+ :CGROUP, 0x36, # Error from cgroups
69
+ :ACCESS, 0x37, # Error from access control manager
70
+ :SYSTEMD, 0x38, # Error from systemd code
71
+ :BHYVE, 0x39, # Error from bhyve driver
72
+ :CRYPTO, 0x3a, # Error from crypto code
73
+ :FIREWALL, 0x3b, # Error from firewall
74
+ :POLKIT, 0x3c, # Error from polkit code
75
+ :THREAD, 0x3d, # Error from thread utils
76
+ :ADMIN, 0x3e, # Error from admin backend
77
+ :LOGGING, 0x3f, # Error from log manager
78
+ :XENXL, 0x40, # Error from Xen xl config code
79
+ :PERF, 0x41, # Error from perf
80
+ :LIBSSH, 0x42, # Error from libssh connection transport
81
+ :RESCTRL, 0x43, # Error from resource control
82
+ :FIREWALLD, 0x44, # Error from firewalld
83
+ :DOMAIN_CHECKPOINT, 0x45, # Error from domain checkpoint
84
+ :TPM, 0x46, # Error from TPM
85
+ :BPF, 0x47 # Error from BPF code
86
+ ]
87
+
88
+ # enum virErrorLevel
89
+ enum :error_level, [
90
+ :NONE, 0x0, # None
91
+ :WARNING, 0x1, # A simple warning
92
+ :ERROR, 0x2 # An error
93
+ ]
94
+
95
+ # enum virErrorNumber
96
+ enum :error_number, [
97
+ :OK, 0x0, # ok
98
+ :INTERNAL_ERROR, 0x1, # internal error
99
+ :NO_MEMORY, 0x2, # memory allocation failure
100
+ :NO_SUPPORT, 0x3, # no support for this function
101
+ :UNKNOWN_HOST, 0x4, # could not resolve hostname
102
+ :NO_CONNECT, 0x5, # can't connect to hypervisor
103
+ :INVALID_CONN, 0x6, # invalid connection object
104
+ :INVALID_DOMAIN, 0x7, # invalid domain object
105
+ :INVALID_ARG, 0x8, # invalid function argument
106
+ :OPERATION_FAILED, 0x9, # a command to hypervisor failed
107
+ :GET_FAILED, 0xa, # a HTTP GET command to failed
108
+ :POST_FAILED, 0xb, # a HTTP POST command to failed
109
+ :HTTP_ERROR, 0xc, # unexpected HTTP error code
110
+ :SEXPR_SERIAL, 0xd, # failure to serialize an S-Expr
111
+ :NO_XEN, 0xe, # could not open Xen hypervisor control
112
+ :XEN_CALL, 0xf, # failure doing an hypervisor call
113
+ :OS_TYPE, 0x10, # unknown OS type
114
+ :NO_KERNEL, 0x11, # missing kernel information
115
+ :NO_ROOT, 0x12, # missing root device information
116
+ :NO_SOURCE, 0x13, # missing source device information
117
+ :NO_TARGET, 0x14, # missing target device information
118
+ :NO_NAME, 0x15, # missing domain name information
119
+ :NO_OS, 0x16, # missing domain OS information
120
+ :NO_DEVICE, 0x17, # missing domain devices information
121
+ :NO_XENSTORE, 0x18, # could not open Xen Store control
122
+ :DRIVER_FULL, 0x19, # too many drivers registered
123
+ :CALL_FAILED, 0x1a, # not supported by the drivers (DEPRECATED)
124
+ :XML_ERROR, 0x1b, # an XML description is not well formed or broken
125
+ :DOM_EXIST, 0x1c, # the domain already exist
126
+ :OPERATION_DENIED, 0x1d, # operation forbidden on read-only connections
127
+ :OPEN_FAILED, 0x1e, # failed to open a conf file
128
+ :READ_FAILED, 0x1f, # failed to read a conf file
129
+ :PARSE_FAILED, 0x20, # failed to parse a conf file
130
+ :CONF_SYNTAX, 0x21, # failed to parse the syntax of a conf file
131
+ :WRITE_FAILED, 0x22, # failed to write a conf file
132
+ :XML_DETAIL, 0x23, # detail of an XML error
133
+ :INVALID_NETWORK, 0x24, # invalid network object
134
+ :NETWORK_EXIST, 0x25, # the network already exist
135
+ :SYSTEM_ERROR, 0x26, # general system call failure
136
+ :RPC, 0x27, # some sort of RPC error
137
+ :GNUTLS_ERROR, 0x28, # error from a GNUTLS call
138
+ :NO_NETWORK_WARN, 0x29, # failed to start network
139
+ :NO_DOMAIN, 0x2a, # domain not found or unexpectedly disappeared
140
+ :NO_NETWORK, 0x2b, # network not found
141
+ :INVALID_MAC, 0x2c, # invalid MAC address
142
+ :AUTH_FAILED, 0x2d, # authentication failed
143
+ :INVALID_STORAGE_POOL, 0x2e, # invalid storage pool object
144
+ :INVALID_STORAGE_VOL, 0x2f, # invalid storage vol object
145
+ :NO_STORAGE_WARN, 0x30, # failed to start storage
146
+ :NO_STORAGE_POOL, 0x31, # storage pool not found
147
+ :NO_STORAGE_VOL, 0x32, # storage volume not found
148
+ :NO_NODE_WARN, 0x33, # failed to start node driver
149
+ :INVALID_NODE_DEVICE, 0x34, # invalid node device object
150
+ :NO_NODE_DEVICE, 0x35, # node device not found
151
+ :NO_SECURITY_MODEL, 0x36, # security model not found
152
+ :OPERATION_INVALID, 0x37, # operation is not applicable at this time
153
+ :NO_INTERFACE_WARN, 0x38, # failed to start interface driver
154
+ :NO_INTERFACE, 0x39, # interface driver not running
155
+ :INVALID_INTERFACE, 0x3a, # invalid interface object
156
+ :MULTIPLE_INTERFACES, 0x3b, # more than one matching interface found
157
+ :NO_NWFILTER_WARN, 0x3c, # failed to start nwfilter driver
158
+ :INVALID_NWFILTER, 0x3d, # invalid nwfilter object
159
+ :NO_NWFILTER, 0x3e, # nw filter pool not found
160
+ :BUILD_FIREWALL, 0x3f, # nw filter pool not found
161
+ :NO_SECRET_WARN, 0x40, # failed to start secret storage
162
+ :INVALID_SECRET, 0x41, # invalid secret
163
+ :NO_SECRET, 0x42, # secret not found
164
+ :CONFIG_UNSUPPORTED, 0x43, # unsupported configuration construct
165
+ :OPERATION_TIMEOUT, 0x44, # timeout occurred during operation
166
+ :MIGRATE_PERSIST_FAILED, 0x45, # a migration worked, but making the VM persist on the dest host failed
167
+ :HOOK_SCRIPT_FAILED, 0x46, # a synchronous hook script failed
168
+ :INVALID_DOMAIN_SNAPSHOT, 0x47, # invalid domain snapshot
169
+ :NO_DOMAIN_SNAPSHOT, 0x48, # domain snapshot not found
170
+ :INVALID_STREAM, 0x49, # stream pointer not valid
171
+ :ARGUMENT_UNSUPPORTED, 0x4a, # valid API use but unsupported by the given driver
172
+ :STORAGE_PROBE_FAILED, 0x4b, # storage pool probe failed
173
+ :STORAGE_POOL_BUILT, 0x4c, # storage pool already built
174
+ :SNAPSHOT_REVERT_RISKY, 0x4d, # force was not requested for a risky domain snapshot revert
175
+ :OPERATION_ABORTED, 0x4e, # operation on a domain was canceled/aborted by user
176
+ :AUTH_CANCELLED, 0x4f, # authentication cancelled
177
+ :NO_DOMAIN_METADATA, 0x50, # The metadata is not present
178
+ :MIGRATE_UNSAFE, 0x51, # Migration is not safe
179
+ :OVERFLOW, 0x52, # integer overflow
180
+ :BLOCK_COPY_ACTIVE, 0x53, # action prevented by block copy job
181
+ :OPERATION_UNSUPPORTED, 0x54, # The requested operation is not supported
182
+ :SSH, 0x55, # error in ssh transport driver
183
+ :AGENT_UNRESPONSIVE, 0x56, # guest agent is unresponsive, not running or not usable
184
+ :RESOURCE_BUSY, 0x57, # resource is already in use
185
+ :ACCESS_DENIED, 0x58, # operation on the object/resource was denied
186
+ :DBUS_SERVICE, 0x59, # error from a dbus service
187
+ :STORAGE_VOL_EXIST, 0x5a, # the storage vol already exists
188
+ :CPU_INCOMPATIBLE, 0x5b, # given CPU is incompatible with host CPU
189
+ :XML_INVALID_SCHEMA, 0x5c, # XML document doesn't validate against schema
190
+ :MIGRATE_FINISH_OK, 0x5d, # Finish API succeeded but it is expected to return NULL
191
+ :AUTH_UNAVAILABLE, 0x5e, # authentication unavailable
192
+ :NO_SERVER, 0x5f, # Server was not found
193
+ :NO_CLIENT, 0x60, # Client was not found
194
+ :AGENT_UNSYNCED, 0x61, # guest agent replies with wrong id to guest-sync command (DEPRECATED)
195
+ :LIBSSH, 0x62, # error in libssh transport driver
196
+ :DEVICE_MISSING, 0x63, # fail to find the desired device
197
+ :INVALID_NWFILTER_BINDING, 0x64, # invalid nwfilter binding
198
+ :NO_NWFILTER_BINDING, 0x65, # no nwfilter binding
199
+ :INVALID_DOMAIN_CHECKPOINT, 0x66, # invalid domain checkpoint
200
+ :NO_DOMAIN_CHECKPOINT, 0x67, # domain checkpoint not found
201
+ :NO_DOMAIN_BACKUP, 0x68, # domain backup job id not found
202
+ :INVALID_NETWORK_PORT, 0x69, # invalid network port object
203
+ :NETWORK_PORT_EXIST, 0x6a, # the network port already exist
204
+ :NO_NETWORK_PORT, 0x6b, # network port not found
205
+ :NO_HOSTNAME, 0x6c # no domain's hostname found
206
+ ]
207
+
208
+ # struct virError {
209
+ # int code # The error code, a virErrorNumber
210
+ # int domain # What part of the library raised this error
211
+ # char * message # human-readable informative error message
212
+ # virErrorLevel level # how consequent is the error
213
+ # virConnectPtr conn # connection if available, deprecated see note above
214
+ # virDomainPtr dom # domain if available, deprecated see note above
215
+ # char * str1 # extra string information
216
+ # char * str2 # extra string information
217
+ # char * str3 # extra string information
218
+ # int int1 # extra number information
219
+ # int int2 # extra number information
220
+ # virNetworkPtr net # network if available, deprecated see note above
221
+ # }
222
+ class Struct < ::FFI::Struct
223
+ layout :code, FFI::Error.enum_type(:error_number),
224
+ :domain, FFI::Error.enum_type(:error_domain),
225
+ :message, :string,
226
+ :level, FFI::Error.enum_type(:error_level),
227
+ :conn, :pointer,
228
+ :dom, :pointer,
229
+ :str1, :string,
230
+ :str2, :string,
231
+ :str3, :string,
232
+ :int1, :int,
233
+ :int2, :int,
234
+ :net, :pointer
235
+ end
236
+
237
+ # virErrorPtr virGetLastError (
238
+ # void
239
+ # )
240
+ attach_function :virGetLastError, [], :pointer
241
+ end
242
+ end
243
+ end
@@ -3,29 +3,32 @@
3
3
  module Libvirt
4
4
  module FFI
5
5
  module Event
6
+ # https://libvirt.org/html/libvirt-libvirt-event.html
7
+
6
8
  extend ::FFI::Library
9
+ extend Helpers
7
10
  ffi_lib Util.library_path
8
11
 
9
- # typedef void (*virEventHandleCallback) (
12
+ # typedef void (*virEventHandleCallback) (
10
13
  # int watch,
11
- # int fd,
12
- # int events,
13
- # void * opaque
14
+ # int fd,
15
+ # int events,
16
+ # void * opaque
14
17
  # )
15
18
  EVENT_HANDLE_CALLBACK = callback :virEventHandleCallback, [:int, :int, :int, :pointer], :void
16
19
 
17
- # typedef void (*virEventTimeoutCallback) (
20
+ # typedef void (*virEventTimeoutCallback) (
18
21
  # int timer,
19
- # void * opaque
22
+ # void * opaque
20
23
  # )
21
24
  EVENT_TIMEOUT_CALLBACK = callback :virEventTimeoutCallback, [:int, :pointer], :void
22
25
 
23
- # typedef int (*virEventAddHandleFunc) (
26
+ # typedef int (*virEventAddHandleFunc) (
24
27
  # int fd,
25
- # int event,
26
- # virEventHandleCallback cb,
27
- # void * opaque,
28
- # virFreeCallback ff
28
+ # int event,
29
+ # virEventHandleCallback cb,
30
+ # void * opaque,
31
+ # virFreeCallback ff
29
32
  # )
30
33
  callback :virEventAddHandleFunc, [
31
34
  :int,
@@ -35,22 +38,22 @@ module Libvirt
35
38
  FFI::Common::FREE_CALLBACK
36
39
  ], :int
37
40
 
38
- # typedef void (*virEventUpdateHandleFunc) (
41
+ # typedef void (*virEventUpdateHandleFunc) (
39
42
  # int watch,
40
- # int event
43
+ # int event
41
44
  # )
42
45
  callback :virEventUpdateHandleFunc, [:int, :int], :void
43
46
 
44
- # typedef int (*virEventRemoveHandleFunc) (
47
+ # typedef int (*virEventRemoveHandleFunc) (
45
48
  # int watch
46
49
  # )
47
50
  callback :virEventRemoveHandleFunc, [:int], :int
48
51
 
49
- # typedef int (*virEventAddTimeoutFunc) (
52
+ # typedef int (*virEventAddTimeoutFunc) (
50
53
  # int timeout,
51
- # virEventTimeoutCallback cb,
52
- # void * opaque,
53
- # virFreeCallback ff
54
+ # virEventTimeoutCallback cb,
55
+ # void * opaque,
56
+ # virFreeCallback ff
54
57
  # )
55
58
  callback :virEventAddTimeoutFunc, [
56
59
  :int,
@@ -59,24 +62,24 @@ module Libvirt
59
62
  FFI::Common::FREE_CALLBACK
60
63
  ], :int
61
64
 
62
- # typedef void (*virEventUpdateTimeoutFunc) (
65
+ # typedef void (*virEventUpdateTimeoutFunc) (
63
66
  # int timer,
64
- # int timeout
67
+ # int timeout
65
68
  # )
66
69
  callback :virEventUpdateTimeoutFunc, [:int, :int], :void
67
70
 
68
- # typedef int (*virEventRemoveTimeoutFunc) (
71
+ # typedef int (*virEventRemoveTimeoutFunc) (
69
72
  # int timer
70
73
  # )
71
74
  callback :virEventRemoveTimeoutFunc, [:int], :int
72
75
 
73
- # void virEventRegisterImpl (
76
+ # void virEventRegisterImpl (
74
77
  # virEventAddHandleFunc addHandle,
75
- # virEventUpdateHandleFunc updateHandle,
76
- # virEventRemoveHandleFunc removeHandle,
77
- # virEventAddTimeoutFunc addTimeout,
78
- # virEventUpdateTimeoutFunc updateTimeout,
79
- # virEventRemoveTimeoutFunc removeTimeout
78
+ # virEventUpdateHandleFunc updateHandle,
79
+ # virEventRemoveHandleFunc removeHandle,
80
+ # virEventAddTimeoutFunc addTimeout,
81
+ # virEventUpdateTimeoutFunc updateTimeout,
82
+ # virEventRemoveTimeoutFunc removeTimeout
80
83
  # )
81
84
  attach_function :virEventRegisterImpl, [
82
85
  :virEventAddHandleFunc,
@@ -86,15 +89,6 @@ module Libvirt
86
89
  :virEventUpdateTimeoutFunc,
87
90
  :virEventRemoveTimeoutFunc
88
91
  ], :void
89
-
90
- def self.event_add_handle_func(&block)
91
- ::FFI::Function.new(:int, [:int, :int, EVENT_HANDLE_CALLBACK, :pointer, FFI::Common::FREE_CALLBACK], &block)
92
- end
93
-
94
- def self.event_add_timeout_func(&block)
95
- ::FFI::Function.new(:int, [:int, EVENT_TIMEOUT_CALLBACK, :pointer, FFI::Common::FREE_CALLBACK], &block)
96
- end
97
-
98
92
  end
99
93
  end
100
94
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Libvirt
4
+ module FFI
5
+ module Helpers
6
+ # Creates function by provided callback or callback name
7
+ # @param callback [Symbol,FFI::CallbackInfo] callback name registered in current module
8
+ # @param args [Array] extra arguments for FFI::Function
9
+ # @yield when function is called
10
+ # @return [FFI::Function]
11
+ def callback_function(callback, *args, &block)
12
+ callback_info = callback.is_a?(Symbol) ? find_type(callback) : callback
13
+ ::FFI::Function.new(callback_info.result_type, callback_info.param_types, *args, &block)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Libvirt
4
+ module FFI
5
+ module Host
6
+ # https://libvirt.org/html/libvirt-libvirt-host.html
7
+
8
+ extend ::FFI::Library
9
+ extend Helpers
10
+ ffi_lib Util.library_path
11
+
12
+ # struct virNodeInfo {
13
+ # char model[32] model - string indicating the CPU model
14
+ # unsigned long memory - memory size in kilobytes
15
+ # unsigned int cpus - the number of active CPUs
16
+ # unsigned int mhz - expected CPU frequency, 0 if not known or on unusual architectures
17
+ # unsigned int nodes - the number of NUMA cell, 1 for unusual NUMA topologies or uniform memory access;
18
+ # check capabilities XML for the actual NUMA topology
19
+ # unsigned int sockets - number of CPU sockets per node if nodes > 1, 1 in case of unusual NUMA topology
20
+ # unsigned int cores - number of cores per socket, total number of processors in case of unusual NUMA topolog
21
+ # unsigned int threads - number of threads per core, 1 in case of unusual numa topology
22
+ # }
23
+ class NodeInfoStruct < ::FFI::Struct
24
+ layout :model, [:char, 32],
25
+ :memory, :ulong,
26
+ :cpus, :uint,
27
+ :mhz, :uint,
28
+ :nodes, :uint,
29
+ :sockets, :uint,
30
+ :cores, :uint,
31
+ :threads, :uint
32
+ end
33
+
34
+ # int virGetVersion (
35
+ # unsigned long *libVer,
36
+ # const char *type,
37
+ # unsigned long *typeVer
38
+ # )
39
+ attach_function :virGetVersion, [:pointer, :string, :pointer], :int
40
+
41
+ # int virNodeGetInfo (
42
+ # virConnectPtr conn,
43
+ # virNodeInfoPtr info
44
+ # )
45
+ attach_function :virNodeGetInfo, [:pointer, :pointer], :int
46
+
47
+ # typedef void (*virConnectCloseFunc) (
48
+ # virConnectPtr conn,
49
+ # int reason,
50
+ # void * opaque
51
+ # )
52
+ callback :virConnectCloseFunc, [:pointer, :int, :pointer], :void
53
+
54
+ # virConnectPtr virConnectOpen (const char * name)
55
+ attach_function :virConnectOpen, [:string], :pointer
56
+
57
+ # int virConnectSetKeepAlive (
58
+ # virConnectPtr conn,
59
+ # int interval,
60
+ # unsigned int count
61
+ # )
62
+ attach_function :virConnectSetKeepAlive, [:pointer, :int, :uint], :int
63
+
64
+ # int virConnectGetVersion (
65
+ # virConnectPtr conn,
66
+ # unsigned long * hvVer
67
+ # )
68
+ attach_function :virConnectGetVersion, [:pointer, :pointer], :int
69
+
70
+ # int virConnectGetLibVersion (
71
+ # virConnectPtr conn,
72
+ # unsigned long * libVer
73
+ # )
74
+ attach_function :virConnectGetLibVersion, [:pointer, :pointer], :int
75
+
76
+ # char * virConnectGetHostname (
77
+ # virConnectPtr conn
78
+ # )
79
+ attach_function :virConnectGetHostname, [:pointer], :string # strptr ?
80
+
81
+ # int virConnectGetMaxVcpus (
82
+ # virConnectPtr conn,
83
+ # const char * type
84
+ # )
85
+ attach_function :virConnectGetMaxVcpus, [:pointer, :string], :int
86
+
87
+ # char * virConnectGetCapabilities (
88
+ # virConnectPtr conn
89
+ # )
90
+ attach_function :virConnectGetCapabilities, [:pointer], :string # strptr ?
91
+
92
+ # int virConnectClose (
93
+ # virConnectPtr conn
94
+ # )
95
+ attach_function :virConnectClose, [:pointer], :int
96
+
97
+ # int virConnectRegisterCloseCallback (
98
+ # virConnectPtr conn,
99
+ # virConnectCloseFunc cb,
100
+ # void * opaque,
101
+ # virFreeCallback freecb
102
+ # )
103
+ attach_function :virConnectRegisterCloseCallback, [
104
+ :pointer,
105
+ :virConnectCloseFunc,
106
+ :pointer,
107
+ FFI::Common::FREE_CALLBACK
108
+ ], :int
109
+
110
+ # int virConnectUnregisterCloseCallback (
111
+ # virConnectPtr conn,
112
+ # virConnectCloseFunc cb
113
+ # )
114
+ attach_function :virConnectUnregisterCloseCallback, [:pointer, :pointer], :int
115
+
116
+ # int virConnectRef (
117
+ # virConnectPtr conn
118
+ # )
119
+ attach_function :virConnectRef, [:pointer], :int
120
+ end
121
+ end
122
+ end