open Virt_mem_utils
open Virt_mem_mmap
-let usage = s_"NAME
- virt-uname - uname command for virtual machines
-
-SUMMARY
- virt-uname [-options] [domains]
-
-DESCRIPTION
- virt-uname prints the uname information such as OS version,
- architecture and node name for virtual machines running under
- libvirt."
-
-let _, images = Virt_mem.start usage
-
-let () =
+let run debug images =
(* Print new_utsname structure from bitstring. *)
let print_new_utsname name bs =
(* Truncate an OCaml string at the first ASCII NUL character, ie. as
with
Not_found -> str
in
+ (* Expect the first (sysname) field to always be "Linux", which is
+ * also a good way to tell if we're synchronized to the right bit of
+ * memory.
+ *)
bitmatch bs with
- | { sysname : 65*8 : string;
+ | { "Linux\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" : 65*8 : string;
nodename : 65*8 : string;
release : 65*8 : string;
version : 65*8 : string;
machine : 65*8 : string;
domainname : 65*8 : string } ->
- printf "%s: %s %s %s %s %s %s\n"
+ printf "%s: Linux %s %s %s %s %s\n"
name
- (truncate sysname) (truncate nodename) (truncate release)
+ (truncate nodename) (truncate release)
(truncate version) (truncate machine) (truncate domainname)
| { _ } ->
eprintf (f_"%s: unexpected system_utsname in kernel image\n")
Not_found ->
eprintf (f_"%s: could not find utsname in kernel image\n") name
) images
+
+let summary = s_"uname command for virtual machines"
+let description = s_"\
+virt-uname prints the uname information such as OS version,
+architecture and node name for virtual machines running under
+libvirt."
+
+let () = Virt_mem.register "uname" summary description true run