1 (* Memory info command for virtual domains.
2 (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 open Virt_mem_gettext.Gettext
27 let parse_utsname bits =
28 (* Expect the first (sysname) field to always be "Linux", which is
29 * also a good way to tell if we're synchronized to the right bit of
33 | { "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;
34 nodename : 65*8 : string;
35 release : 65*8 : string;
36 version : 65*8 : string;
37 machine : 65*8 : string;
38 domainname : 65*8 : string } ->
40 uts_kernel_name = "Linux";
41 uts_nodename = truncate_c_string nodename;
42 uts_kernel_release = truncate_c_string release;
43 uts_kernel_version = truncate_c_string version;
44 uts_machine = truncate_c_string machine;
45 uts_domainname = truncate_c_string domainname
50 let find_utsname debug ({ domname = name; mem = mem; ksyms = ksyms }
53 (* In Linux 2.6.25, the symbol is init_uts_ns.
54 * http://lxr.linux.no/linux/init/version.c
57 let addr = Ksymmap.find "init_uts_ns" ksyms in
59 let bs = Bitstring.bitstring_of_string (get_bytes mem addr (65*6+4)) in
61 | { _ : 32 : int; (* the kref, atomic_t, always 32 bits *)
62 new_utsname : -1 : bitstring } ->
63 parse_utsname new_utsname
66 eprintf (f_"%s: unexpected init_uts_ns in kernel image\n") name;
71 (* In Linux 2.6.9, the symbol is system_utsname.
72 * http://lxr.linux.no/linux-bk+v2.6.9/include/linux/utsname.h#L24
75 let addr = Ksymmap.find "system_utsname" ksyms in
78 Bitstring.bitstring_of_string (get_bytes mem addr (65*6)) in
82 eprintf (f_"%s: could not find utsname in kernel image\n")
86 { kimage with utsname = utsname }