aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGianni Tedesco <gianni.tedesco@citrix.com>2011-01-11 18:32:32 +0000
committerGianni Tedesco <gianni.tedesco@citrix.com>2011-01-11 18:32:32 +0000
commit9bdd55b7874963760065876f4e770b102d991131 (patch)
treebba1e32267a5e0c343419ee937bd48c930a46994
parent760b359388cf4bc948ff6cbf96ab5f629ac45fe5 (diff)
downloadxen-9bdd55b7874963760065876f4e770b102d991131.tar.gz
xen-9bdd55b7874963760065876f4e770b102d991131.tar.bz2
xen-9bdd55b7874963760065876f4e770b102d991131.zip
libxl: move domain struct init functions from xl to libxl
This allows libxl users to get some sane default values for this complex set of structures. This is purely code movement and there are no functional changes except for a trivial error handling change in nic device init. Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c79
-rw-r--r--tools/libxl/libxl.h7
-rw-r--r--tools/libxl/libxl_create.c69
-rw-r--r--tools/libxl/xl_cmdimpl.c164
4 files changed, 164 insertions, 155 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 08d1bcb6e4..7ffb985b86 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1024,6 +1024,35 @@ int libxl_device_disk_local_detach(libxl_ctx *ctx, libxl_device_disk *disk)
}
/******************************************************************************/
+int libxl_device_nic_init(libxl_device_nic *nic_info, int devnum)
+{
+ const uint8_t *r;
+ libxl_uuid uuid;
+
+ libxl_uuid_generate(&uuid);
+ r = libxl_uuid_bytearray(&uuid);
+ memset(nic_info, '\0', sizeof(*nic_info));
+
+ nic_info->backend_domid = 0;
+ nic_info->domid = 0;
+ nic_info->devid = devnum;
+ nic_info->mtu = 1492;
+ nic_info->model = strdup("e1000");
+ nic_info->mac[0] = 0x00;
+ nic_info->mac[1] = 0x16;
+ nic_info->mac[2] = 0x3e;
+ nic_info->mac[3] = r[0] & 0x7f;
+ nic_info->mac[4] = r[1];
+ nic_info->mac[5] = r[2];
+ nic_info->ifname = NULL;
+ nic_info->bridge = strdup("xenbr0");
+ if ( asprintf(&nic_info->script, "%s/vif-bridge",
+ libxl_xen_script_dir_path()) < 0 )
+ return ERROR_FAIL;
+ nic_info->nictype = NICTYPE_IOEMU;
+ return 0;
+}
+
int libxl_device_nic_add(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
@@ -1182,6 +1211,34 @@ err:
}
/******************************************************************************/
+void libxl_device_net2_init(libxl_device_net2 *net2_info, int devnum)
+{
+ const uint8_t *r;
+ libxl_uuid uuid;
+
+ libxl_uuid_generate(&uuid);
+ r = libxl_uuid_bytearray(&uuid);
+ memset(net2_info, '\0', sizeof(*net2_info));
+
+ net2_info->devid = devnum;
+ net2_info->front_mac[0] = 0x00;
+ net2_info->front_mac[1] = 0x16;
+ net2_info->front_mac[2] = 0x3e;;
+ net2_info->front_mac[3] = 0x7f & r[0];
+ net2_info->front_mac[4] = r[1];
+ net2_info->front_mac[5] = r[2];
+ net2_info->back_mac[0] = 0x00;
+ net2_info->back_mac[1] = 0x16;
+ net2_info->back_mac[2] = 0x3e;
+ net2_info->back_mac[3] = 0x7f & r[3];
+ net2_info->back_mac[4] = r[4];
+ net2_info->back_mac[5] = r[5];
+ net2_info->back_trusted = 1;
+ net2_info->filter_mac = 1;
+ net2_info->max_bypasses = 5;
+ net2_info->bridge = strdup("xenbr0");
+}
+
int libxl_device_net2_add(libxl_ctx *ctx, uint32_t domid, libxl_device_net2 *net2)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
@@ -1449,6 +1506,12 @@ out:
}
/******************************************************************************/
+void libxl_device_vkb_init(libxl_device_vkb *vkb, int dev_num)
+{
+ memset(vkb, 0x00, sizeof(libxl_device_vkb));
+ vkb->devid = dev_num;
+}
+
int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
@@ -1647,6 +1710,22 @@ out:
}
/******************************************************************************/
+void libxl_device_vfb_init(libxl_device_vfb *vfb, int dev_num)
+{
+ memset(vfb, 0x00, sizeof(libxl_device_vfb));
+ vfb->devid = dev_num;
+ vfb->display = NULL;
+ vfb->xauthority = NULL;
+ vfb->vnc = 1;
+ vfb->vncpasswd = NULL;
+ vfb->vnclisten = strdup("127.0.0.1");
+ vfb->vncdisplay = 0;
+ vfb->vncunused = 1;
+ vfb->keymap = NULL;
+ vfb->sdl = 0;
+ vfb->opengl = 0;
+}
+
int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index ea1ed36aee..cf97b7c3b3 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -280,6 +280,9 @@ int libxl_ctx_set_log(libxl_ctx *ctx, xentoollog_logger*);
int libxl_ctx_postfork(libxl_ctx *ctx);
/* domain related functions */
+void libxl_init_create_info(libxl_domain_create_info *c_info);
+void libxl_init_build_info(libxl_domain_build_info *b_info, libxl_domain_create_info *c_info);
+void libxl_init_dm_info(libxl_device_model_info *dm_info, libxl_domain_create_info *c_info, libxl_domain_build_info *b_info);
typedef int (*libxl_console_ready)(libxl_ctx *ctx, uint32_t domid, void *priv);
int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config *d_config, libxl_console_ready cb, void *priv, uint32_t *domid);
int libxl_domain_create_restore(libxl_ctx *ctx, libxl_domain_config *d_config, libxl_console_ready cb, void *priv, uint32_t *domid, int restore_fd);
@@ -419,16 +422,19 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk);
char * libxl_device_disk_local_attach(libxl_ctx *ctx, libxl_device_disk *disk);
int libxl_device_disk_local_detach(libxl_ctx *ctx, libxl_device_disk *disk);
+int libxl_device_nic_init(libxl_device_nic *nic, int dev_num);
int libxl_device_nic_add(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic);
int libxl_device_nic_del(libxl_ctx *ctx, libxl_device_nic *nic, int wait);
libxl_nicinfo *libxl_list_nics(libxl_ctx *ctx, uint32_t domid, unsigned int *nb);
int libxl_device_console_add(libxl_ctx *ctx, uint32_t domid, libxl_device_console *console);
+void libxl_device_vkb_init(libxl_device_vkb *vkb, int dev_num);
int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb);
int libxl_device_vkb_clean_shutdown(libxl_ctx *ctx, uint32_t domid);
int libxl_device_vkb_hard_shutdown(libxl_ctx *ctx, uint32_t domid);
+void libxl_device_vfb_init(libxl_device_vfb *vfb, int dev_num);
int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb);
int libxl_device_vfb_clean_shutdown(libxl_ctx *ctx, uint32_t domid);
int libxl_device_vfb_hard_shutdown(libxl_ctx *ctx, uint32_t domid);
@@ -526,6 +532,7 @@ int libxl_tmem_shared_auth(libxl_ctx *ctx, uint32_t domid, char* uuid,
int auth);
int libxl_tmem_freeable(libxl_ctx *ctx);
+void libxl_device_net2_init(libxl_device_net2 *net2, int dev_num);
int libxl_device_net2_add(libxl_ctx *ctx, uint32_t domid,
libxl_device_net2 *net2);
libxl_net2info *libxl_device_net2_list(libxl_ctx *ctx, uint32_t domid,
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 43fa6691f5..de706d7ad2 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -60,6 +60,75 @@ void libxl_domain_config_destroy(libxl_domain_config *d_config)
libxl_device_model_info_destroy(&d_config->dm_info);
}
+void libxl_init_create_info(libxl_domain_create_info *c_info)
+{
+ memset(c_info, '\0', sizeof(*c_info));
+ c_info->xsdata = NULL;
+ c_info->platformdata = NULL;
+ c_info->hap = 1;
+ c_info->hvm = 1;
+ c_info->oos = 1;
+ c_info->ssidref = 0;
+ c_info->poolid = 0;
+}
+
+void libxl_init_build_info(libxl_domain_build_info *b_info, libxl_domain_create_info *c_info)
+{
+ memset(b_info, '\0', sizeof(*b_info));
+ b_info->max_vcpus = 1;
+ b_info->max_memkb = 32 * 1024;
+ b_info->target_memkb = b_info->max_memkb;
+ b_info->disable_migrate = 0;
+ b_info->cpuid = NULL;
+ b_info->shadow_memkb = 0;
+ if (c_info->hvm) {
+ b_info->video_memkb = 8 * 1024;
+ b_info->kernel.path = strdup("hvmloader");
+ b_info->hvm = 1;
+ b_info->u.hvm.pae = 1;
+ b_info->u.hvm.apic = 1;
+ b_info->u.hvm.acpi = 1;
+ b_info->u.hvm.nx = 1;
+ b_info->u.hvm.viridian = 0;
+ b_info->u.hvm.hpet = 1;
+ b_info->u.hvm.vpt_align = 1;
+ b_info->u.hvm.timer_mode = 1;
+ } else {
+ b_info->u.pv.slack_memkb = 8 * 1024;
+ }
+}
+
+void libxl_init_dm_info(libxl_device_model_info *dm_info,
+ libxl_domain_create_info *c_info, libxl_domain_build_info *b_info)
+{
+ memset(dm_info, '\0', sizeof(*dm_info));
+
+ libxl_uuid_generate(&dm_info->uuid);
+
+ dm_info->dom_name = strdup(c_info->name);
+ dm_info->device_model = strdup("qemu-dm");
+ dm_info->target_ram = libxl__sizekb_to_mb(b_info->target_memkb);
+ dm_info->videoram = libxl__sizekb_to_mb(b_info->video_memkb);
+ dm_info->apic = b_info->u.hvm.apic;
+ dm_info->vcpus = b_info->max_vcpus;
+ dm_info->vcpu_avail = b_info->cur_vcpus;
+
+ dm_info->stdvga = 0;
+ dm_info->vnc = 1;
+ dm_info->vnclisten = strdup("127.0.0.1");
+ dm_info->vncdisplay = 0;
+ dm_info->vncunused = 1;
+ dm_info->keymap = NULL;
+ dm_info->sdl = 0;
+ dm_info->opengl = 0;
+ dm_info->nographic = 0;
+ dm_info->serial = NULL;
+ dm_info->boot = strdup("cda");
+ dm_info->usb = 0;
+ dm_info->usbdevice = NULL;
+ dm_info->xen_platform_pci = 1;
+}
+
static int init_console_info(libxl_device_console *console, int dev_num, libxl_domain_build_state *state)
{
memset(console, 0x00, sizeof(libxl_device_console));
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index dbe9000a06..e7abbc18ee 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -249,152 +249,6 @@ static void dolog(const char *file, int line, const char *func, char *fmt, ...)
libxl_write_exactly(NULL, logfile, s, rc, NULL, NULL);
}
-static void init_create_info(libxl_domain_create_info *c_info)
-{
- memset(c_info, '\0', sizeof(*c_info));
- c_info->xsdata = NULL;
- c_info->platformdata = NULL;
- c_info->hap = 1;
- c_info->hvm = 1;
- c_info->oos = 1;
- c_info->ssidref = 0;
- c_info->poolid = 0;
-}
-
-static void init_build_info(libxl_domain_build_info *b_info, libxl_domain_create_info *c_info)
-{
- memset(b_info, '\0', sizeof(*b_info));
- b_info->max_vcpus = 1;
- b_info->max_memkb = 32 * 1024;
- b_info->target_memkb = b_info->max_memkb;
- b_info->disable_migrate = 0;
- b_info->cpuid = NULL;
- b_info->shadow_memkb = 0;
- if (c_info->hvm) {
- b_info->video_memkb = 8 * 1024;
- b_info->kernel.path = strdup("hvmloader");
- b_info->hvm = 1;
- b_info->u.hvm.pae = 1;
- b_info->u.hvm.apic = 1;
- b_info->u.hvm.acpi = 1;
- b_info->u.hvm.nx = 1;
- b_info->u.hvm.viridian = 0;
- b_info->u.hvm.hpet = 1;
- b_info->u.hvm.vpt_align = 1;
- b_info->u.hvm.timer_mode = 1;
- } else {
- b_info->u.pv.slack_memkb = 8 * 1024;
- }
-}
-
-static void init_dm_info(libxl_device_model_info *dm_info,
- libxl_domain_create_info *c_info, libxl_domain_build_info *b_info)
-{
- memset(dm_info, '\0', sizeof(*dm_info));
-
- libxl_uuid_generate(&dm_info->uuid);
-
- dm_info->dom_name = strdup(c_info->name);
- dm_info->device_model = strdup("qemu-dm");
- dm_info->target_ram = libxl__sizekb_to_mb(b_info->target_memkb);
- dm_info->videoram = libxl__sizekb_to_mb(b_info->video_memkb);
- dm_info->apic = b_info->u.hvm.apic;
- dm_info->vcpus = b_info->max_vcpus;
- dm_info->vcpu_avail = b_info->cur_vcpus;
-
- dm_info->stdvga = 0;
- dm_info->vnc = 1;
- dm_info->vnclisten = strdup("127.0.0.1");
- dm_info->vncdisplay = 0;
- dm_info->vncunused = 1;
- dm_info->keymap = NULL;
- dm_info->sdl = 0;
- dm_info->opengl = 0;
- dm_info->nographic = 0;
- dm_info->serial = NULL;
- dm_info->boot = strdup("cda");
- dm_info->usb = 0;
- dm_info->usbdevice = NULL;
- dm_info->xen_platform_pci = 1;
-}
-
-static void init_nic_info(libxl_device_nic *nic_info, int devnum)
-{
- const uint8_t *r;
- libxl_uuid uuid;
-
- libxl_uuid_generate(&uuid);
- r = libxl_uuid_bytearray(&uuid);
- memset(nic_info, '\0', sizeof(*nic_info));
-
- nic_info->backend_domid = 0;
- nic_info->domid = 0;
- nic_info->devid = devnum;
- nic_info->mtu = 1492;
- nic_info->model = strdup("e1000");
- nic_info->mac[0] = 0x00;
- nic_info->mac[1] = 0x16;
- nic_info->mac[2] = 0x3e;
- nic_info->mac[3] = r[0] & 0x7f;
- nic_info->mac[4] = r[1];
- nic_info->mac[5] = r[2];
- nic_info->ifname = NULL;
- nic_info->bridge = strdup("xenbr0");
- CHK_ERRNO( asprintf(&nic_info->script, "%s/vif-bridge",
- libxl_xen_script_dir_path()) );
- nic_info->nictype = NICTYPE_IOEMU;
-}
-
-static void init_net2_info(libxl_device_net2 *net2_info, int devnum)
-{
- const uint8_t *r;
- libxl_uuid uuid;
-
- libxl_uuid_generate(&uuid);
- r = libxl_uuid_bytearray(&uuid);
- memset(net2_info, '\0', sizeof(*net2_info));
-
- net2_info->devid = devnum;
- net2_info->front_mac[0] = 0x00;
- net2_info->front_mac[1] = 0x16;
- net2_info->front_mac[2] = 0x3e;;
- net2_info->front_mac[3] = 0x7f & r[0];
- net2_info->front_mac[4] = r[1];
- net2_info->front_mac[5] = r[2];
- net2_info->back_mac[0] = 0x00;
- net2_info->back_mac[1] = 0x16;
- net2_info->back_mac[2] = 0x3e;
- net2_info->back_mac[3] = 0x7f & r[3];
- net2_info->back_mac[4] = r[4];
- net2_info->back_mac[5] = r[5];
- net2_info->back_trusted = 1;
- net2_info->filter_mac = 1;
- net2_info->max_bypasses = 5;
- net2_info->bridge = strdup("xenbr0");
-}
-
-static void init_vfb_info(libxl_device_vfb *vfb, int dev_num)
-{
- memset(vfb, 0x00, sizeof(libxl_device_vfb));
- vfb->devid = dev_num;
- vfb->display = NULL;
- vfb->xauthority = NULL;
- vfb->vnc = 1;
- vfb->vncpasswd = NULL;
- vfb->vnclisten = strdup("127.0.0.1");
- vfb->vncdisplay = 0;
- vfb->vncunused = 1;
- vfb->keymap = NULL;
- vfb->sdl = 0;
- vfb->opengl = 0;
-}
-
-static void init_vkb_info(libxl_device_vkb *vkb, int dev_num)
-{
- memset(vkb, 0x00, sizeof(libxl_device_vkb));
- vkb->devid = dev_num;
-}
-
static void printf_info(int domid,
libxl_domain_config *d_config,
libxl_device_model_info *dm_info)
@@ -727,7 +581,7 @@ static void parse_config_data(const char *configfile_filename_report,
exit(1);
}
- init_create_info(c_info);
+ libxl_init_create_info(c_info);
c_info->hvm = 0;
if (!xlu_cfg_get_string (config, "builder", &buf) &&
@@ -762,7 +616,7 @@ static void parse_config_data(const char *configfile_filename_report,
exit(1);
}
- init_build_info(b_info, c_info);
+ libxl_init_build_info(b_info, c_info);
/* the following is the actual config parsing with overriding values in the structures */
if (!xlu_cfg_get_long (config, "vcpus", &l)) {
@@ -905,7 +759,7 @@ static void parse_config_data(const char *configfile_filename_report,
d_config->vifs = (libxl_device_nic *) realloc(d_config->vifs, sizeof (libxl_device_nic) * (d_config->num_vifs+1));
nic = d_config->vifs + d_config->num_vifs;
- init_nic_info(nic, d_config->num_vifs);
+ CHK_ERRNO( libxl_device_nic_init(nic, d_config->num_vifs) );
p = strtok(buf2, ",");
if (!p)
@@ -982,7 +836,7 @@ skip:
d_config->vif2s = realloc(d_config->vif2s, sizeof (libxl_device_net2) * (d_config->num_vif2s + 1));
net2 = d_config->vif2s + d_config->num_vif2s;
- init_net2_info(net2, d_config->num_vif2s);
+ libxl_device_net2_init(net2, d_config->num_vif2s);
for (p = strtok(buf2, ","); p; p = strtok(NULL, ",")) {
char* val;
@@ -1034,11 +888,11 @@ skip:
d_config->vfbs = (libxl_device_vfb *) realloc(d_config->vfbs, sizeof(libxl_device_vfb) * (d_config->num_vfbs + 1));
vfb = d_config->vfbs + d_config->num_vfbs;
- init_vfb_info(vfb, d_config->num_vfbs);
+ libxl_device_vfb_init(vfb, d_config->num_vfbs);
d_config->vkbs = (libxl_device_vkb *) realloc(d_config->vkbs, sizeof(libxl_device_vkb) * (d_config->num_vkbs + 1));
vkb = d_config->vkbs + d_config->num_vkbs;
- init_vkb_info(vkb, d_config->num_vkbs);
+ libxl_device_vkb_init(vkb, d_config->num_vkbs);
p = strtok(buf2, ",");
if (!p)
@@ -1188,7 +1042,7 @@ skip_vfb:
if (c_info->hvm == 1) {
/* init dm from c and b */
- init_dm_info(dm_info, c_info, b_info);
+ libxl_init_dm_info(dm_info, c_info, b_info);
/* then process config related to dm */
xlu_cfg_replace_string (config, "device_model", &dm_info->device_model);
@@ -4325,7 +4179,7 @@ int main_networkattach(int argc, char **argv)
fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]);
return 1;
}
- init_nic_info(&nic, -1);
+ libxl_device_nic_init(&nic, -1);
for (argv += optind+1, argc -= optind+1; argc > 0; ++argv, --argc) {
if (!strncmp("type=", *argv, 5)) {
if (!strncmp("vif", (*argv) + 5, 4)) {
@@ -4659,7 +4513,7 @@ int main_network2attach(int argc, char **argv)
fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]);
return 1;
}
- init_net2_info(&net2, -1);
+ libxl_device_net2_init(&net2, -1);
for (argv += optind+1, argc -= optind+1; argc > 0; --argc, ++argv) {
if (!strncmp("front_mac=", *argv, 10)) {
tok = strtok((*argv) + 10, ":");