aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-12-30 12:47:09 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-12-30 12:47:09 +0000
commitd2863c7929162dbc44fb7cc54bf08f68ade57681 (patch)
tree5b4e3b2db4d696a82f96dd0fb5bfbbd9db9ae084
parent94552247809fafcf8e71a76cb0ec9b864c46836e (diff)
downloadxen-d2863c7929162dbc44fb7cc54bf08f68ade57681.tar.gz
xen-d2863c7929162dbc44fb7cc54bf08f68ade57681.tar.bz2
xen-d2863c7929162dbc44fb7cc54bf08f68ade57681.zip
libxl: add a versioning number to ctx_init that permit to detect
incompatible client. at the moment if the versioning of the library is not exactly the same used in the client then the ctx_init return an ERROR_VERSION. however the same mechanism can be use in the future to be able to support older version and offer a compatibility layer. Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c4
-rw-r--r--tools/libxl/libxl.h4
-rw-r--r--tools/libxl/xl.c24
3 files changed, 18 insertions, 14 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 3a04256901..ec9ffecaa5 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -34,8 +34,10 @@
#include "libxl_internal.h"
#include "flexarray.h"
-int libxl_ctx_init(struct libxl_ctx *ctx)
+int libxl_ctx_init(struct libxl_ctx *ctx, int version)
{
+ if (version != LIBXL_VERSION)
+ return ERROR_VERSION;
memset(ctx, 0, sizeof(struct libxl_ctx));
ctx->alloc_maxsize = 256;
ctx->alloc_ptrs = calloc(ctx->alloc_maxsize, sizeof(void *));
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 7318b5184d..88e98521c3 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -234,8 +234,10 @@ enum {
ERROR_INVAL = -5,
};
+#define LIBXL_VERSION 0
+
/* context functions */
-int libxl_ctx_init(struct libxl_ctx *ctx);
+int libxl_ctx_init(struct libxl_ctx *ctx, int version);
int libxl_ctx_free(struct libxl_ctx *ctx);
int libxl_ctx_set_log(struct libxl_ctx *ctx, libxl_log_callback log_callback, void *log_data);
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index 69c2dad2da..f622cd96a0 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -730,7 +730,7 @@ static void create_domain(int debug, int daemonize, const char *config_file, con
start:
domid = 0;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
libxl_domain_make(&ctx, &info1, &domid);
@@ -942,7 +942,7 @@ void set_memory_target(char *p, char *mem)
struct libxl_ctx ctx;
uint32_t domid;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, p, &domid) < 0) {
@@ -984,7 +984,7 @@ void console(char *p, int cons_num)
struct libxl_ctx ctx;
uint32_t domid;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, p, &domid) < 0) {
@@ -1001,7 +1001,7 @@ void cd_insert(char *dom, char *virtdev, char *phys)
libxl_device_disk disk;
char *p;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, dom, &domid) < 0) {
@@ -1134,7 +1134,7 @@ void pcilist(char *dom)
libxl_device_pci *pcidevs;
int num, i;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, dom, &domid) < 0) {
@@ -1184,7 +1184,7 @@ void pcidetach(char *dom, char *bdf)
libxl_device_pci pcidev;
unsigned int domain, bus, dev, func;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, dom, &domid) < 0) {
@@ -1230,7 +1230,7 @@ void pciattach(char *dom, char *bdf, char *vs)
libxl_device_pci pcidev;
unsigned int domain, bus, dev, func;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, dom, &domid) < 0) {
@@ -1278,7 +1278,7 @@ void pause_domain(char *p)
struct libxl_ctx ctx;
uint32_t domid;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, p, &domid) < 0) {
@@ -1293,7 +1293,7 @@ void unpause_domain(char *p)
struct libxl_ctx ctx;
uint32_t domid;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, p, &domid) < 0) {
@@ -1308,7 +1308,7 @@ void destroy_domain(char *p)
struct libxl_ctx ctx;
uint32_t domid;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, p, &domid) < 0) {
@@ -1324,7 +1324,7 @@ void list_domains(void)
struct libxl_dominfo *info;
int nb_domain, i;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
info = libxl_domain_list(&ctx, &nb_domain);
@@ -1351,7 +1351,7 @@ int save_domain(char *p, char *filename, int checkpoint)
uint32_t domid;
int fd;
- libxl_ctx_init(&ctx);
+ libxl_ctx_init(&ctx, LIBXL_VERSION);
libxl_ctx_set_log(&ctx, log_callback, NULL);
if (libxl_param_to_domid(&ctx, p, &domid) < 0) {