sig
  type uuid = string
  type xml = string
  type filename = string
  val get_version : ?driver:string -> unit -> int * int
  val uuid_length : int
  val uuid_string_length : int
  type rw = [ `R | `W ]
  type ro = [ `R ]
  module Connect :
    sig
      type 'rw t
      type node_info = {
        model : string;
        memory : int64;
        cpus : int;
        mhz : int;
        nodes : int;
        sockets : int;
        cores : int;
        threads : int;
      }
      val connect : ?name:string -> unit -> Libvirt.rw Libvirt.Connect.t
      val connect_readonly :
        ?name:string -> unit -> Libvirt.ro Libvirt.Connect.t
      val close : [> `R ] Libvirt.Connect.t -> unit
      val get_type : [> `R ] Libvirt.Connect.t -> string
      val get_version : [> `R ] Libvirt.Connect.t -> int
      val get_hostname : [> `R ] Libvirt.Connect.t -> string
      val get_uri : [> `R ] Libvirt.Connect.t -> string
      val get_max_vcpus :
        [> `R ] Libvirt.Connect.t -> ?type_:string -> unit -> int
      val list_domains : [> `R ] Libvirt.Connect.t -> int -> int array
      val num_of_domains : [> `R ] Libvirt.Connect.t -> int
      val get_capabilities : [> `R ] Libvirt.Connect.t -> Libvirt.xml
      val num_of_defined_domains : [> `R ] Libvirt.Connect.t -> int
      val list_defined_domains :
        [> `R ] Libvirt.Connect.t -> int -> string array
      val num_of_networks : [> `R ] Libvirt.Connect.t -> int
      val list_networks : [> `R ] Libvirt.Connect.t -> int -> string array
      val num_of_defined_networks : [> `R ] Libvirt.Connect.t -> int
      val list_defined_networks :
        [> `R ] Libvirt.Connect.t -> int -> string array
      val num_of_pools : [> `R ] Libvirt.Connect.t -> int
      val list_pools : [> `R ] Libvirt.Connect.t -> int -> string array
      val num_of_defined_pools : [> `R ] Libvirt.Connect.t -> int
      val list_defined_pools :
        [> `R ] Libvirt.Connect.t -> int -> string array
      val get_node_info :
        [> `R ] Libvirt.Connect.t -> Libvirt.Connect.node_info
      val node_get_free_memory : [> `R ] Libvirt.Connect.t -> int64
      val node_get_cells_free_memory :
        [> `R ] Libvirt.Connect.t -> int -> int -> int64 array
      val maxcpus_of_node_info : Libvirt.Connect.node_info -> int
      val cpumaplen : int -> int
      val use_cpu : string -> int -> unit
      val unuse_cpu : string -> int -> unit
      val cpu_usable : string -> int -> int -> int -> bool
      val set_keep_alive : [> `R ] Libvirt.Connect.t -> int -> int -> unit
      external const :
        [> `R ] Libvirt.Connect.t -> Libvirt.ro Libvirt.Connect.t
        = "%identity"
    end
  module Domain :
    sig
      type 'rw t
      type state =
          InfoNoState
        | InfoRunning
        | InfoBlocked
        | InfoPaused
        | InfoShutdown
        | InfoShutoff
        | InfoCrashed
      type info = {
        state : Libvirt.Domain.state;
        max_mem : int64;
        memory : int64;
        nr_virt_cpu : int;
        cpu_time : int64;
      }
      type vcpu_state = VcpuOffline | VcpuRunning | VcpuBlocked
      type vcpu_info = {
        number : int;
        vcpu_state : Libvirt.Domain.vcpu_state;
        vcpu_time : int64;
        cpu : int;
      }
      type sched_param = string * Libvirt.Domain.sched_param_value
      and sched_param_value =
          SchedFieldInt32 of int32
        | SchedFieldUInt32 of int32
        | SchedFieldInt64 of int64
        | SchedFieldUInt64 of int64
        | SchedFieldFloat of float
        | SchedFieldBool of bool
      type typed_param = string * Libvirt.Domain.typed_param_value
      and typed_param_value =
          TypedFieldInt32 of int32
        | TypedFieldUInt32 of int32
        | TypedFieldInt64 of int64
        | TypedFieldUInt64 of int64
        | TypedFieldFloat of float
        | TypedFieldBool of bool
        | TypedFieldString of string
      type migrate_flag = Live
      type memory_flag = Virtual
      type list_flag = ListActive | ListInactive | ListAll
      type block_stats = {
        rd_req : int64;
        rd_bytes : int64;
        wr_req : int64;
        wr_bytes : int64;
        errs : int64;
      }
      type interface_stats = {
        rx_bytes : int64;
        rx_packets : int64;
        rx_errs : int64;
        rx_drop : int64;
        tx_bytes : int64;
        tx_packets : int64;
        tx_errs : int64;
        tx_drop : int64;
      }
      val max_peek : [> `R ] Libvirt.Domain.t -> int
      val create_linux :
        [> `W ] Libvirt.Connect.t ->
        Libvirt.xml -> Libvirt.rw Libvirt.Domain.t
      val lookup_by_id : 'Libvirt.Connect.t -> int -> 'Libvirt.Domain.t
      val lookup_by_uuid :
        'Libvirt.Connect.t -> Libvirt.uuid -> 'Libvirt.Domain.t
      val lookup_by_uuid_string :
        'Libvirt.Connect.t -> string -> 'Libvirt.Domain.t
      val lookup_by_name :
        'Libvirt.Connect.t -> string -> 'Libvirt.Domain.t
      val destroy : [> `W ] Libvirt.Domain.t -> unit
      val free : [> `R ] Libvirt.Domain.t -> unit
      val suspend : [> `W ] Libvirt.Domain.t -> unit
      val resume : [> `W ] Libvirt.Domain.t -> unit
      val save : [> `W ] Libvirt.Domain.t -> Libvirt.filename -> unit
      val restore : [> `W ] Libvirt.Connect.t -> Libvirt.filename -> unit
      val core_dump : [> `W ] Libvirt.Domain.t -> Libvirt.filename -> unit
      val shutdown : [> `W ] Libvirt.Domain.t -> unit
      val reboot : [> `W ] Libvirt.Domain.t -> unit
      val get_name : [> `R ] Libvirt.Domain.t -> string
      val get_uuid : [> `R ] Libvirt.Domain.t -> Libvirt.uuid
      val get_uuid_string : [> `R ] Libvirt.Domain.t -> string
      val get_id : [> `R ] Libvirt.Domain.t -> int
      val get_os_type : [> `R ] Libvirt.Domain.t -> string
      val get_max_memory : [> `R ] Libvirt.Domain.t -> int64
      val set_max_memory : [> `W ] Libvirt.Domain.t -> int64 -> unit
      val set_memory : [> `W ] Libvirt.Domain.t -> int64 -> unit
      val get_info : [> `R ] Libvirt.Domain.t -> Libvirt.Domain.info
      val get_xml_desc : [> `R ] Libvirt.Domain.t -> Libvirt.xml
      val get_scheduler_type : [> `R ] Libvirt.Domain.t -> string * int
      val get_scheduler_parameters :
        [> `R ] Libvirt.Domain.t -> int -> Libvirt.Domain.sched_param array
      val set_scheduler_parameters :
        [> `W ] Libvirt.Domain.t -> Libvirt.Domain.sched_param array -> unit
      val define_xml :
        [> `W ] Libvirt.Connect.t ->
        Libvirt.xml -> Libvirt.rw Libvirt.Domain.t
      val undefine : [> `W ] Libvirt.Domain.t -> unit
      val create : [> `W ] Libvirt.Domain.t -> unit
      val get_autostart : [> `R ] Libvirt.Domain.t -> bool
      val set_autostart : [> `W ] Libvirt.Domain.t -> bool -> unit
      val set_vcpus : [> `W ] Libvirt.Domain.t -> int -> unit
      val pin_vcpu : [> `W ] Libvirt.Domain.t -> int -> string -> unit
      val get_vcpus :
        [> `R ] Libvirt.Domain.t ->
        int -> int -> int * Libvirt.Domain.vcpu_info array * string
      val get_cpu_stats :
        [> `R ] Libvirt.Domain.t -> Libvirt.Domain.typed_param list array
      val get_max_vcpus : [> `R ] Libvirt.Domain.t -> int
      val attach_device : [> `W ] Libvirt.Domain.t -> Libvirt.xml -> unit
      val detach_device : [> `W ] Libvirt.Domain.t -> Libvirt.xml -> unit
      val migrate :
        [> `W ] Libvirt.Domain.t ->
        [> `W ] Libvirt.Connect.t ->
        Libvirt.Domain.migrate_flag list ->
        ?dname:string ->
        ?uri:string -> ?bandwidth:int -> unit -> Libvirt.rw Libvirt.Domain.t
      val block_stats :
        [> `R ] Libvirt.Domain.t -> string -> Libvirt.Domain.block_stats
      val interface_stats :
        [> `R ] Libvirt.Domain.t -> string -> Libvirt.Domain.interface_stats
      val block_peek :
        [> `W ] Libvirt.Domain.t ->
        string -> int64 -> int -> string -> int -> unit
      val memory_peek :
        [> `W ] Libvirt.Domain.t ->
        Libvirt.Domain.memory_flag list ->
        int64 -> int -> string -> int -> unit
      external const :
        [> `R ] Libvirt.Domain.t -> Libvirt.ro Libvirt.Domain.t = "%identity"
      val get_domains :
        ([> `R ] as 'a) Libvirt.Connect.t ->
        Libvirt.Domain.list_flag list -> 'Libvirt.Domain.t list
      val get_domains_and_infos :
        ([> `R ] as 'a) Libvirt.Connect.t ->
        Libvirt.Domain.list_flag list ->
        ('Libvirt.Domain.t * Libvirt.Domain.info) list
    end
  module Event :
    sig
      module Defined :
        sig
          type t = [ `Added | `Unknown of int | `Updated ]
          val to_string : Libvirt.Event.Defined.t -> string
        end
      module Undefined :
        sig
          type t = [ `Removed | `Unknown of int ]
          val to_string : Libvirt.Event.Undefined.t -> string
        end
      module Started :
        sig
          type t =
              [ `Booted
              | `FromSnapshot
              | `Migrated
              | `Restored
              | `Unknown of int
              | `Wakeup ]
          val to_string : Libvirt.Event.Started.t -> string
        end
      module Suspended :
        sig
          type t =
              [ `APIError
              | `FromSnapshot
              | `IOError
              | `Migrated
              | `Paused
              | `Restored
              | `Unknown of int
              | `Watchdog ]
          val to_string : Libvirt.Event.Suspended.t -> string
        end
      module Resumed :
        sig
          type t =
              [ `FromSnapshot | `Migrated | `Unknown of int | `Unpaused ]
          val to_string : Libvirt.Event.Resumed.t -> string
        end
      module Stopped :
        sig
          type t =
              [ `Crashed
              | `Destroyed
              | `Failed
              | `FromSnapshot
              | `Migrated
              | `Saved
              | `Shutdown
              | `Unknown of int ]
          val to_string : Libvirt.Event.Stopped.t -> string
        end
      module PM_suspended :
        sig
          type t = [ `Disk | `Memory | `Unknown of int ]
          val to_string : Libvirt.Event.PM_suspended.t -> string
        end
      module Lifecycle :
        sig
          type t =
              [ `Defined of Libvirt.Event.Defined.t
              | `PMSuspended of Libvirt.Event.PM_suspended.t
              | `Resumed of Libvirt.Event.Resumed.t
              | `Shutdown
              | `Started of Libvirt.Event.Started.t
              | `Stopped of Libvirt.Event.Stopped.t
              | `Suspended of Libvirt.Event.Suspended.t
              | `Undefined of Libvirt.Event.Undefined.t
              | `Unknown of int ]
          val to_string : Libvirt.Event.Lifecycle.t -> string
        end
      module Reboot :
        sig
          type t = unit
          val to_string : Libvirt.Event.Reboot.t -> string
        end
      module Rtc_change :
        sig
          type t = int64
          val to_string : Libvirt.Event.Rtc_change.t -> string
        end
      module Watchdog :
        sig
          type t =
              [ `Debug
              | `None
              | `Pause
              | `Poweroff
              | `Reset
              | `Shutdown
              | `Unknown of int ]
          val to_string : Libvirt.Event.Watchdog.t -> string
        end
      module Io_error :
        sig
          type action = [ `None | `Pause | `Report | `Unknown of int ]
          type t = {
            src_path : string option;
            dev_alias : string option;
            action : Libvirt.Event.Io_error.action;
            reason : string option;
          }
          val to_string : Libvirt.Event.Io_error.t -> string
        end
      module Graphics_address :
        sig
          type family = [ `Ipv4 | `Ipv6 | `Unix | `Unknown of int ]
          type t = {
            family : Libvirt.Event.Graphics_address.family;
            node : string option;
            service : string option;
          }
          val to_string : Libvirt.Event.Graphics_address.t -> string
        end
      module Graphics_subject :
        sig
          type identity = { ty : string option; name : string option; }
          type t = Libvirt.Event.Graphics_subject.identity list
          val to_string : Libvirt.Event.Graphics_subject.t -> string
        end
      module Graphics :
        sig
          type phase =
              [ `Connect | `Disconnect | `Initialize | `Unknown of int ]
          type t = {
            phase : Libvirt.Event.Graphics.phase;
            local : Libvirt.Event.Graphics_address.t;
            remote : Libvirt.Event.Graphics_address.t;
            auth_scheme : string option;
            subject : Libvirt.Event.Graphics_subject.t;
          }
          val to_string : Libvirt.Event.Graphics.t -> string
        end
      module Control_error :
        sig
          type t = unit
          val to_string : Libvirt.Event.Control_error.t -> string
        end
      module Block_job :
        sig
          type ty =
              [ `Commit | `Copy | `KnownUnknown | `Pull | `Unknown of int ]
          type status =
              [ `Cancelled | `Completed | `Failed | `Ready | `Unknown of int ]
          type t = {
            disk : string option;
            ty : Libvirt.Event.Block_job.ty;
            status : Libvirt.Event.Block_job.status;
          }
          val to_string : Libvirt.Event.Block_job.t -> string
        end
      module Disk_change :
        sig
          type reason = [ `MissingOnStart | `Unknown of int ]
          type t = {
            old_src_path : string option;
            new_src_path : string option;
            dev_alias : string option;
            reason : Libvirt.Event.Disk_change.reason;
          }
          val to_string : Libvirt.Event.Disk_change.t -> string
        end
      module Tray_change :
        sig
          type reason = [ `Close | `Open | `Unknown of int ]
          type t = {
            dev_alias : string option;
            reason : Libvirt.Event.Tray_change.reason;
          }
          val to_string : Libvirt.Event.Tray_change.t -> string
        end
      module PM_wakeup :
        sig
          type reason = [ `Unknown of int ]
          type t = Libvirt.Event.PM_wakeup.reason
          val to_string : Libvirt.Event.PM_wakeup.t -> string
        end
      module PM_suspend :
        sig
          type reason = [ `Unknown of int ]
          type t = Libvirt.Event.PM_suspend.reason
          val to_string : Libvirt.Event.PM_suspend.t -> string
        end
      module Balloon_change :
        sig
          type t = int64
          val to_string : Libvirt.Event.Balloon_change.t -> string
        end
      module PM_suspend_disk :
        sig
          type reason = [ `Unknown of int ]
          type t = Libvirt.Event.PM_suspend_disk.reason
          val to_string : Libvirt.Event.PM_suspend_disk.t -> string
        end
      type callback =
          Lifecycle of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Lifecycle.t -> unit)
        | Reboot of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Reboot.t -> unit)
        | RtcChange of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Rtc_change.t -> unit)
        | Watchdog of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Watchdog.t -> unit)
        | IOError of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Io_error.t -> unit)
        | Graphics of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Graphics.t -> unit)
        | IOErrorReason of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Io_error.t -> unit)
        | ControlError of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Control_error.t -> unit)
        | BlockJob of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Block_job.t -> unit)
        | DiskChange of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Disk_change.t -> unit)
        | TrayChange of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.Tray_change.t -> unit)
        | PMWakeUp of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.PM_wakeup.t -> unit)
        | PMSuspend of
            ([ `R ] Libvirt.Domain.t -> Libvirt.Event.PM_suspend.t -> unit)
        | BalloonChange of
            ([ `R ] Libvirt.Domain.t ->
             Libvirt.Event.Balloon_change.t -> unit)
        | PMSuspendDisk of
            ([ `R ] Libvirt.Domain.t ->
             Libvirt.Event.PM_suspend_disk.t -> unit)
      val register_default_impl : unit -> unit
      val run_default_impl : unit -> unit
      type callback_id
      val register_any :
        'Libvirt.Connect.t ->
        ?dom:'Libvirt.Domain.t ->
        Libvirt.Event.callback -> Libvirt.Event.callback_id
      val deregister_any :
        'Libvirt.Connect.t -> Libvirt.Event.callback_id -> unit
      type timer_id
      val add_timeout :
        'Libvirt.Connect.t ->
        int -> (unit -> unit) -> Libvirt.Event.timer_id
      val remove_timeout :
        'Libvirt.Connect.t -> Libvirt.Event.timer_id -> unit
    end
  module Network :
    sig
      type 'rw t
      val lookup_by_name :
        'Libvirt.Connect.t -> string -> 'Libvirt.Network.t
      val lookup_by_uuid :
        'Libvirt.Connect.t -> Libvirt.uuid -> 'Libvirt.Network.t
      val lookup_by_uuid_string :
        'Libvirt.Connect.t -> string -> 'Libvirt.Network.t
      val create_xml :
        [> `W ] Libvirt.Connect.t ->
        Libvirt.xml -> Libvirt.rw Libvirt.Network.t
      val define_xml :
        [> `W ] Libvirt.Connect.t ->
        Libvirt.xml -> Libvirt.rw Libvirt.Network.t
      val undefine : [> `W ] Libvirt.Network.t -> unit
      val create : [> `W ] Libvirt.Network.t -> unit
      val destroy : [> `W ] Libvirt.Network.t -> unit
      val free : [> `R ] Libvirt.Network.t -> unit
      val get_name : [> `R ] Libvirt.Network.t -> string
      val get_uuid : [> `R ] Libvirt.Network.t -> Libvirt.uuid
      val get_uuid_string : [> `R ] Libvirt.Network.t -> string
      val get_xml_desc : [> `R ] Libvirt.Network.t -> Libvirt.xml
      val get_bridge_name : [> `R ] Libvirt.Network.t -> string
      val get_autostart : [> `R ] Libvirt.Network.t -> bool
      val set_autostart : [> `W ] Libvirt.Network.t -> bool -> unit
      external const :
        [> `R ] Libvirt.Network.t -> Libvirt.ro Libvirt.Network.t
        = "%identity"
    end
  module Pool :
    sig
      type 'rw t
      type pool_state = Inactive | Building | Running | Degraded
      type pool_build_flags = New | Repair | Resize
      type pool_delete_flags = Normal | Zeroed
      type pool_info = {
        state : Libvirt.Pool.pool_state;
        capacity : int64;
        allocation : int64;
        available : int64;
      }
      val lookup_by_name :
        'Libvirt.Connect.t -> string -> 'Libvirt.Pool.t
      val lookup_by_uuid :
        'Libvirt.Connect.t -> Libvirt.uuid -> 'Libvirt.Pool.t
      val lookup_by_uuid_string :
        'Libvirt.Connect.t -> string -> 'Libvirt.Pool.t
      val create_xml :
        [> `W ] Libvirt.Connect.t -> Libvirt.xml -> Libvirt.rw Libvirt.Pool.t
      val define_xml :
        [> `W ] Libvirt.Connect.t -> Libvirt.xml -> Libvirt.rw Libvirt.Pool.t
      val build :
        [> `W ] Libvirt.Pool.t -> Libvirt.Pool.pool_build_flags -> unit
      val undefine : [> `W ] Libvirt.Pool.t -> unit
      val create : [> `W ] Libvirt.Pool.t -> unit
      val destroy : [> `W ] Libvirt.Pool.t -> unit
      val delete : [> `W ] Libvirt.Pool.t -> unit
      val free : [> `R ] Libvirt.Pool.t -> unit
      val refresh : [ `R ] Libvirt.Pool.t -> unit
      val get_name : [ `R ] Libvirt.Pool.t -> string
      val get_uuid : [ `R ] Libvirt.Pool.t -> Libvirt.uuid
      val get_uuid_string : [ `R ] Libvirt.Pool.t -> string
      val get_info : [ `R ] Libvirt.Pool.t -> Libvirt.Pool.pool_info
      val get_xml_desc : [ `R ] Libvirt.Pool.t -> Libvirt.xml
      val get_autostart : [ `R ] Libvirt.Pool.t -> bool
      val set_autostart : [> `W ] Libvirt.Pool.t -> bool -> unit
      val num_of_volumes : [ `R ] Libvirt.Pool.t -> int
      val list_volumes : [ `R ] Libvirt.Pool.t -> int -> string array
      external const : [> `R ] Libvirt.Pool.t -> Libvirt.ro Libvirt.Pool.t
        = "%identity"
    end
  module Volume :
    sig
      type 'rw t
      type vol_type = File | Block
      type vol_delete_flags = Normal | Zeroed
      type vol_info = {
        typ : Libvirt.Volume.vol_type;
        capacity : int64;
        allocation : int64;
      }
      val lookup_by_name : 'Libvirt.Pool.t -> string -> 'Libvirt.Volume.t
      val lookup_by_key :
        'Libvirt.Connect.t -> string -> 'Libvirt.Volume.t
      val lookup_by_path :
        'Libvirt.Connect.t -> string -> 'Libvirt.Volume.t
      val pool_of_volume : 'Libvirt.Volume.t -> 'Libvirt.Pool.t
      val get_name : [ `R ] Libvirt.Volume.t -> string
      val get_key : [ `R ] Libvirt.Volume.t -> string
      val get_path : [ `R ] Libvirt.Volume.t -> string
      val get_info : [ `R ] Libvirt.Volume.t -> Libvirt.Volume.vol_info
      val get_xml_desc : [ `R ] Libvirt.Volume.t -> Libvirt.xml
      val create_xml : [> `W ] Libvirt.Pool.t -> Libvirt.xml -> unit
      val delete :
        [> `W ] Libvirt.Volume.t -> Libvirt.Volume.vol_delete_flags -> unit
      val free : [> `R ] Libvirt.Volume.t -> unit
      external const :
        [> `R ] Libvirt.Volume.t -> Libvirt.ro Libvirt.Volume.t = "%identity"
    end
  module Virterror :
    sig
      type code =
          VIR_ERR_OK
        | VIR_ERR_INTERNAL_ERROR
        | VIR_ERR_NO_MEMORY
        | VIR_ERR_NO_SUPPORT
        | VIR_ERR_UNKNOWN_HOST
        | VIR_ERR_NO_CONNECT
        | VIR_ERR_INVALID_CONN
        | VIR_ERR_INVALID_DOMAIN
        | VIR_ERR_INVALID_ARG
        | VIR_ERR_OPERATION_FAILED
        | VIR_ERR_GET_FAILED
        | VIR_ERR_POST_FAILED
        | VIR_ERR_HTTP_ERROR
        | VIR_ERR_SEXPR_SERIAL
        | VIR_ERR_NO_XEN
        | VIR_ERR_XEN_CALL
        | VIR_ERR_OS_TYPE
        | VIR_ERR_NO_KERNEL
        | VIR_ERR_NO_ROOT
        | VIR_ERR_NO_SOURCE
        | VIR_ERR_NO_TARGET
        | VIR_ERR_NO_NAME
        | VIR_ERR_NO_OS
        | VIR_ERR_NO_DEVICE
        | VIR_ERR_NO_XENSTORE
        | VIR_ERR_DRIVER_FULL
        | VIR_ERR_CALL_FAILED
        | VIR_ERR_XML_ERROR
        | VIR_ERR_DOM_EXIST
        | VIR_ERR_OPERATION_DENIED
        | VIR_ERR_OPEN_FAILED
        | VIR_ERR_READ_FAILED
        | VIR_ERR_PARSE_FAILED
        | VIR_ERR_CONF_SYNTAX
        | VIR_ERR_WRITE_FAILED
        | VIR_ERR_XML_DETAIL
        | VIR_ERR_INVALID_NETWORK
        | VIR_ERR_NETWORK_EXIST
        | VIR_ERR_SYSTEM_ERROR
        | VIR_ERR_RPC
        | VIR_ERR_GNUTLS_ERROR
        | VIR_WAR_NO_NETWORK
        | VIR_ERR_NO_DOMAIN
        | VIR_ERR_NO_NETWORK
        | VIR_ERR_INVALID_MAC
        | VIR_ERR_AUTH_FAILED
        | VIR_ERR_INVALID_STORAGE_POOL
        | VIR_ERR_INVALID_STORAGE_VOL
        | VIR_WAR_NO_STORAGE
        | VIR_ERR_NO_STORAGE_POOL
        | VIR_ERR_NO_STORAGE_VOL
        | VIR_ERR_UNKNOWN of int
      val string_of_code : Libvirt.Virterror.code -> string
      type domain =
          VIR_FROM_NONE
        | VIR_FROM_XEN
        | VIR_FROM_XEND
        | VIR_FROM_XENSTORE
        | VIR_FROM_SEXPR
        | VIR_FROM_XML
        | VIR_FROM_DOM
        | VIR_FROM_RPC
        | VIR_FROM_PROXY
        | VIR_FROM_CONF
        | VIR_FROM_QEMU
        | VIR_FROM_NET
        | VIR_FROM_TEST
        | VIR_FROM_REMOTE
        | VIR_FROM_OPENVZ
        | VIR_FROM_XENXM
        | VIR_FROM_STATS_LINUX
        | VIR_FROM_STORAGE
        | VIR_FROM_UNKNOWN of int
      val string_of_domain : Libvirt.Virterror.domain -> string
      type level =
          VIR_ERR_NONE
        | VIR_ERR_WARNING
        | VIR_ERR_ERROR
        | VIR_ERR_UNKNOWN_LEVEL of int
      val string_of_level : Libvirt.Virterror.level -> string
      type t = {
        code : Libvirt.Virterror.code;
        domain : Libvirt.Virterror.domain;
        message : string option;
        level : Libvirt.Virterror.level;
        str1 : string option;
        str2 : string option;
        str3 : string option;
        int1 : int32;
        int2 : int32;
      }
      val to_string : Libvirt.Virterror.t -> string
      val get_last_error : unit -> Libvirt.Virterror.t option
      val get_last_conn_error :
        [> `R ] Libvirt.Connect.t -> Libvirt.Virterror.t option
      val reset_last_error : unit -> unit
      val reset_last_conn_error : [> `R ] Libvirt.Connect.t -> unit
      val no_error : unit -> Libvirt.Virterror.t
    end
  exception Virterror of Libvirt.Virterror.t
  exception Not_supported of string
  val map_ignore_errors : ('-> 'b) -> 'a list -> 'b list
end