[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] add xl ocaml bindings



Signed-off-by: Vincent Hanquez <vincent.hanquez@xxxxxxxxxxxxx>
---
 tools/ocaml/Makefile           |    2 +-
 tools/ocaml/common.make        |    2 +-
 tools/ocaml/libs/xl/xl.ml      |  209 ++++++++++++
 tools/ocaml/libs/xl/xl.mli     |  209 ++++++++++++
 tools/ocaml/libs/xl/xl_stubs.c |  706 ++++++++++++++++++++++++++++++++++++++++
 5 files changed, 1126 insertions(+), 2 deletions(-)
 create mode 100644 tools/ocaml/libs/xl/xl.ml
 create mode 100644 tools/ocaml/libs/xl/xl.mli
 create mode 100644 tools/ocaml/libs/xl/xl_stubs.c

diff --git a/tools/ocaml/Makefile b/tools/ocaml/Makefile
index 2a36e7b..af5933b 100644
--- a/tools/ocaml/Makefile
+++ b/tools/ocaml/Makefile
@@ -4,7 +4,7 @@ include $(XEN_ROOT)/tools/Rules.mk
 SUBDIRS_LIBS = \
        libs/uuid libs/mmap \
        libs/log libs/xc libs/eventchn \
-       libs/xb libs/xs
+       libs/xb libs/xs libs/xl
 
 SUBDIRS_PROGRAMS = xenstored
 
diff --git a/tools/ocaml/common.make b/tools/ocaml/common.make
index 63b6b2e..a2085d7 100644
--- a/tools/ocaml/common.make
+++ b/tools/ocaml/common.make
@@ -9,7 +9,7 @@ OCAMLLEX ?= ocamllex
 OCAMLYACC ?= ocamlyacc
 
 CFLAGS += -fPIC -Werror
-CFLAGS += -I$(TOPLEVEL)/../include -I$(TOPLEVEL)/../libxc
+CFLAGS += -I$(TOPLEVEL)/../include -I$(TOPLEVEL)/../libxc 
-I$(TOPLEVEL)/../xenstore -I$(TOPLEVEL)/../libxl
 CFLAGS-$(CONFIG_Linux) += -I/usr/lib64/ocaml -I/usr/lib/ocaml
 CFLAGS-$(CONFIG_NetBSD) += -I/usr/pkg/lib/ocaml -fPIC
 
