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

[Xen-devel] [PATCH 19 of 25] libxc: add ability to query OS interface for "fakeness"



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1291369007 0
# Node ID 2cca9651106419dc04b2dfebc51da4b3f9143482
# Parent  384d9d7ca3063a32623cb0d6ccdbc258e3541749
libxc: add ability to query OS interface for "fakeness"

i.e. not running on a real hypervisor

Allows users of the library to adjust behaviour. I don't especially
like this violation of the abstraction but both oxenstored and xapi
use this to avoid difficult to simulate operations when running on the
simulator.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_linux.c    Fri Dec 03 09:36:47 2010 +0000
@@ -697,6 +697,7 @@ xc_osdep_info_t xc_osdep_info = {
 xc_osdep_info_t xc_osdep_info = {
     .name = "Linux Native OS interface",
     .init = &linux_osdep_init,
+    .fake = 0,
 };
 
 /*
diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xc_minios.c
--- a/tools/libxc/xc_minios.c   Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_minios.c   Fri Dec 03 09:36:47 2010 +0000
@@ -549,6 +549,7 @@ xc_osdep_info_t xc_osdep_info = {
 xc_osdep_info_t xc_osdep_info = {
     .name = "Minios Native OS interface",
     .init = &minios_osdep_init,
+    .fake = 0,
 };
 
 /*
diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xc_netbsd.c
--- a/tools/libxc/xc_netbsd.c   Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_netbsd.c   Fri Dec 03 09:36:47 2010 +0000
@@ -348,6 +348,7 @@ xc_osdep_info_t xc_osdep_info = {
 xc_osdep_info_t xc_osdep_info = {
     .name = "Netbsd Native OS interface",
     .init = &netbsd_osdep_init,
+    .fake = 0,
 };
 
 /*
diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c  Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_private.c  Fri Dec 03 09:36:47 2010 +0000
@@ -120,6 +120,19 @@ static int xc_interface_close_common(xc_
 
     free(xch);
     return rc;
+}
+
+int xc_interface_is_fake(void)
+{
+    xc_osdep_info_t info;
+
+    if ( xc_osdep_get_info(NULL, &info) < 0 )
+        return -1;
+
+    /* Have a copy of info so can release the interface now. */
+    xc_osdep_put(&info);
+
+    return info.fake;
 }
 
 xc_interface *xc_interface_open(xentoollog_logger *logger,
diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xc_solaris.c
--- a/tools/libxc/xc_solaris.c  Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_solaris.c  Fri Dec 03 09:36:47 2010 +0000
@@ -321,6 +321,7 @@ xc_osdep_info_t xc_osdep_info = {
 xc_osdep_info_t xc_osdep_info = {
     .name = "Solaris Native OS interface",
     .init = &solaris_osdep_init,
+    .fake = 0,
 };
 
 /*
diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xenctrl.h     Fri Dec 03 09:36:47 2010 +0000
@@ -158,6 +158,15 @@ enum xc_open_flags {
  * @return 0 on success, -1 otherwise.
  */
 int xc_interface_close(xc_interface *xch);
+
+/**
+ * Query the active OS interface (i.e. that which would be returned by
+ * xc_interface_open) to find out if it is fake (i.e. backends onto
+ * something other than an actual Xen hypervisor).
+ *
+ * @return 0 is "real", >0 if fake, -1 on error.
+ */
+int xc_interface_is_fake(void);
 
 /*
  * HYPERCALL SAFE MEMORY BUFFER
diff -r 384d9d7ca306 -r 2cca96511064 tools/libxc/xenctrlosdep.h
--- a/tools/libxc/xenctrlosdep.h        Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xenctrlosdep.h        Fri Dec 03 09:36:47 2010 +0000
@@ -122,6 +122,9 @@ struct xc_osdep_info
 
     /* Returns ops function. */
     xc_osdep_init_fn init;
+
+    /* True if this interface backs onto a fake Xen. */
+    int fake;
 };
 typedef struct xc_osdep_info xc_osdep_info_t;
 

_______________________________________________
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®.