Preparation for capture subcommand:
[virt-mem.git] / lib / virt_mem.mli
index 1dc1c23..58b879e 100644 (file)
@@ -21,15 +21,23 @@ type ksym = string
   (** A kernel symbol name. *)
 
 type image =
-    string
+    int option
+    * string
+    * Virt_mem_utils.architecture
+    * ([`Wordsize], [`Endian]) Virt_mem_mmap.t
+  (** A memory image from a domain. *)
+
+type image_with_ksyms =
+    int option
+    * string
     * Virt_mem_utils.architecture
     * ([`Wordsize], [`Endian]) Virt_mem_mmap.t
     * (ksym -> Virt_mem_mmap.addr)
-  (** An image after it has been processed by the code common to
-      all commands.
+  (** An image after it has been processed to find kernel symbols.
 
       The tuple fields are:
-      - name
+      - domain ID (if known)
+      - name, usually the domain name
       - architecture (eg. I386)
       - kernel memory map (wordsize & endianness already determined)
       - a function to look up kernel symbols.  It raises [Not_found]
@@ -37,15 +45,35 @@ type image =
         table could not be found at all.
   *)
 
-val register : string -> string -> Arg.usage_msg -> bool -> (bool -> image list -> unit) -> unit
+val register :
+  ?external_cmd:bool ->
+  ?extra_args:(Arg.key * Arg.spec * Arg.doc) list ->
+  ?argcheck:(bool -> unit) ->
+  ?beforeksyms:(bool -> image list -> unit) ->
+  ?run:(bool -> image_with_ksyms list -> unit) ->
+  string -> string -> Arg.usage_msg ->
+  unit
   (** Tools register themselves with this call.
 
-      The parameters are:
+      The anonymous parameters are:
       - tool name (eg. "uname")
       - short summary
       - full usage message
-      - is it a virt-cmd?
-      - run function (invoked as [run verbose images])
+
+      The optional callback functions are:
+      - [?argcheck] called after arguments have been fully parsed
+      so that the program can do any additional checks needed (eg.
+      on [extra_args]),
+      - [?beforeksyms] called after images are loaded and before
+      kernel symbols are analyzed,
+      - [?run] called after kernel symbols have been analyzed
+      (almost all tools supply this callback function).
+
+      Pass [~external_cmd:false] if this tool doesn't have an
+      external 'virt-tool' link.
+
+      Pass [~extra_args:...] if this tool needs extra command
+      line options.
   *)
 
 val main : unit -> unit