diff --git a/tools/ocaml/libs/xl/xl.ml b/tools/ocaml/libs/xl/xl.ml
new file mode 100644
index 0000000..0f665ae
--- /dev/null
+++ b/tools/ocaml/libs/xl/xl.ml
@@ -0,0 +1,209 @@
+(*
+ * Copyright (C) 2009-2010 Citrix Ltd.
+ * Author Vincent Hanquez <vincent.hanquez@xxxxxxxxxxxxx>
+ *
+ * This program 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; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program 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 Lesser General Public License for more details.
+ *)
+
+type create_info =
+{
+       hvm : bool;
+       hap : bool;
+       oos : bool;
+       ssidref : int32;
+       name : string;
+       uuid : int array;
+       xsdata : (string * string) list;
+       platformdata : (string * string) list;
+       poolid : int32;
+       poolname : string;
+}
+
+type build_pv_info =
+{
+       slack_memkb : int64;
+       cmdline : string;
+       ramdisk : string;
+       features : string;
+}
+
+type build_hvm_info =
+{
+       pae : bool;
+       apic : bool;
+       acpi : bool;
+       nx : bool;
+       viridian : bool;
+       timeoffset : string;
+}
+
+type build_spec = BuildHVM of build_hvm_info | BuildPV of build_pv_info
+
+type build_info =
+{
+       timer_mode : int;
+       hpet : int;
+       vpt_align : int;
+       max_vcpus : int;
+       cur_vcpus : int;
+       max_memkb : int64;
+       target_memkb : int64;
+       video_memkb : int64;
+       shadow_memkb : int64;
+       kernel : string;
+       priv: build_spec;
+}
+
+type build_state =
+{
+       store_port : int;
+       store_mfn : int64;
+       console_port : int;
+       console_mfn : int64;
+}
+
+type domid = int
+
+type disk_phystype =
+       | PHYSTYPE_QCOW
+       | PHYSTYPE_QCOW2
+       | PHYSTYPE_VHD
+       | PHYSTYPE_AIO
+       | PHYSTYPE_FILE
+       | PHYSTYPE_PHY
+
+type disk_info =
+{
+       backend_domid : domid;
+       physpath : string;
+       phystype : disk_phystype;
+       virtpath : string;
+       unpluggable : bool;
+       readwrite : bool;
+       is_cdrom : bool;
+}
+
+type nic_type =
+       | NICTYPE_IOEMU
+       | NICTYPE_VIF
+
+type nic_info =
+{
+       backend_domid : domid;
+       devid : int;
+       mtu : int;
+       model : string;
+       mac : int array;
+       bridge : string;
+       ifname : string;
+       script : string;
+       nictype : nic_type;
+}
+
+type console_type =
+       | CONSOLETYPE_XENCONSOLED
+       | CONSOLETYPE_IOEMU
+
+type console_info =
+{
+       backend_domid : domid;
+       devid : int;
+       consoletype : console_type;
+}
+
+type vkb_info =
+{
+       backend_domid : domid;
+       devid : int;
+}
+
+type vfb_info =
+{
+       backend_domid : domid;
+       devid : int;
+       vnc : bool;
+       vnclisten : string;
+       vncpasswd : string;
+       vncdisplay : int;
+       vncunused : bool;
+       keymap : string;
+       sdl : bool;
+       opengl : bool;
+       display : string;
+       xauthority : string;
+}
+
+type pci_info =
+{
+       v : int; (* domain * bus * dev * func multiplexed *)
+       domain : int;
+       vdevfn : int;
+       msitranslate : bool;
+       power_mgmt : bool;
+}
+
+type physinfo =
+{
+       threads_per_core: int;
+       cores_per_socket: int;
+       max_cpu_id: int;
+       nr_cpus: int;
+       cpu_khz: int;
+       total_pages: int64;
+       free_pages: int64;
+       scrub_pages: int64;
+       nr_nodes: int;
+       hwcap: int32 array;
+       physcap: int32;
+}
+
+type sched_credit =
+{
+       weight: int;
+       cap: int;
+}
+
+external domain_make : create_info -> domid = "stub_xl_domain_make"
+external domain_build : build_info -> domid -> build_state = 
"stub_xl_domain_build"
+
+external disk_add : disk_info -> domid -> unit = "stub_xl_disk_add"
+external disk_remove : disk_info -> domid -> unit = "stub_xl_disk_remove"
+
+external nic_add : nic_info -> domid -> unit = "stub_xl_nic_add"
+external nic_remove : disk_info -> domid -> unit = "stub_xl_nic_remove"
+
+external console_add : console_info -> build_state -> domid -> unit = 
"stub_xl_console_add"
+
+external vkb_add : vkb_info -> domid -> unit = "stub_xl_vkb_add"
+external vkb_clean_shutdown : domid -> unit = "stub_vkb_clean_shutdown"
+external vkb_hard_shutdown : domid -> unit = "stub_vkb_hard_shutdown"
+
+external vfb_add : vfb_info -> domid -> unit = "stub_xl_vfb_add"
+external vfb_clean_shutdown : domid -> unit = "stub_vfb_clean_shutdown"
+external vfb_hard_shutdown : domid -> unit = "stub_vfb_hard_shutdown"
+
+external pci_add : pci_info -> domid -> unit = "stub_xl_pci_add"
+external pci_remove : pci_info -> domid -> unit = "stub_xl_pci_remove"
+external pci_shutdown : domid -> unit = "stub_xl_pci_shutdown"
+
+type button =
+       | Button_Power
+       | Button_Sleep
+
+external button_press : domid -> button -> unit = "stub_xl_button_press"
+external physinfo : unit -> physinfo = "stub_xl_physinfo"
+
+external domain_sched_credit_get : domid -> sched_credit = 
"stub_xl_sched_credit_domain_get"
+external domain_sched_credit_set : domid -> sched_credit -> unit = 
"stub_xl_sched_credit_domain_set"
+
+external send_trigger : domid -> string -> int -> unit = "stub_xl_send_trigger"
+external send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq"
+external send_debug_keys : domid -> string -> unit = "stub_xl_send_debug_keys"
diff --git a/tools/ocaml/libs/xl/xl.mli b/tools/ocaml/libs/xl/xl.mli
new file mode 100644
index 0000000..0f665ae
--- /dev/null
+++ b/tools/ocaml/libs/xl/xl.mli
@@ -0,0 +1,209 @@
+(*
+ * Copyright (C) 2009-2010 Citrix Ltd.
+ * Author Vincent Hanquez <vincent.hanquez@xxxxxxxxxxxxx>
+ *
+ * This program 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; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program 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 Lesser General Public License for more details.
+ *)
+
+type create_info =
+{
+       hvm : bool;
+       hap : bool;
+       oos : bool;
+       ssidref : int32;
+       name : string;
+       uuid : int array;
+       xsdata : (string * string) list;
+       platformdata : (string * string) list;
+       poolid : int32;
+       poolname : string;
+}
+
+type build_pv_info =
+{
+       slack_memkb : int64;
+       cmdline : string;
+       ramdisk : string;
+       features : string;
+}
+
+type build_hvm_info =
+{
+       pae : bool;
+       apic : bool;
+       acpi : bool;
+       nx : bool;
+       viridian : bool;
+       timeoffset : string;
+}
+
+type build_spec = BuildHVM of build_hvm_info | BuildPV of build_pv_info
+
+type build_info =
+{
+       timer_mode : int;
+       hpet : int;
+       vpt_align : int;
+       max_vcpus : int;
+       cur_vcpus : int;
+       max_memkb : int64;
+       target_memkb : int64;
+       video_memkb : int64;
+       shadow_memkb : int64;
+       kernel : string;
+       priv: build_spec;
+}
+
+type build_state =
+{
+       store_port : int;
+       store_mfn : int64;
+       console_port : int;
+       console_mfn : int64;
+}
+
+type domid = int
+
+type disk_phystype =
+       | PHYSTYPE_QCOW
+       | PHYSTYPE_QCOW2
+       | PHYSTYPE_VHD
+       | PHYSTYPE_AIO
+       | PHYSTYPE_FILE
+       | PHYSTYPE_PHY
+
+type disk_info =
+{
+       backend_domid : domid;
+       physpath : string;
+       phystype : disk_phystype;
+       virtpath : string;
+       unpluggable : bool;
+       readwrite : bool;
+       is_cdrom : bool;
+}
+
+type nic_type =
+       | NICTYPE_IOEMU
+       | NICTYPE_VIF
+
+type nic_info =
+{
+       backend_domid : domid;
+       devid : int;
+       mtu : int;
+       model : string;
+       mac : int array;
+       bridge : string;
+       ifname : string;
+       script : string;
+       nictype : nic_type;
+}
+
+type console_type =
+       | CONSOLETYPE_XENCONSOLED
+       | CONSOLETYPE_IOEMU
+
+type console_info =
+{
+       backend_domid : domid;
+       devid : int;
+       consoletype : console_type;
+}
+
+type vkb_info =
+{
+       backend_domid : domid;
+       devid : int;
+}
+
+type vfb_info =
+{
+       backend_domid : domid;
+       devid : int;
+       vnc : bool;
+       vnclisten : string;
+       vncpasswd : string;
+       vncdisplay : int;
+       vncunused : bool;
+       keymap : string;
+       sdl : bool;
+       opengl : bool;
+       display : string;
+       xauthority : string;
+}
+
+type pci_info =
+{
+       v : int; (* domain * bus * dev * func multiplexed *)
+       domain : int;
+       vdevfn : int;
+       msitranslate : bool;
+       power_mgmt : bool;
+}
+
+type physinfo =
+{
+       threads_per_core: int;
+       cores_per_socket: int;
+       max_cpu_id: int;
+       nr_cpus: int;
+       cpu_khz: int;
+       total_pages: int64;
+       free_pages: int64;
+       scrub_pages: int64;
+       nr_nodes: int;
+       hwcap: int32 array;
+       physcap: int32;
+}
+
+type sched_credit =
+{
+       weight: int;
+       cap: int;
+}
+
+external domain_make : create_info -> domid = "stub_xl_domain_make"
+external domain_build : build_info -> domid -> build_state = 
"stub_xl_domain_build"
+
+external disk_add : disk_info -> domid -> unit = "stub_xl_disk_add"
+external disk_remove : disk_info -> domid -> unit = "stub_xl_disk_remove"
+
+external nic_add : nic_info -> domid -> unit = "stub_xl_nic_add"
+external nic_remove : disk_info -> domid -> unit = "stub_xl_nic_remove"
+
+external console_add : console_info -> build_state -> domid -> unit = 
"stub_xl_console_add"
+
+external vkb_add : vkb_info -> domid -> unit = "stub_xl_vkb_add"
+external vkb_clean_shutdown : domid -> unit = "stub_vkb_clean_shutdown"
+external vkb_hard_shutdown : domid -> unit = "stub_vkb_hard_shutdown"
+
+external vfb_add : vfb_info -> domid -> unit = "stub_xl_vfb_add"
+external vfb_clean_shutdown : domid -> unit = "stub_vfb_clean_shutdown"
+external vfb_hard_shutdown : domid -> unit = "stub_vfb_hard_shutdown"
+
+external pci_add : pci_info -> domid -> unit = "stub_xl_pci_add"
+external pci_remove : pci_info -> domid -> unit = "stub_xl_pci_remove"
+external pci_shutdown : domid -> unit = "stub_xl_pci_shutdown"
+
+type button =
+       | Button_Power
+       | Button_Sleep
+
+external button_press : domid -> button -> unit = "stub_xl_button_press"
+external physinfo : unit -> physinfo = "stub_xl_physinfo"
+
+external domain_sched_credit_get : domid -> sched_credit = 
"stub_xl_sched_credit_domain_get"
+external domain_sched_credit_set : domid -> sched_credit -> unit = 
"stub_xl_sched_credit_domain_set"
+
+external send_trigger : domid -> string -> int -> unit = "stub_xl_send_trigger"
+external send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq"
+external send_debug_keys : domid -> string -> unit = "stub_xl_send_debug_keys"
diff --git a/tools/ocaml/libs/xl/xl_stubs.c b/tools/ocaml/libs/xl/xl_stubs.c
new file mode 100644
index 0000000..4b351c2
--- /dev/null
+++ b/tools/ocaml/libs/xl/xl_stubs.c
@@ -0,0 +1,706 @@
+/*
+ * Copyright (C) 2009-2010 Citrix Ltd.
+ * Author Vincent Hanquez <vincent.hanquez@xxxxxxxxxxxxx>
+ *
+ * This program 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; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program 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 Lesser General Public License for more details.
+ */
+
+#include <stdlib.h>
+
+#define CAML_NAME_SPACE
+#include <caml/alloc.h>
+#include <caml/memory.h>
+#include <caml/signals.h>
+#include <caml/fail.h>
+#include <caml/callback.h>
+
+#include <sys/mman.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "libxl.h"
+
+#define INIT_CTX()  \
+       ret = libxl_ctx_init(&ctx, LIBXL_VERSION, NULL); \
+       if (ret != 0) \
+               failwith_xl("cannot init context");
+
+#define FREE_CTX()  \
+       libxl_ctx_free(&ctx)
+
+void log_callback(void *userdata, int loglevel, const char *file,
+               int line, const char *func, char *s)
+{
+}
+
+void failwith_xl(char *log_data)
+{
+       char s[1024];
+       snprintf(s, 1024, "proper logging not implemented yet: error in %s", 
log_data);
+       caml_raise_with_string(*caml_named_value("xl.error"), log_data);
+}
+
+static int string_string_tuple_array_val (char ***c_val, value v)
+{
+       CAMLparam1(v);
+       CAMLlocal1(a);
+       int i;
+       char **array;
+
+       for (i = 0, a = Field(v, 5); a != Val_emptylist; a = Field(a, 1)) { 
i++; }
+
+       array = calloc((i + 1) * 2, sizeof(char *));
+       if (!array)
+               return 1;
+       for (i = 0, a = Field(v, 5); a != Val_emptylist; a = Field(a, 1), i++) {
+               value b = Field(a, 0);
+               array[i * 2] = String_val(Field(b, 0));
+               array[i * 2 + 1] = String_val(Field(b, 1));
+       }
+       *c_val = array;
+       CAMLreturn(0);
+}
+
+static int domain_create_info_val (libxl_domain_create_info *c_val, value v)
+{
+       CAMLparam1(v);
+       CAMLlocal1(a);
+       int i;
+
+       c_val->hvm = Bool_val(Field(v, 0));
+       c_val->hap = Bool_val(Field(v, 1));
+       c_val->oos = Bool_val(Field(v, 2));
+       c_val->ssidref = Int32_val(Field(v, 3));
+       c_val->name = String_val(Field(v, 4));
+       a = Field(v, 5);
+       for (i = 0; i < 16; i++)
+               c_val->uuid[i] = Int_val(Field(a, i));
+       string_string_tuple_array_val(&(c_val->xsdata), Field(v, 6));
+       string_string_tuple_array_val(&(c_val->platformdata), Field(v, 7));
+
+       c_val->poolid = Int32_val(Field(v, 8));
+       c_val->poolname = String_val(Field(v, 9));
+
+       CAMLreturn(0);
+}
+
+static int domain_build_info_val (libxl_domain_build_info *c_val, value v)
+{
+       CAMLparam1(v);
+       CAMLlocal1(infopriv);
+
+       c_val->timer_mode = Int_val(Field(v, 0));
+       c_val->hpet = Int_val(Field(v, 1));
+       c_val->vpt_align = Int_val(Field(v, 2));
+       c_val->max_vcpus = Int_val(Field(v, 3));
+       c_val->cur_vcpus = Int_val(Field(v, 4));
+       c_val->max_memkb = Int64_val(Field(v, 5));
+       c_val->target_memkb = Int64_val(Field(v, 6));
+       c_val->video_memkb = Int64_val(Field(v, 7));
+       c_val->shadow_memkb = Int64_val(Field(v, 8));
+       c_val->kernel = String_val(Field(v, 9));
+       c_val->hvm = Tag_val(Field(v, 10)) == 0;
+       infopriv = Field(Field(v, 10), 0);
+       if (c_val->hvm) {
+               c_val->u.hvm.pae = Bool_val(Field(infopriv, 0));
+               c_val->u.hvm.apic = Bool_val(Field(infopriv, 1));
+               c_val->u.hvm.acpi = Bool_val(Field(infopriv, 2));
+               c_val->u.hvm.nx = Bool_val(Field(infopriv, 3));
+               c_val->u.hvm.viridian = Bool_val(Field(infopriv, 4));
+               c_val->u.hvm.timeoffset = String_val(Field(infopriv, 5));
+       } else {
+               c_val->u.pv.slack_memkb = Int64_val(Field(infopriv, 0));
+               c_val->u.pv.cmdline = String_val(Field(infopriv, 1));
+               c_val->u.pv.ramdisk = String_val(Field(infopriv, 2));
+               c_val->u.pv.features = String_val(Field(infopriv, 3));
+       }
+
+       CAMLreturn(0);
+}
+
+static int device_disk_val(libxl_device_disk *c_val, value v)
+{
+       CAMLparam1(v);
+
+       c_val->backend_domid = Int_val(Field(v, 0));
+       c_val->physpath = String_val(Field(v, 1));
+       c_val->phystype = (Int_val(Field(v, 2))) + PHYSTYPE_QCOW;
+       c_val->virtpath = String_val(Field(v, 3));
+       c_val->unpluggable = Bool_val(Field(v, 4));
+       c_val->readwrite = Bool_val(Field(v, 5));
+       c_val->is_cdrom = Bool_val(Field(v, 6));
+
+       CAMLreturn(0);
+}
+
+static int device_nic_val(libxl_device_nic *c_val, value v)
+{
+       CAMLparam1(v);
+       int i;
+       int ret = 0;
+       c_val->backend_domid = Int_val(Field(v, 0));
+       c_val->devid = Int_val(Field(v, 1));
+       c_val->mtu = Int_val(Field(v, 2));
+       c_val->model = String_val(Field(v, 3));
+
+       if (Wosize_val(Field(v, 4)) != 6) {
+               ret = 1;
+               goto out;
+       }
+       for (i = 0; i < 6; i++)
+               c_val->mac[i] = Int_val(Field(Field(v, 4), i));
+
+       /* not handling c_val->ip */
+       c_val->bridge = String_val(Field(v, 5));
+       c_val->ifname = String_val(Field(v, 6));
+       c_val->script = String_val(Field(v, 7));
+       c_val->nictype = (Int_val(Field(v, 8))) + NICTYPE_IOEMU;
+
+out:
+       CAMLreturn(ret);
+}
+
+static int device_console_val(libxl_device_console *c_val, value v)
+{
+       CAMLparam1(v);
+
+       c_val->backend_domid = Int_val(Field(v, 0));
+       c_val->devid = Int_val(Field(v, 1));
+       c_val->constype = (Int_val(Field(v, 2))) + CONSTYPE_XENCONSOLED;
+
+       CAMLreturn(0);
+}
+
+static int device_vkb_val(libxl_device_vkb *c_val, value v)
+{
+       CAMLparam1(v);
+
+       c_val->backend_domid = Int_val(Field(v, 0));
+       c_val->devid = Int_val(Field(v, 1));
+
+       CAMLreturn(0);
+}
+
+static int device_vfb_val(libxl_device_vfb *c_val, value v)
+{
+       CAMLparam1(v);
+
+       c_val->backend_domid = Int_val(Field(v, 0));
+       c_val->devid = Int_val(Field(v, 1));
+       c_val->vnc = Bool_val(Field(v, 2));
+       c_val->vnclisten = String_val(Field(v, 3));
+       c_val->vncpasswd = String_val(Field(v, 4));
+       c_val->vncdisplay = Int_val(Field(v, 5));
+       c_val->keymap = String_val(Field(v, 6));
+       c_val->sdl = Bool_val(Field(v, 7));
+       c_val->opengl = Bool_val(Field(v, 8));
+       c_val->display = String_val(Field(v, 9));
+       c_val->xauthority = String_val(Field(v, 10));
+
+       CAMLreturn(0);
+}
+
+static int device_pci_val(libxl_device_pci *c_val, value v)
+{
+       CAMLparam1(v);
+
+       c_val->value = Int_val(Field(v, 0));
+       c_val->domain = Int_val(Field(v, 1));
+       c_val->vdevfn = Int_val(Field(v, 2));
+       c_val->msitranslate = Bool_val(Field(v, 3));
+       c_val->power_mgmt = Bool_val(Field(v, 4));
+
+       CAMLreturn(0);
+}
+
+static int sched_credit_val(struct libxl_sched_credit *c_val, value v)
+{
+       CAMLparam1(v);
+       c_val->weight = Int_val(Field(v, 0));
+       c_val->cap = Int_val(Field(v, 1));
+       CAMLreturn(0);
+}
+
+static int domain_build_state_val(libxl_domain_build_state *c_val, value v)
+{
+       CAMLparam1(v);
+
+       c_val->store_port = Int_val(Field(v, 0));
+       c_val->store_mfn = Int64_val(Field(v, 1));
+       c_val->console_port = Int_val(Field(v, 2));
+       c_val->console_mfn = Int64_val(Field(v, 3));
+       
+       CAMLreturn(0);
+}
+
+static value Val_sched_credit(struct libxl_sched_credit *c_val)
+{
+       CAMLparam0();
+       CAMLlocal1(v);
+
+       v = caml_alloc_tuple(2);
+
+       Store_field(v, 0, Val_int(c_val->weight));
+       Store_field(v, 1, Val_int(c_val->cap));
+
+       CAMLreturn(v);
+}
+
+static value Val_domain_build_state(libxl_domain_build_state *c_val)
+{
+       CAMLparam0();
+       CAMLlocal1(v);
+
+       v = caml_alloc_tuple(4);
+
+       Store_field(v, 0, Val_int(c_val->store_port));
+       Store_field(v, 1, caml_copy_int64(c_val->store_mfn));
+       Store_field(v, 2, Val_int(c_val->console_port));
+       Store_field(v, 3, caml_copy_int64(c_val->console_mfn));
+
+       CAMLreturn(v);
+}
+
+static value Val_physinfo(struct libxl_physinfo *c_val)
+{
+       CAMLparam0();
+       CAMLlocal2(v, hwcap);
+       int i;
+
+       hwcap = caml_alloc_tuple(8);
+       for (i = 0; i < 8; i++)
+               Store_field(hwcap, i, caml_copy_int32(c_val->hw_cap[i]));
+
+       v = caml_alloc_tuple(11);
+       Store_field(v, 0, Val_int(c_val->threads_per_core));
+       Store_field(v, 1, Val_int(c_val->cores_per_socket));
+       Store_field(v, 2, Val_int(c_val->max_cpu_id));
+       Store_field(v, 3, Val_int(c_val->nr_cpus));
+       Store_field(v, 4, Val_int(c_val->cpu_khz));
+       Store_field(v, 5, caml_copy_int64(c_val->total_pages));
+       Store_field(v, 6, caml_copy_int64(c_val->free_pages));
+       Store_field(v, 7, caml_copy_int64(c_val->scrub_pages));
+       Store_field(v, 8, Val_int(c_val->nr_nodes));
+       Store_field(v, 9, hwcap);
+       Store_field(v, 10, caml_copy_int32(c_val->phys_cap));
+
+       CAMLreturn(v);
+}
+
+value stub_xl_domain_make(value info)
+{
+       CAMLparam1(info);
+       struct libxl_ctx ctx;
+       uint32_t domid;
+       libxl_domain_create_info c_info;
+       int ret;
+
+       domain_create_info_val (&c_info, info);
+
+       INIT_CTX();
+
+       ret = libxl_domain_make(&ctx, &c_info, &domid);
+       if (ret != 0)
+               failwith_xl("domain make");
+
+       FREE_CTX();
+
+       free(c_info.xsdata);
+       free(c_info.platformdata);
+
+       CAMLreturn(Val_int(domid));
+}
+
+value stub_xl_domain_build(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       CAMLlocal1(result);
+       struct libxl_ctx ctx;
+       libxl_domain_build_info c_info;
+       libxl_domain_build_state c_state;
+       int ret;
+       int c_domid;
+
+       domain_build_info_val (&c_info, info);
+       c_domid = Int_val(domid);
+
+       INIT_CTX();
+
+       ret = libxl_domain_build(&ctx, &c_info, c_domid, &c_state);
+       if (ret != 0)
+               failwith_xl("domain_build");
+
+       result = Val_domain_build_state(&c_state);
+       FREE_CTX();
+
+       CAMLreturn(result);
+}
+
+value stub_xl_disk_add(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       libxl_device_disk c_info;
+       struct libxl_ctx ctx;
+       int ret;
+
+       device_disk_val(&c_info, info);
+       c_info.domid = Int_val(domid);
+
+       INIT_CTX();
+       ret = libxl_device_disk_add(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("disk_add");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_disk_remove(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       libxl_device_disk c_info;
+       struct libxl_ctx ctx;
+       int ret;
+
+       device_disk_val(&c_info, info);
+       c_info.domid = Int_val(domid);
+
+       INIT_CTX();
+       ret = libxl_device_disk_del(&ctx, &c_info, 0);
+       if (ret != 0)
+               failwith_xl("disk_remove");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_nic_add(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       struct libxl_ctx ctx;
+       libxl_device_nic c_info;
+       int ret;
+
+       device_nic_val(&c_info, info);
+       c_info.domid = Int_val(domid);
+
+       INIT_CTX();
+       ret = libxl_device_nic_add(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("nic_add");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_nic_remove(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       struct libxl_ctx ctx;
+       libxl_device_nic c_info;
+       int ret;
+
+       device_nic_val(&c_info, info);
+       c_info.domid = Int_val(domid);
+
+       INIT_CTX();
+       ret = libxl_device_nic_del(&ctx, &c_info, 0);
+       if (ret != 0)
+               failwith_xl("nic_remove");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_console_add(value info, value state, value domid)
+{
+       CAMLparam3(info, state, domid);
+       struct libxl_ctx ctx;
+       libxl_device_console c_info;
+       libxl_domain_build_state c_state;
+       int ret;
+
+       device_console_val(&c_info, info);
+       domain_build_state_val(&c_state, state);
+       c_info.domid = Int_val(domid);
+       c_info.build_state = &c_state;
+
+       INIT_CTX();
+       ret = libxl_device_console_add(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("console_add");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_vkb_add(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       struct libxl_ctx ctx;
+       libxl_device_vkb c_info;
+       int ret;
+
+       device_vkb_val(&c_info, info);
+       c_info.domid = Int_val(domid);
+
+       INIT_CTX();
+       ret = libxl_device_vkb_add(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("vkb_add");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_vkb_clean_shutdown(value domid)
+{
+       CAMLparam1(domid);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_device_vkb_clean_shutdown(&ctx, Int_val(domid));
+       if (ret != 0)
+               failwith_xl("vkb_clean_shutdown");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_vkb_hard_shutdown(value domid)
+{
+       CAMLparam1(domid);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_device_vkb_hard_shutdown(&ctx, Int_val(domid));
+       if (ret != 0)
+               failwith_xl("vkb_hard_shutdown");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_vfb_add(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       struct libxl_ctx ctx;
+       libxl_device_vfb c_info;
+       int ret;
+
+       device_vfb_val(&c_info, info);
+       c_info.domid = Int_val(domid);
+
+       INIT_CTX();
+       ret = libxl_device_vfb_add(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("vfb_add");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_vfb_clean_shutdown(value domid)
+{
+       CAMLparam1(domid);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_device_vfb_clean_shutdown(&ctx, Int_val(domid));
+       if (ret != 0)
+               failwith_xl("vfb_clean_shutdown");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_vfb_hard_shutdown(value domid)
+{
+       CAMLparam1(domid);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_device_vfb_hard_shutdown(&ctx, Int_val(domid));
+       if (ret != 0)
+               failwith_xl("vfb_hard_shutdown");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_pci_add(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       struct libxl_ctx ctx;
+       libxl_device_pci c_info;
+       int ret;
+
+       device_pci_val(&c_info, info);
+
+       INIT_CTX();
+       ret = libxl_device_pci_add(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("pci_add");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_pci_remove(value info, value domid)
+{
+       CAMLparam2(info, domid);
+       struct libxl_ctx ctx;
+       libxl_device_pci c_info;
+       int ret;
+
+       device_pci_val(&c_info, info);
+
+       INIT_CTX();
+       ret = libxl_device_pci_remove(&ctx, Int_val(domid), &c_info);
+       if (ret != 0)
+               failwith_xl("pci_remove");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_pci_shutdown(value domid)
+{
+       CAMLparam1(domid);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_device_pci_shutdown(&ctx, Int_val(domid));
+       if (ret != 0)
+               failwith_xl("pci_shutdown");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_button_press(value domid, value button)
+{
+       CAMLparam2(domid, button);
+       struct libxl_ctx ctx;
+       int ret;
+       
+       INIT_CTX();
+       ret = libxl_button_press(&ctx, Int_val(domid), Int_val(button) + 
POWER_BUTTON);
+       if (ret != 0)
+               failwith_xl("button_press");
+       FREE_CTX();
+
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_physinfo(value unit)
+{
+       CAMLparam1(unit);
+       CAMLlocal1(physinfo);
+       struct libxl_ctx ctx;
+       struct libxl_physinfo c_physinfo;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_get_physinfo(&ctx, &c_physinfo);
+       if (ret != 0)
+               failwith_xl("physinfo");
+       FREE_CTX();
+       
+       physinfo = Val_physinfo(&c_physinfo);
+       CAMLreturn(physinfo);
+}
+
+value stub_xl_sched_credit_domain_get(value domid)
+{
+       CAMLparam1(domid);
+       CAMLlocal1(scinfo);
+       struct libxl_ctx ctx;
+       struct libxl_sched_credit c_scinfo;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_sched_credit_domain_get(&ctx, Int_val(domid), &c_scinfo);
+       if (ret != 0)
+               failwith_xl("sched_credit_domain_get");
+       FREE_CTX();
+       
+       scinfo = Val_sched_credit(&c_scinfo);
+       CAMLreturn(scinfo);
+}
+
+value stub_xl_sched_credit_domain_set(value domid, value scinfo)
+{
+       CAMLparam2(domid, scinfo);
+       struct libxl_ctx ctx;
+       struct libxl_sched_credit c_scinfo;
+       int ret;
+
+       sched_credit_val(&c_scinfo, scinfo);
+
+       INIT_CTX();
+       ret = libxl_sched_credit_domain_set(&ctx, Int_val(domid), &c_scinfo);
+       if (ret != 0)
+               failwith_xl("sched_credit_domain_set");
+       FREE_CTX();
+       
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_send_trigger(value domid, value trigger, value vcpuid)
+{
+       CAMLparam3(domid, trigger, vcpuid);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_send_trigger(&ctx, Int_val(domid), String_val(trigger), 
Int_val(vcpuid));
+       if (ret != 0)
+               failwith_xl("send_trigger");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_send_sysrq(value domid, value sysrq)
+{
+       CAMLparam2(domid, sysrq);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_send_sysrq(&ctx, Int_val(domid), Int_val(sysrq));
+       if (ret != 0)
+               failwith_xl("send_sysrq");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_send_debug_keys(value keys)
+{
+       CAMLparam1(keys);
+       struct libxl_ctx ctx;
+       int ret;
+
+       INIT_CTX();
+       ret = libxl_send_debug_keys(&ctx, String_val(keys));
+       if (ret != 0)
+               failwith_xl("send_debug_keys");
+       FREE_CTX();
+       CAMLreturn(Val_unit);
+}
+
+/*
+ * Local variables:
+ *  indent-tabs-mode: t
+ *  c-basic-offset: 8
+ *  tab-width: 8
+ * End:
+ */
-- 
1.7.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.