[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v13 07/11] libxl: set correct nic type depending on the guest
Fix the use of nic type, which results in the following for each type of domain: * HVM: let the user choose, if none specified use VIF_IOEMU. * PV: use VIF is none provided, return error if VIF_IOEMU requested. Changes since v11: * Added logging to setdefault. * Catch error on callers. Changes since v10: * Return an error if trying to create a guest with an IOEMU nic. Changes since v9: * Don't force nic type for HVM-stubdom guests. Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxx> --- tools/libxl/libxl.c | 26 ++++++++++++++++++++++---- tools/libxl/libxl_create.c | 4 +++- tools/libxl/libxl_dm.c | 4 +++- tools/libxl/libxl_internal.h | 3 ++- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 26e1fce..7385af6 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2398,7 +2398,8 @@ out: /******************************************************************************/ -int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic) +int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic, + uint32_t domid) { if (!nic->mtu) nic->mtu = 1492; @@ -2428,8 +2429,25 @@ int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic) if ( !nic->script && asprintf(&nic->script, "%s/vif-bridge", libxl__xen_script_dir_path()) < 0 ) return ERROR_FAIL; - if (!nic->nictype) - nic->nictype = LIBXL_NIC_TYPE_VIF_IOEMU; + + switch (libxl__domain_type(gc, domid)) { + case LIBXL_DOMAIN_TYPE_HVM: + if (!nic->nictype) + nic->nictype = LIBXL_NIC_TYPE_VIF_IOEMU; + break; + case LIBXL_DOMAIN_TYPE_PV: + if (nic->nictype == LIBXL_NIC_TYPE_VIF_IOEMU) { + LOG(ERROR, "trying to create PV guest with an emulated interface"); + return ERROR_INVAL; + } + nic->nictype = LIBXL_NIC_TYPE_VIF; + break; + case LIBXL_DOMAIN_TYPE_INVALID: + return ERROR_FAIL; + default: + abort(); + } + return 0; } @@ -2457,7 +2475,7 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t domid, char *dompath, **l; unsigned int nb, rc; - rc = libxl__device_nic_setdefault(gc, nic); + rc = libxl__device_nic_setdefault(gc, nic, domid); if (rc) goto out; front = flexarray_make(16, 1); diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 9330012..1cacfad 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -941,7 +941,9 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__ao_devices *aodevs, * called libxl_device_nic_add at this point, but qemu needs * the nic information to be complete. */ - libxl__device_nic_setdefault(gc, &d_config->nics[i]); + ret = libxl__device_nic_setdefault(gc, &d_config->nics[i], domid); + if (ret) + goto error_out; } switch (d_config->c_info.type) { case LIBXL_DOMAIN_TYPE_HVM: diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index dec7c19..606cc29 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -898,7 +898,9 @@ static void spawn_stub_launch_dm(libxl__egc *egc, * called libxl_device_nic_add at this point, but qemu needs * the nic information to be complete. */ - libxl__device_nic_setdefault(gc, &dm_config->nics[i]); + ret = libxl__device_nic_setdefault(gc, &dm_config->nics[i], dm_domid); + if (ret) + goto out; } ret = libxl_device_vfb_add(ctx, dm_domid, &dm_config->vfbs[0]); if (ret) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 453e59dc..986cd6d 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -933,7 +933,8 @@ _hidden int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info); _hidden int libxl__device_disk_setdefault(libxl__gc *gc, libxl_device_disk *disk); -_hidden int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic); +_hidden int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic, + uint32_t domid); _hidden int libxl__device_vfb_setdefault(libxl__gc *gc, libxl_device_vfb *vfb); _hidden int libxl__device_vkb_setdefault(libxl__gc *gc, libxl_device_vkb *vkb); _hidden int libxl__device_pci_setdefault(libxl__gc *gc, libxl_device_pci *pci); -- 1.7.7.5 (Apple Git-26) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |