1 (* OCaml bindings for libvirt.
2 (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc.
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version,
9 with the OCaml linking exception described in ../COPYING.LIB.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 type filename = string
27 external get_version : ?driver:string -> unit -> int * int = "ocaml_libvirt_get_version"
30 let uuid_string_length = 36
32 (* http://caml.inria.fr/pub/ml-archives/caml-list/2004/07/80683af867cce6bf8fff273973f70c95.en.html *)
52 | ListNoState | ListRunning | ListBlocked
53 | ListPaused | ListShutdown | ListShutoff | ListCrashed
58 external connect : ?name:string -> unit -> rw t = "ocaml_libvirt_connect_open"
59 external connect_readonly : ?name:string -> unit -> ro t = "ocaml_libvirt_connect_open_readonly"
60 external close : [>`R] t -> unit = "ocaml_libvirt_connect_close"
61 external get_type : [>`R] t -> string = "ocaml_libvirt_connect_get_type"
62 external get_version : [>`R] t -> int = "ocaml_libvirt_connect_get_version"
63 external get_hostname : [>`R] t -> string = "ocaml_libvirt_connect_get_hostname"
64 external get_uri : [>`R] t -> string = "ocaml_libvirt_connect_get_uri"
65 external get_max_vcpus : [>`R] t -> ?type_:string -> unit -> int = "ocaml_libvirt_connect_get_max_vcpus"
66 external list_domains : [>`R] t -> int -> int array = "ocaml_libvirt_connect_list_domains"
67 external num_of_domains : [>`R] t -> int = "ocaml_libvirt_connect_num_of_domains"
68 external get_capabilities : [>`R] t -> xml = "ocaml_libvirt_connect_get_capabilities"
69 external num_of_defined_domains : [>`R] t -> int = "ocaml_libvirt_connect_num_of_defined_domains"
70 external list_defined_domains : [>`R] t -> int -> string array = "ocaml_libvirt_connect_list_defined_domains"
71 external num_of_networks : [>`R] t -> int = "ocaml_libvirt_connect_num_of_networks"
72 external list_networks : [>`R] t -> int -> string array = "ocaml_libvirt_connect_list_networks"
73 external num_of_defined_networks : [>`R] t -> int = "ocaml_libvirt_connect_num_of_defined_networks"
74 external list_defined_networks : [>`R] t -> int -> string array = "ocaml_libvirt_connect_list_defined_networks"
75 external num_of_pools : [>`R] t -> int = "ocaml_libvirt_connect_num_of_storage_pools"
76 external list_pools : [>`R] t -> int -> string array = "ocaml_libvirt_connect_list_storage_pools"
77 external num_of_defined_pools : [>`R] t -> int = "ocaml_libvirt_connect_num_of_defined_storage_pools"
78 external list_defined_pools : [>`R] t -> int -> string array = "ocaml_libvirt_connect_list_defined_storage_pools"
80 external get_node_info : [>`R] t -> node_info = "ocaml_libvirt_connect_get_node_info"
81 external node_get_free_memory : [> `R] t -> int64 = "ocaml_libvirt_connect_node_get_free_memory"
82 external node_get_cells_free_memory : [> `R] t -> int -> int -> int64 array = "ocaml_libvirt_connect_node_get_cells_free_memory"
84 (* See VIR_NODEINFO_MAXCPUS macro defined in <libvirt.h>. *)
85 let maxcpus_of_node_info { nodes = nodes; sockets = sockets;
86 cores = cores; threads = threads } =
87 nodes * sockets * cores * threads
89 (* See VIR_CPU_MAPLEN macro defined in <libvirt.h>. *)
90 let cpumaplen nr_cpus =
93 (* See VIR_USE_CPU, VIR_UNUSE_CPU, VIR_CPU_USABLE macros defined in <libvirt.h>. *)
94 let use_cpu cpumap cpu =
96 Char.chr (Char.code cpumap.[cpu/8] lor (1 lsl (cpu mod 8)))
97 let unuse_cpu cpumap cpu =
99 Char.chr (Char.code cpumap.[cpu/8] land (lnot (1 lsl (cpu mod 8))))
100 let cpu_usable cpumaps maplen vcpu cpu =
101 Char.code cpumaps.[vcpu*maplen + cpu/8] land (1 lsl (cpu mod 8)) <> 0
103 external const : [>`R] t -> ro t = "%identity"
110 | VIR_ERR_INTERNAL_ERROR
113 | VIR_ERR_UNKNOWN_HOST
115 | VIR_ERR_INVALID_CONN
116 | VIR_ERR_INVALID_DOMAIN
117 | VIR_ERR_INVALID_ARG
118 | VIR_ERR_OPERATION_FAILED
120 | VIR_ERR_POST_FAILED
122 | VIR_ERR_SEXPR_SERIAL
133 | VIR_ERR_NO_XENSTORE
134 | VIR_ERR_DRIVER_FULL
135 | VIR_ERR_CALL_FAILED
138 | VIR_ERR_OPERATION_DENIED
139 | VIR_ERR_OPEN_FAILED
140 | VIR_ERR_READ_FAILED
141 | VIR_ERR_PARSE_FAILED
142 | VIR_ERR_CONF_SYNTAX
143 | VIR_ERR_WRITE_FAILED
145 | VIR_ERR_INVALID_NETWORK
146 | VIR_ERR_NETWORK_EXIST
147 | VIR_ERR_SYSTEM_ERROR
149 | VIR_ERR_GNUTLS_ERROR
153 | VIR_ERR_INVALID_MAC
154 | VIR_ERR_AUTH_FAILED
155 | VIR_ERR_INVALID_STORAGE_POOL
156 | VIR_ERR_INVALID_STORAGE_VOL
158 | VIR_ERR_NO_STORAGE_POOL
159 | VIR_ERR_NO_STORAGE_VOL
160 | VIR_ERR_UNKNOWN of int
162 let string_of_code = function
163 | VIR_ERR_OK -> "VIR_ERR_OK"
164 | VIR_ERR_INTERNAL_ERROR -> "VIR_ERR_INTERNAL_ERROR"
165 | VIR_ERR_NO_MEMORY -> "VIR_ERR_NO_MEMORY"
166 | VIR_ERR_NO_SUPPORT -> "VIR_ERR_NO_SUPPORT"
167 | VIR_ERR_UNKNOWN_HOST -> "VIR_ERR_UNKNOWN_HOST"
168 | VIR_ERR_NO_CONNECT -> "VIR_ERR_NO_CONNECT"
169 | VIR_ERR_INVALID_CONN -> "VIR_ERR_INVALID_CONN"
170 | VIR_ERR_INVALID_DOMAIN -> "VIR_ERR_INVALID_DOMAIN"
171 | VIR_ERR_INVALID_ARG -> "VIR_ERR_INVALID_ARG"
172 | VIR_ERR_OPERATION_FAILED -> "VIR_ERR_OPERATION_FAILED"
173 | VIR_ERR_GET_FAILED -> "VIR_ERR_GET_FAILED"
174 | VIR_ERR_POST_FAILED -> "VIR_ERR_POST_FAILED"
175 | VIR_ERR_HTTP_ERROR -> "VIR_ERR_HTTP_ERROR"
176 | VIR_ERR_SEXPR_SERIAL -> "VIR_ERR_SEXPR_SERIAL"
177 | VIR_ERR_NO_XEN -> "VIR_ERR_NO_XEN"
178 | VIR_ERR_XEN_CALL -> "VIR_ERR_XEN_CALL"
179 | VIR_ERR_OS_TYPE -> "VIR_ERR_OS_TYPE"
180 | VIR_ERR_NO_KERNEL -> "VIR_ERR_NO_KERNEL"
181 | VIR_ERR_NO_ROOT -> "VIR_ERR_NO_ROOT"
182 | VIR_ERR_NO_SOURCE -> "VIR_ERR_NO_SOURCE"
183 | VIR_ERR_NO_TARGET -> "VIR_ERR_NO_TARGET"
184 | VIR_ERR_NO_NAME -> "VIR_ERR_NO_NAME"
185 | VIR_ERR_NO_OS -> "VIR_ERR_NO_OS"
186 | VIR_ERR_NO_DEVICE -> "VIR_ERR_NO_DEVICE"
187 | VIR_ERR_NO_XENSTORE -> "VIR_ERR_NO_XENSTORE"
188 | VIR_ERR_DRIVER_FULL -> "VIR_ERR_DRIVER_FULL"
189 | VIR_ERR_CALL_FAILED -> "VIR_ERR_CALL_FAILED"
190 | VIR_ERR_XML_ERROR -> "VIR_ERR_XML_ERROR"
191 | VIR_ERR_DOM_EXIST -> "VIR_ERR_DOM_EXIST"
192 | VIR_ERR_OPERATION_DENIED -> "VIR_ERR_OPERATION_DENIED"
193 | VIR_ERR_OPEN_FAILED -> "VIR_ERR_OPEN_FAILED"
194 | VIR_ERR_READ_FAILED -> "VIR_ERR_READ_FAILED"
195 | VIR_ERR_PARSE_FAILED -> "VIR_ERR_PARSE_FAILED"
196 | VIR_ERR_CONF_SYNTAX -> "VIR_ERR_CONF_SYNTAX"
197 | VIR_ERR_WRITE_FAILED -> "VIR_ERR_WRITE_FAILED"
198 | VIR_ERR_XML_DETAIL -> "VIR_ERR_XML_DETAIL"
199 | VIR_ERR_INVALID_NETWORK -> "VIR_ERR_INVALID_NETWORK"
200 | VIR_ERR_NETWORK_EXIST -> "VIR_ERR_NETWORK_EXIST"
201 | VIR_ERR_SYSTEM_ERROR -> "VIR_ERR_SYSTEM_ERROR"
202 | VIR_ERR_RPC -> "VIR_ERR_RPC"
203 | VIR_ERR_GNUTLS_ERROR -> "VIR_ERR_GNUTLS_ERROR"
204 | VIR_WAR_NO_NETWORK -> "VIR_WAR_NO_NETWORK"
205 | VIR_ERR_NO_DOMAIN -> "VIR_ERR_NO_DOMAIN"
206 | VIR_ERR_NO_NETWORK -> "VIR_ERR_NO_NETWORK"
207 | VIR_ERR_INVALID_MAC -> "VIR_ERR_INVALID_MAC"
208 | VIR_ERR_AUTH_FAILED -> "VIR_ERR_AUTH_FAILED"
209 | VIR_ERR_INVALID_STORAGE_POOL -> "VIR_ERR_INVALID_STORAGE_POOL"
210 | VIR_ERR_INVALID_STORAGE_VOL -> "VIR_ERR_INVALID_STORAGE_VOL"
211 | VIR_WAR_NO_STORAGE -> "VIR_WAR_NO_STORAGE"
212 | VIR_ERR_NO_STORAGE_POOL -> "VIR_ERR_NO_STORAGE_POOL"
213 | VIR_ERR_NO_STORAGE_VOL -> "VIR_ERR_NO_STORAGE_VOL"
214 | VIR_ERR_UNKNOWN i -> "VIR_ERR_" ^ string_of_int i
233 | VIR_FROM_STATS_LINUX
235 | VIR_FROM_UNKNOWN of int
237 let string_of_domain = function
238 | VIR_FROM_NONE -> "VIR_FROM_NONE"
239 | VIR_FROM_XEN -> "VIR_FROM_XEN"
240 | VIR_FROM_XEND -> "VIR_FROM_XEND"
241 | VIR_FROM_XENSTORE -> "VIR_FROM_XENSTORE"
242 | VIR_FROM_SEXPR -> "VIR_FROM_SEXPR"
243 | VIR_FROM_XML -> "VIR_FROM_XML"
244 | VIR_FROM_DOM -> "VIR_FROM_DOM"
245 | VIR_FROM_RPC -> "VIR_FROM_RPC"
246 | VIR_FROM_PROXY -> "VIR_FROM_PROXY"
247 | VIR_FROM_CONF -> "VIR_FROM_CONF"
248 | VIR_FROM_QEMU -> "VIR_FROM_QEMU"
249 | VIR_FROM_NET -> "VIR_FROM_NET"
250 | VIR_FROM_TEST -> "VIR_FROM_TEST"
251 | VIR_FROM_REMOTE -> "VIR_FROM_REMOTE"
252 | VIR_FROM_OPENVZ -> "VIR_FROM_OPENVZ"
253 | VIR_FROM_XENXM -> "VIR_FROM_XENXM"
254 | VIR_FROM_STATS_LINUX -> "VIR_FROM_STATS_LINUX"
255 | VIR_FROM_STORAGE -> "VIR_FROM_STORAGE"
256 | VIR_FROM_UNKNOWN i -> "VIR_FROM_" ^ string_of_int i
262 | VIR_ERR_UNKNOWN_LEVEL of int
264 let string_of_level = function
265 | VIR_ERR_NONE -> "VIR_ERR_NONE"
266 | VIR_ERR_WARNING -> "VIR_ERR_WARNING"
267 | VIR_ERR_ERROR -> "VIR_ERR_ERROR"
268 | VIR_ERR_UNKNOWN_LEVEL i -> "VIR_ERR_LEVEL_" ^ string_of_int i
273 message : string option;
275 str1 : string option;
276 str2 : string option;
277 str3 : string option;
282 let to_string { code = code; domain = domain; message = message } =
283 let buf = Buffer.create 128 in
284 Buffer.add_string buf "libvirt: ";
285 Buffer.add_string buf (string_of_code code);
286 Buffer.add_string buf ": ";
287 Buffer.add_string buf (string_of_domain domain);
288 Buffer.add_string buf ": ";
289 (match message with Some msg -> Buffer.add_string buf msg | None -> ());
292 external get_last_error : unit -> t option = "ocaml_libvirt_virterror_get_last_error"
293 external get_last_conn_error : [>`R] Connect.t -> t option = "ocaml_libvirt_virterror_get_last_conn_error"
294 external reset_last_error : unit -> unit = "ocaml_libvirt_virterror_reset_last_error"
295 external reset_last_conn_error : [>`R] Connect.t -> unit = "ocaml_libvirt_virterror_reset_last_conn_error"
298 { code = VIR_ERR_OK; domain = VIR_FROM_NONE;
299 message = None; level = VIR_ERR_NONE;
300 str1 = None; str2 = None; str3 = None;
301 int1 = 0_l; int2 = 0_l }
304 exception Virterror of Virterror.t
305 exception Not_supported of string
307 let rec map_ignore_errors f = function
310 try f x :: map_ignore_errors f xs
311 with Virterror _ -> map_ignore_errors f xs
318 | InfoNoState | InfoRunning | InfoBlocked | InfoPaused
319 | InfoShutdown | InfoShutoff | InfoCrashed
329 type vcpu_state = VcpuOffline | VcpuRunning | VcpuBlocked
333 vcpu_state : vcpu_state;
338 type sched_param = string * sched_param_value
339 and sched_param_value =
340 | SchedFieldInt32 of int32 | SchedFieldUInt32 of int32
341 | SchedFieldInt64 of int64 | SchedFieldUInt64 of int64
342 | SchedFieldFloat of float | SchedFieldBool of bool
344 type typed_param = string * typed_param_value
345 and typed_param_value =
346 | TypedFieldInt32 of int32 | TypedFieldUInt32 of int32
347 | TypedFieldInt64 of int64 | TypedFieldUInt64 of int64
348 | TypedFieldFloat of float | TypedFieldBool of bool
349 | TypedFieldString of string
351 type migrate_flag = Live
353 type memory_flag = Virtual
368 type interface_stats = {
379 (* The maximum size for Domain.memory_peek and Domain.block_peek
380 * supported by libvirt. This may change with different versions
381 * of libvirt in the future, hence it's a function.
383 let max_peek _ = 65536
385 external create_linux : [>`W] Connect.t -> xml -> rw t = "ocaml_libvirt_domain_create_linux"
386 external lookup_by_id : 'a Connect.t -> int -> 'a t = "ocaml_libvirt_domain_lookup_by_id"
387 external lookup_by_uuid : 'a Connect.t -> uuid -> 'a t = "ocaml_libvirt_domain_lookup_by_uuid"
388 external lookup_by_uuid_string : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_domain_lookup_by_uuid_string"
389 external lookup_by_name : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_domain_lookup_by_name"
390 external destroy : [>`W] t -> unit = "ocaml_libvirt_domain_destroy"
391 external free : [>`R] t -> unit = "ocaml_libvirt_domain_free"
392 external suspend : [>`W] t -> unit = "ocaml_libvirt_domain_suspend"
393 external resume : [>`W] t -> unit = "ocaml_libvirt_domain_resume"
394 external save : [>`W] t -> filename -> unit = "ocaml_libvirt_domain_save"
395 external restore : [>`W] Connect.t -> filename -> unit = "ocaml_libvirt_domain_restore"
396 external core_dump : [>`W] t -> filename -> unit = "ocaml_libvirt_domain_core_dump"
397 external shutdown : [>`W] t -> unit = "ocaml_libvirt_domain_shutdown"
398 external reboot : [>`W] t -> unit = "ocaml_libvirt_domain_reboot"
399 external get_name : [>`R] t -> string = "ocaml_libvirt_domain_get_name"
400 external get_uuid : [>`R] t -> uuid = "ocaml_libvirt_domain_get_uuid"
401 external get_uuid_string : [>`R] t -> string = "ocaml_libvirt_domain_get_uuid_string"
402 external get_id : [>`R] t -> int = "ocaml_libvirt_domain_get_id"
403 external get_os_type : [>`R] t -> string = "ocaml_libvirt_domain_get_os_type"
404 external get_max_memory : [>`R] t -> int64 = "ocaml_libvirt_domain_get_max_memory"
405 external set_max_memory : [>`W] t -> int64 -> unit = "ocaml_libvirt_domain_set_max_memory"
406 external set_memory : [>`W] t -> int64 -> unit = "ocaml_libvirt_domain_set_memory"
407 external get_info : [>`R] t -> info = "ocaml_libvirt_domain_get_info"
408 external get_xml_desc : [>`R] t -> xml = "ocaml_libvirt_domain_get_xml_desc"
409 external get_scheduler_type : [>`R] t -> string * int = "ocaml_libvirt_domain_get_scheduler_type"
410 external get_scheduler_parameters : [>`R] t -> int -> sched_param array = "ocaml_libvirt_domain_get_scheduler_parameters"
411 external set_scheduler_parameters : [>`W] t -> sched_param array -> unit = "ocaml_libvirt_domain_set_scheduler_parameters"
412 external define_xml : [>`W] Connect.t -> xml -> rw t = "ocaml_libvirt_domain_define_xml"
413 external undefine : [>`W] t -> unit = "ocaml_libvirt_domain_undefine"
414 external create : [>`W] t -> unit = "ocaml_libvirt_domain_create"
415 external get_autostart : [>`R] t -> bool = "ocaml_libvirt_domain_get_autostart"
416 external set_autostart : [>`W] t -> bool -> unit = "ocaml_libvirt_domain_set_autostart"
417 external set_vcpus : [>`W] t -> int -> unit = "ocaml_libvirt_domain_set_vcpus"
418 external pin_vcpu : [>`W] t -> int -> string -> unit = "ocaml_libvirt_domain_pin_vcpu"
419 external get_vcpus : [>`R] t -> int -> int -> int * vcpu_info array * string = "ocaml_libvirt_domain_get_vcpus"
420 external get_cpu_stats : [>`R] t -> typed_param list array = "ocaml_libvirt_domain_get_cpu_stats"
421 external get_max_vcpus : [>`R] t -> int = "ocaml_libvirt_domain_get_max_vcpus"
422 external attach_device : [>`W] t -> xml -> unit = "ocaml_libvirt_domain_attach_device"
423 external detach_device : [>`W] t -> xml -> unit = "ocaml_libvirt_domain_detach_device"
424 external migrate : [>`W] t -> [>`W] Connect.t -> migrate_flag list -> ?dname:string -> ?uri:string -> ?bandwidth:int -> unit -> rw t = "ocaml_libvirt_domain_migrate_bytecode" "ocaml_libvirt_domain_migrate_native"
425 external block_stats : [>`R] t -> string -> block_stats = "ocaml_libvirt_domain_block_stats"
426 external interface_stats : [>`R] t -> string -> interface_stats = "ocaml_libvirt_domain_interface_stats"
427 external block_peek : [>`W] t -> string -> int64 -> int -> string -> int -> unit = "ocaml_libvirt_domain_block_peek_bytecode" "ocaml_libvirt_domain_block_peek_native"
428 external memory_peek : [>`W] t -> memory_flag list -> int64 -> int -> string -> int -> unit = "ocaml_libvirt_domain_memory_peek_bytecode" "ocaml_libvirt_domain_memory_peek_native"
430 external const : [>`R] t -> ro t = "%identity"
432 let get_domains conn flags =
433 (* Old/slow/inefficient method. *)
434 let get_active, get_inactive =
435 if List.mem ListAll flags then
438 (List.mem ListActive flags, List.mem ListInactive flags) in
441 let n = Connect.num_of_domains conn in
442 let ids = Connect.list_domains conn n in
443 let ids = Array.to_list ids in
444 map_ignore_errors (lookup_by_id conn) ids
448 if get_inactive then (
449 let n = Connect.num_of_defined_domains conn in
450 let names = Connect.list_defined_domains conn n in
451 let names = Array.to_list names in
452 map_ignore_errors (lookup_by_name conn) names
455 active_doms @ inactive_doms
457 let get_domains_and_infos conn flags =
458 (* Old/slow/inefficient method. *)
459 let get_active, get_inactive =
460 if List.mem ListAll flags then
462 else (List.mem ListActive flags, List.mem ListInactive flags) in
465 let n = Connect.num_of_domains conn in
466 let ids = Connect.list_domains conn n in
467 let ids = Array.to_list ids in
468 map_ignore_errors (lookup_by_id conn) ids
472 if get_inactive then (
473 let n = Connect.num_of_defined_domains conn in
474 let names = Connect.list_defined_domains conn n in
475 let names = Array.to_list names in
476 map_ignore_errors (lookup_by_name conn) names
479 let doms = active_doms @ inactive_doms in
481 map_ignore_errors (fun dom -> (dom, get_info dom)) doms
488 external lookup_by_name : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_network_lookup_by_name"
489 external lookup_by_uuid : 'a Connect.t -> uuid -> 'a t = "ocaml_libvirt_network_lookup_by_uuid"
490 external lookup_by_uuid_string : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_network_lookup_by_uuid_string"
491 external create_xml : [>`W] Connect.t -> xml -> rw t = "ocaml_libvirt_network_create_xml"
492 external define_xml : [>`W] Connect.t -> xml -> rw t = "ocaml_libvirt_network_define_xml"
493 external undefine : [>`W] t -> unit = "ocaml_libvirt_network_undefine"
494 external create : [>`W] t -> unit = "ocaml_libvirt_network_create"
495 external destroy : [>`W] t -> unit = "ocaml_libvirt_network_destroy"
496 external free : [>`R] t -> unit = "ocaml_libvirt_network_free"
497 external get_name : [>`R] t -> string = "ocaml_libvirt_network_get_name"
498 external get_uuid : [>`R] t -> uuid = "ocaml_libvirt_network_get_uuid"
499 external get_uuid_string : [>`R] t -> string = "ocaml_libvirt_network_get_uuid_string"
500 external get_xml_desc : [>`R] t -> xml = "ocaml_libvirt_network_get_xml_desc"
501 external get_bridge_name : [>`R] t -> string = "ocaml_libvirt_network_get_bridge_name"
502 external get_autostart : [>`R] t -> bool = "ocaml_libvirt_network_get_autostart"
503 external set_autostart : [>`W] t -> bool -> unit = "ocaml_libvirt_network_set_autostart"
505 external const : [>`R] t -> ro t = "%identity"
511 type pool_state = Inactive | Building | Running | Degraded
512 type pool_build_flags = New | Repair | Resize
513 type pool_delete_flags = Normal | Zeroed
521 external lookup_by_name : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_storage_pool_lookup_by_name"
522 external lookup_by_uuid : 'a Connect.t -> uuid -> 'a t = "ocaml_libvirt_storage_pool_lookup_by_uuid"
523 external lookup_by_uuid_string : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_storage_pool_lookup_by_uuid_string"
524 external create_xml : [>`W] Connect.t -> xml -> rw t = "ocaml_libvirt_storage_pool_create_xml"
525 external define_xml : [>`W] Connect.t -> xml -> rw t = "ocaml_libvirt_storage_pool_define_xml"
526 external build : [>`W] t -> pool_build_flags -> unit = "ocaml_libvirt_storage_pool_build"
527 external undefine : [>`W] t -> unit = "ocaml_libvirt_storage_pool_undefine"
528 external create : [>`W] t -> unit = "ocaml_libvirt_storage_pool_create"
529 external destroy : [>`W] t -> unit = "ocaml_libvirt_storage_pool_destroy"
530 external delete : [>`W] t -> unit = "ocaml_libvirt_storage_pool_delete"
531 external free : [>`R] t -> unit = "ocaml_libvirt_storage_pool_free"
532 external refresh : [`R] t -> unit = "ocaml_libvirt_storage_pool_refresh"
533 external get_name : [`R] t -> string = "ocaml_libvirt_storage_pool_get_name"
534 external get_uuid : [`R] t -> uuid = "ocaml_libvirt_storage_pool_get_uuid"
535 external get_uuid_string : [`R] t -> string = "ocaml_libvirt_storage_pool_get_uuid_string"
536 external get_info : [`R] t -> pool_info = "ocaml_libvirt_storage_pool_get_info"
537 external get_xml_desc : [`R] t -> xml = "ocaml_libvirt_storage_pool_get_xml_desc"
538 external get_autostart : [`R] t -> bool = "ocaml_libvirt_storage_pool_get_autostart"
539 external set_autostart : [>`W] t -> bool -> unit = "ocaml_libvirt_storage_pool_set_autostart"
540 external num_of_volumes : [`R] t -> int = "ocaml_libvirt_storage_pool_num_of_volumes"
541 external list_volumes : [`R] t -> int -> string array = "ocaml_libvirt_storage_pool_list_volumes"
542 external const : [>`R] t -> ro t = "%identity"
548 type vol_type = File | Block
549 type vol_delete_flags = Normal | Zeroed
556 external lookup_by_name : 'a Pool.t -> string -> 'a t = "ocaml_libvirt_storage_vol_lookup_by_name"
557 external lookup_by_key : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_storage_vol_lookup_by_key"
558 external lookup_by_path : 'a Connect.t -> string -> 'a t = "ocaml_libvirt_storage_vol_lookup_by_path"
559 external pool_of_volume : 'a t -> 'a Pool.t = "ocaml_libvirt_storage_pool_lookup_by_volume"
560 external get_name : [`R] t -> string = "ocaml_libvirt_storage_vol_get_name"
561 external get_key : [`R] t -> string = "ocaml_libvirt_storage_vol_get_key"
562 external get_path : [`R] t -> string = "ocaml_libvirt_storage_vol_get_path"
563 external get_info : [`R] t -> vol_info = "ocaml_libvirt_storage_vol_get_info"
564 external get_xml_desc : [`R] t -> xml = "ocaml_libvirt_storage_vol_get_xml_desc"
565 external create_xml : [>`W] Pool.t -> xml -> unit = "ocaml_libvirt_storage_vol_create_xml"
566 external delete : [>`W] t -> unit = "ocaml_libvirt_storage_vol_delete"
567 external free : [>`R] t -> unit = "ocaml_libvirt_storage_vol_free"
568 external const : [>`R] t -> ro t = "%identity"
571 (* Initialization. *)
572 external c_init : unit -> unit = "ocaml_libvirt_init"
574 Callback.register_exception
575 "ocaml_libvirt_virterror" (Virterror (Virterror.no_error ()));
576 Callback.register_exception
577 "ocaml_libvirt_not_supported" (Not_supported "");