Extracted kernel structures for device addressing in ifconfig.
[virt-mem.git] / lib / virt_mem.mli
index a0f1963..6356981 100644 (file)
@@ -1,3 +1,4 @@
+(** Memory info for virtual domains. *)
 (* Memory info for virtual domains.
    (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
    http://libvirt.org/
 (* Memory info for virtual domains.
    (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
    http://libvirt.org/
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *)
 
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *)
 
-type ksym = string
-  (** A kernel symbol name. *)
-
-type image =
-    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.
-
-      The tuple fields are:
-      - name
-      - architecture (eg. I386)
-      - kernel memory map (wordsize & endianness already determined)
-      - a function to look up kernel symbols.  It raises [Not_found]
-        if a kernel symbol could not be found or if the kernel symbol
-        table could not be found at all.
-  *)
+val register :
+  ?needs_ksyms:bool ->
+  ?needs_utsname:bool ->
+  ?needs_tasks:bool ->
+  ?needs_net_devices:bool ->
+  ?needs_everything:bool ->
+  run:(bool -> Virt_mem_types.image -> Virt_mem_types.kdata -> unit) ->
+  ?external_cmd:bool ->
+  ?extra_args:(Arg.key * Arg.spec * Arg.doc) list ->
+  ?argcheck:(bool -> unit) ->
+  string -> string -> Arg.usage_msg ->
+  unit
+  (** Tools register themselves with this call.
+
+      The required parameters are:
+      - tool name (eg. "uname")
+      - short summary
+      - full usage message
+
+      The boolean parameters specify what kernel structures the
+      tool needs before it can run.  The main program will read
+      these structures in before calling [~run].
+      - [~needs_ksyms:true] if kernel symbols are needed
+      - [~needs_utsname:true] if kernel version (utsname) is needed
+      - [~needs_tasks:true] if all task_struct (processes) are needed
+      - [~needs_net_devices:true] if all net devices are needed
+      - [~needs_everything:true] if the tool requires as much as
+      possible (but will not fail if we cannot determine everything)
 
 
-val start : Arg.usage_msg -> bool * image list
-  (** Programs call this to parse the standard command-line arguments
-      and do all the standard processing of domains into images.
+      The [~run] function is the tool's run function.  This function
+      is run once for each separate domain.  It may throw any exception,
+      which is printed out, but does not abort the program.  (If for
+      some reason you need to abort the whole program, call [exit].)
 
 
-      The returned tuple is:
-      - verbose mode
-      - list of images
+      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.
+
+      Pass [~argcheck:...] so that the tool can do any additional
+      parameter checks needed (eg. for [~extra_args]).
   *)
   *)
+
+val main : unit -> unit
+  (** Entry point for the combined virt-mem executable. *)