sig
  type 'rw t
  type node_info = {
    model : string;
    memory : int64;
    cpus : int;
    mhz : int;
    nodes : int;
    sockets : int;
    cores : int;
    threads : int;
  }
  type credential_type =
      CredentialUsername
    | CredentialAuthname
    | CredentialLanguage
    | CredentialCnonce
    | CredentialPassphrase
    | CredentialEchoprompt
    | CredentialNoechoprompt
    | CredentialRealm
    | CredentialExternal
  type credential = {
    typ : Libvirt.Connect.credential_type;
    prompt : string;
    challenge : string option;
    defresult : string option;
  }
  type auth = {
    credtype : Libvirt.Connect.credential_type list;
    cb : Libvirt.Connect.credential list -> string option list;
  }
  val connect : ?name:string -> unit -> Libvirt.rw Libvirt.Connect.t
  val connect_readonly : ?name:string -> unit -> Libvirt.ro Libvirt.Connect.t
  val connect_auth :
    ?name:string -> Libvirt.Connect.auth -> Libvirt.rw Libvirt.Connect.t
  val connect_auth_readonly :
    ?name:string -> Libvirt.Connect.auth -> 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 num_of_secrets : [> `R ] Libvirt.Connect.t -> int
  val list_secrets : [> `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 : bytes -> int -> unit
  val unuse_cpu : bytes -> int -> unit
  val cpu_usable : bytes -> int -> int -> int -> bool
  val set_keep_alive : [> `R ] Libvirt.Connect.t -> int -> int -> unit
  val get_auth_default : unit -> Libvirt.Connect.auth
  val get_domain_capabilities :
    ?emulatorbin:string ->
    ?arch:string ->
    ?machine:string ->
    ?virttype:string -> [> `R ] Libvirt.Connect.t -> string
  external const : [> `R ] Libvirt.Connect.t -> Libvirt.ro Libvirt.Connect.t
    = "%identity"
end