(* (C) Copyright 2007-2008 Richard W.M. Jones, Red Hat Inc.
http://libvirt.org/
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version,
+ with the OCaml linking exception described in ../COPYING.LIB.
- This program is distributed in the hope that it will be useful,
+ This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *)
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*)
(**
{2 Examples}
Note: A default implementation is provided for [read],
but it is fairly inefficient because it uses {!map_block} to
map each block in the request. *)
- method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+ method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
(** [read_bitstring] is the same as [read] but returns
- a pa_bitmatch-style bitstring. *)
+ a pa_bitstring-style bitstring. *)
method virtual blocksize : Int63.t
(** [blocksize] returns the natural block size of the device. *)
method name : string
method size : Int63.t
method read : Int63.t -> Int63.t -> string
- method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+ method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
method blocksize : Int63.t
method map_block : Int63.t -> (device * Int63.t) list
method contiguous : Int63.t -> Int63.t
method name : string
method size : Int63.t
method read : Int63.t -> Int63.t -> string
- method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+ method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
method blocksize : Int63.t
method map_block : Int63.t -> (device * Int63.t) list
method contiguous : Int63.t -> Int63.t
method name : string
method size : Int63.t
method read : Int63.t -> Int63.t -> string
- method read_bitstring : Int63.t -> Int63.t -> Bitmatch.bitstring
+ method read_bitstring : Int63.t -> Int63.t -> Bitstring.bitstring
method blocksize : Int63.t
method contiguous : Int63.t -> Int63.t
method map_block : Int63.t -> (device * Int63.t) list
]
and partitions = {
- parts_plugin_id : parts_plugin_id; (** Partitioning scheme. *)
+ parts_cb : partitioner_callbacks; (** Partitioning scheme. *)
parts_dev : device; (** Partitions (whole) device. *)
parts : partition list; (** Partitions. *)
}
]
and filesystem = {
- fs_plugin_id : fs_plugin_id; (** Filesystem type. *)
+ fs_cb : filesystem_callbacks; (** Filesystem type. *)
fs_dev : device; (** Device containing the filesystem. *)
fs_blocksize : Int63.t; (** Block size (bytes). *)
fs_blocks_total : Int63.t; (** Total blocks. *)
(** A filesystem, with superblock contents. *)
and pv = {
- lvm_plugin_id : lvm_plugin_id; (** The LVM plug-in which detected
+ pv_cb : lvm_callbacks; (** The LVM plug-in which detected
this. *)
pv_dev : device; (** Device covering whole PV. *)
pv_uuid : string; (** UUID. *)
}
(** Physical and logical volumes as used by LVM plug-ins. *)
-and parts_plugin_id
-and fs_plugin_id
-and lvm_plugin_id
- (** Opaque IDs used to refer to the plug-ins. *)
-
-val name_of_parts : parts_plugin_id -> string
-val name_of_filesystem : fs_plugin_id -> string
-val name_of_lvm : lvm_plugin_id -> string
- (** Convert plug-in IDs to printable strings. *)
+and partitioner_callbacks
+and filesystem_callbacks
+and lvm_callbacks
(** {2 Functions} *)
+val name_of_filesystem : filesystem -> string
+ (** [name_of_filesystem fs] returns a printable name for
+ the filesystem.
+ *)
+
(** {3 Create 'machine'} *)
val open_machine : string -> (string * string) list -> machine
LV filesystems in the returned structure.
*)
+val open_machine_from_devices : string -> (string * block_device) list ->
+ machine
+ (** This is the same as {!open_machine} except that instead
+ of passing a path you should pass a {!block_device} object. *)
+
val close_machine : machine -> unit
(** This is a convenience function which calls the [dev#close]
method on any open {!block_device}s owned by the machine. This just
creates a tree structure which allows ownership to be determined
in just a few steps. *)
+val offset_is_free : (owner * Int63.t) list -> bool
+ (** [offset_is_free owners] tests if the offset is free (unused).
+
+ If an offset is free, then it may be discarded without
+ changing the semantics of the disk image. In normal cases
+ this extends to the end of the current block, but blocksize
+ will differ for each owner, so what this really means is
+ tricky in practice. *)
+
(** {2 Debugging} *)
val debug : bool ref