Gianni Tedesco
2011-Jan-11 15:47 UTC
[Xen-devel] [PATCH, v2]: xl: move domain struct init functions to libxl
Changes since v1: - Include nic,net2,vkb,vfb init functions --- 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> diff -r efe2d3ea22ae tools/libxl/libxl.c --- a/tools/libxl/libxl.c Tue Jan 11 15:30:48 2011 +0000 +++ b/tools/libxl/libxl.c Tue Jan 11 15:40:45 2011 +0000 @@ -1024,6 +1024,35 @@ int libxl_device_disk_local_detach(libxl } /******************************************************************************/ +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 -r efe2d3ea22ae tools/libxl/libxl.h --- a/tools/libxl/libxl.h Tue Jan 11 15:30:48 2011 +0000 +++ b/tools/libxl/libxl.h Tue Jan 11 15:40:45 2011 +0000 @@ -280,6 +280,9 @@ int libxl_ctx_set_log(libxl_ctx *ctx, xe 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, u 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 *ct 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 -r efe2d3ea22ae tools/libxl/libxl_create.c --- a/tools/libxl/libxl_create.c Tue Jan 11 15:30:48 2011 +0000 +++ b/tools/libxl/libxl_create.c Tue Jan 11 15:40:45 2011 +0000 @@ -60,6 +60,75 @@ void libxl_domain_config_destroy(libxl_d 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 -r efe2d3ea22ae tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Tue Jan 11 15:30:48 2011 +0000 +++ b/tools/libxl/xl_cmdimpl.c Tue Jan 11 15:40:45 2011 +0000 @@ -249,152 +249,6 @@ static void dolog(const char *file, int 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) @@ -726,7 +580,7 @@ static void parse_config_data(const char 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) && @@ -761,7 +615,7 @@ static void parse_config_data(const char 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)) { @@ -904,7 +758,7 @@ static void parse_config_data(const char 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) @@ -981,7 +835,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; @@ -1033,11 +887,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) @@ -1187,7 +1041,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); @@ -4322,7 +4176,7 @@ int main_networkattach(int argc, char ** 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)) { @@ -4656,7 +4510,7 @@ int main_network2attach(int argc, char * 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, ":"); _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Maybe Matching Threads
- [PATCH, v2]: xl: Implement per-API-call garbage-collection lifetime
- [PATCH V2] libxl/xl: implement support for guest iooprt and irq permissions
- [PATCH] add xl ocaml bindings
- Bug#444000: [ijc@hellion.org.uk: move core dumps to /var/lib/xen/dump]
- Bug#706233: move core dumps to /var/lib/xen/dump