--- src/conf/domain_conf.c | 32 ++++++++-------------- src/conf/domain_conf.h | 2 +- src/libvirt_private.syms | 2 ++ src/libxl/libxl_conf.c | 5 ++-- src/parallels/parallels_driver.c | 2 +- src/qemu/qemu_command.c | 26 +++++++++--------- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_hotplug.c | 10 ++++--- src/qemu/qemu_process.c | 14 +++++----- src/vbox/vbox_tmpl.c | 57 +++++++++++++++++++--------------------- src/vmx/vmx.c | 31 +++++++++++----------- src/xenxs/xen_sxpr.c | 23 ++++++++-------- src/xenxs/xen_xm.c | 21 ++++++++------- 13 files changed, 111 insertions(+), 116 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 6e6ad85..fb71f64 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1130,8 +1130,6 @@ void virDomainNetDefFree(virDomainNetDefPtr def) if (!def) return; - VIR_FREE(def->model); - switch (def->type) { case VIR_DOMAIN_NET_TYPE_ETHERNET: VIR_FREE(def->data.ethernet.dev); @@ -4991,9 +4989,6 @@ error: return ret; } -#define NET_MODEL_CHARS \ - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ091234567890_-" - /* Parse the XML definition for a network interface * @param node XML nodeset to parse for net definition * @return 0 on success, -1 on failure @@ -5362,23 +5357,17 @@ virDomainNetDefParseXML(virCapsPtr caps, ifname = NULL; } - /* NIC model (see -net nic,model=?). We only check that it looks - * reasonable, not that it is a supported NIC type. FWIW kvm - * supports these types as of April 2008: - * i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000 virtio - * QEMU PPC64 supports spapr-vlan - */ if (model != NULL) { - if (strspn(model, NET_MODEL_CHARS) < strlen(model)) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Model name contains invalid characters")); + int m; + if ((m = virDomainNICModelTypeFromString(model)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unknown NIC model has been specified")); goto error; } - def->model = model; - model = NULL; + def->model = m; } - if (def->model && STREQ(def->model, "virtio")) { + if (def->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) { if (backend != NULL) { int name; if ((name = virDomainNetBackendTypeFromString(backend)) < 0 || @@ -11010,10 +10999,11 @@ static bool virDomainNetDefCheckABIStability(virDomainNetDefPtr src, goto cleanup; } - if (STRNEQ_NULLABLE(src->model, dst->model)) { + if (src->model != dst->model) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Target network card model %s does not match source %s"), - NULLSTR(dst->model), NULLSTR(src->model)); + virDomainNICModelTypeToString(dst->model), + virDomainNICModelTypeToString(src->model)); goto cleanup; } @@ -12958,8 +12948,8 @@ virDomainNetDefFormat(virBufferPtr buf, } if (def->model) { virBufferEscapeString(buf, "<model type='%s'/>\n", - def->model); - if (STREQ(def->model, "virtio") && + virDomainNICModelTypeToString(def->model)); + if ((def->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) && (def->driver.virtio.name || def->driver.virtio.txmode)) { virBufferAddLit(buf, "<driver"); if (def->driver.virtio.name) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 661cc0f..a5ce119 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -878,7 +878,7 @@ struct _virDomainActualNetDef { struct _virDomainNetDef { enum virDomainNetType type; virMacAddr mac; - char *model; + int model; union { struct { enum virDomainNetBackendType name; /* which driver backend to use */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 7be58ee..4ce855e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -465,6 +465,8 @@ virDomainNetGetActualVlan; virDomainNetInsert; virDomainNetRemove; virDomainNetTypeToString; +virDomainNICModelTypeFromString; +virDomainNICModelTypeToString; virDomainNostateReasonTypeFromString; virDomainNostateReasonTypeToString; virDomainNumatuneMemModeTypeFromString; diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 2705e65..79de22d 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -637,8 +637,9 @@ libxlMakeNic(virDomainNetDefPtr l_nic, libxl_device_nic *x_nic) virMacAddrGetRaw(&l_nic->mac, x_nic->mac); - if (l_nic->model && !STREQ(l_nic->model, "netfront")) { - if ((x_nic->model = strdup(l_nic->model)) == NULL) { + if (l_nic->model && l_nic->model != VIR_DOMAIN_NIC_MODEL_NETFRONT) { + const char *model = virDomainNICModelTypeToString(l_nic->model); + if ((x_nic->model = strdup(model)) == NULL) { virReportOOMError(); return -1; } diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c index 6f33080..6a8714b 100644 --- a/src/parallels/parallels_driver.c +++ b/src/parallels/parallels_driver.c @@ -1815,7 +1815,7 @@ static int parallelsApplyIfaceParams(parallelsDomObjPtr pdom, return -1; } - if (!STREQ_NULLABLE(oldnet->model, newnet->model)) { + if (oldnet->model != newnet->model) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", _("Changing network device model is not supported")); return -1; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 981c692..9ba27a1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -153,7 +153,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def, int vnet_hdr = 0; if (qemuCapsGet(caps, QEMU_CAPS_VNET_HDR) && - net->model && STREQ(net->model, "virtio")) + net->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) vnet_hdr = 1; rc = virNetDevMacVLanCreateWithVPortProfile( @@ -261,7 +261,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def, } if (qemuCapsGet(caps, QEMU_CAPS_VNET_HDR) && - net->model && STREQ(net->model, "virtio")) { + net->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) { tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_HDR; } @@ -339,7 +339,7 @@ qemuOpenVhostNet(virDomainDefPtr def, } /* If the nic model isn't virtio, don't try to open. */ - if (!(net->model && STREQ(net->model, "virtio"))) { + if (net->model != VIR_DOMAIN_NIC_MODEL_VIRTIO) { if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is only supported for " @@ -808,10 +808,10 @@ qemuDomainPrimeS390VirtioDevices(virDomainDefPtr def, for (i = 0; i < def->nnets ; i++) { if ((def->os.arch == VIR_ARCH_S390 || def->os.arch == VIR_ARCH_S390X) && - def->nets[i]->model == NULL) { - def->nets[i]->model = strdup("virtio"); + !def->nets[i]->model) { + def->nets[i]->model = VIR_DOMAIN_NIC_MODEL_VIRTIO; } - if (STREQ(def->nets[i]->model,"virtio") && + if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_VIRTIO && def->nets[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { def->nets[i]->info.type = type; } @@ -898,8 +898,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def, /* Default values match QEMU. See spapr_(llan|vscsi|vty).c */ for (i = 0 ; i < def->nnets; i++) { - if (def->nets[i]->model && - STREQ(def->nets[i]->model, "spapr-vlan")) + if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_SPAPR_VLAN) def->nets[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO; if (qemuAssignSpaprVIOAddress(def, &def->nets[i]->info, 0x1000ul) < 0) @@ -3149,7 +3148,7 @@ qemuBuildNicStr(virDomainNetDefPtr net, net->mac.addr[4], net->mac.addr[5], vlan, (net->model ? ",model=" : ""), - (net->model ? net->model : ""), + (net->model ? virDomainNICModelTypeToString(net->model) : ""), (net->info.alias ? ",name=" : ""), (net->info.alias ? net->info.alias : "")) < 0) { virReportOOMError(); @@ -3172,7 +3171,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, if (!net->model) { nic = "rtl8139"; - } else if (STREQ(net->model, "virtio")) { + } else if (net->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) { if (net->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) { nic = "virtio-net-s390"; @@ -3181,7 +3180,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, } usingVirtio = true; } else { - nic = net->model; + nic = virDomainNICModelTypeToString(net->model); } virBufferAdd(&buf, nic, strlen(nic)); @@ -7829,8 +7828,9 @@ qemuParseCommandLineNet(virCapsPtr caps, goto cleanup; } } else if (STREQ(keywords[i], "model")) { - def->model = values[i]; - values[i] = NULL; + if ((def->model = virDomainNICModelTypeFromString(values[i])) < 0) + goto cleanup; + VIR_FREE(values[i]); } else if (STREQ(keywords[i], "vhost")) { if ((values[i] == NULL) || STREQ(values[i], "on")) { def->driver.virtio.name = VIR_DOMAIN_NET_BACKEND_TYPE_VHOST; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 39175f4..7ef523a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5350,7 +5350,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, for (i = 0 ; i < def->nnets ; i++) { virDomainNetDefPtr net = def->nets[i]; int bootIndex = net->info.bootIndex; - char *model = net->model; + int model = net->model; if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) { int actualType = virDomainNetGetActualType(net); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 19172e1..8ec3e55 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1462,15 +1462,17 @@ qemuDomainChangeNet(virQEMUDriverPtr driver, goto cleanup; } - if (STRNEQ_NULLABLE(olddev->model, newdev->model)) { + if (olddev->model != newdev->model) { virReportError(VIR_ERR_NO_SUPPORT, _("cannot modify network device model from %s to %s"), - olddev->model ? olddev->model : "(default)", - newdev->model ? newdev->model : "(default)"); + olddev->model ? virDomainNICModelTypeToString(olddev->model) : + "(default)", + newdev->model ? virDomainNICModelTypeToString(newdev->model) : + "(default)"); goto cleanup; } - if (olddev->model && STREQ(olddev->model, "virtio") && + if (olddev->model == VIR_DOMAIN_NIC_MODEL_VIRTIO && (olddev->driver.virtio.name != newdev->driver.virtio.name || olddev->driver.virtio.txmode != newdev->driver.virtio.txmode || olddev->driver.virtio.ioeventfd != newdev->driver.virtio.ioeventfd || diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 320c0c6..97d5cf8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2314,24 +2314,24 @@ qemuProcessGetPCINetVendorProduct(virDomainNetDefPtr def, if (!def->model) return -1; - if (STREQ(def->model, "ne2k_pci")) { + if (def->model == VIR_DOMAIN_NIC_MODEL_NE2K_PCI) { *vendor = QEMU_PCI_VENDOR_REALTEK; *product = QEMU_PCI_PRODUCT_NIC_NE2K; - } else if (STREQ(def->model, "pcnet")) { + } else if (def->model == VIR_DOMAIN_NIC_MODEL_PCNET) { *vendor = QEMU_PCI_VENDOR_AMD; *product = QEMU_PCI_PRODUCT_NIC_PCNET; - } else if (STREQ(def->model, "rtl8139")) { + } else if (def->model == VIR_DOMAIN_NIC_MODEL_RTL8139) { *vendor = QEMU_PCI_VENDOR_REALTEK; *product = QEMU_PCI_PRODUCT_NIC_RTL8139; - } else if (STREQ(def->model, "e1000")) { + } else if (def->model == VIR_DOMAIN_NIC_MODEL_E1000) { *vendor = QEMU_PCI_VENDOR_INTEL; *product = QEMU_PCI_PRODUCT_NIC_E1000; - } else if (STREQ(def->model, "virtio")) { + } else if (def->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) { *vendor = QEMU_PCI_VENDOR_REDHAT; *product = QEMU_PCI_PRODUCT_NIC_VIRTIO; } else { VIR_INFO("Unexpected NIC model %s, cannot get PCI address", - def->model); + virDomainNICModelTypeToString(def->model)); return -1; } return 0; @@ -2498,7 +2498,7 @@ qemuProcessDetectPCIAddresses(virDomainObjPtr vm, addrs, naddrs) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot find PCI address for %s NIC"), - vm->def->nets[i]->model); + virDomainNICModelTypeToString(vm->def->nets[i]->model)); return -1; } } diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 2b3fa25..c7147f6 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -3004,21 +3004,20 @@ sharedFoldersCleanup: } adapter->vtbl->GetAdapterType(adapter, &adapterType); - if (adapterType == NetworkAdapterType_Am79C970A) { - def->nets[netAdpIncCnt]->model = strdup("Am79C970A"); - } else if (adapterType == NetworkAdapterType_Am79C973) { - def->nets[netAdpIncCnt]->model = strdup("Am79C973"); - } else if (adapterType == NetworkAdapterType_I82540EM) { - def->nets[netAdpIncCnt]->model = strdup("82540EM"); - } else if (adapterType == NetworkAdapterType_I82545EM) { - def->nets[netAdpIncCnt]->model = strdup("82545EM"); - } else if (adapterType == NetworkAdapterType_I82543GC) { - def->nets[netAdpIncCnt]->model = strdup("82543GC"); + if (adapterType == NetworkAdapterType_Am79C970A) + def->nets[netAdpIncCnt]->model = VIR_DOMAIN_NIC_MODEL_AM79C970A; + else if (adapterType == NetworkAdapterType_Am79C973) + def->nets[netAdpIncCnt]->model = VIR_DOMAIN_NIC_MODEL_AM79C973; + else if (adapterType == NetworkAdapterType_I82540EM) + def->nets[netAdpIncCnt]->model = VIR_DOMAIN_NIC_MODEL_82540EM; + else if (adapterType == NetworkAdapterType_I82545EM) + def->nets[netAdpIncCnt]->model = VIR_DOMAIN_NIC_MODEL_82545EM; + else if (adapterType == NetworkAdapterType_I82543GC) + def->nets[netAdpIncCnt]->model = VIR_DOMAIN_NIC_MODEL_82543GC; #if VBOX_API_VERSION >= 3001 - } else if (adapterType == NetworkAdapterType_Virtio) { - def->nets[netAdpIncCnt]->model = strdup("virtio"); + else if (adapterType == NetworkAdapterType_Virtio) + def->nets[netAdpIncCnt]->model = VIR_DOMAIN_NIC_MODEL_VIRTIO; #endif /* VBOX_API_VERSION >= 3001 */ - } adapter->vtbl->GetMACAddress(adapter, &MACAddressUtf16); VBOX_UTF16_TO_UTF8(MACAddressUtf16, &MACAddress); @@ -4394,7 +4393,8 @@ vboxAttachNetwork(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine) macaddrvbox[VIR_MAC_STRING_BUFLEN - 6] = '\0'; VIR_DEBUG("NIC(%d): Type: %d", i, def->nets[i]->type); - VIR_DEBUG("NIC(%d): Model: %s", i, def->nets[i]->model); + VIR_DEBUG("NIC(%d): Model: %s", i, + virDomainNICModelTypeToString(def->nets[i]->model)); VIR_DEBUG("NIC(%d): Mac: %s", i, macaddr); VIR_DEBUG("NIC(%d): ifname: %s", i, def->nets[i]->ifname); if (def->nets[i]->type == VIR_DOMAIN_NET_TYPE_NETWORK) { @@ -4415,25 +4415,22 @@ vboxAttachNetwork(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine) adapter->vtbl->SetEnabled(adapter, 1); - if (def->nets[i]->model) { - if (STRCASEEQ(def->nets[i]->model , "Am79C970A")) { - adapterType = NetworkAdapterType_Am79C970A; - } else if (STRCASEEQ(def->nets[i]->model , "Am79C973")) { - adapterType = NetworkAdapterType_Am79C973; - } else if (STRCASEEQ(def->nets[i]->model , "82540EM")) { - adapterType = NetworkAdapterType_I82540EM; - } else if (STRCASEEQ(def->nets[i]->model , "82545EM")) { - adapterType = NetworkAdapterType_I82545EM; - } else if (STRCASEEQ(def->nets[i]->model , "82543GC")) { - adapterType = NetworkAdapterType_I82543GC; + if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_AM79C970A) + adapterType = NetworkAdapterType_Am79C970A; + else if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_AM79C973) + adapterType = NetworkAdapterType_Am79C973; + else if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_82540EM) + adapterType = NetworkAdapterType_I82540EM; + else if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_82545EM) + adapterType = NetworkAdapterType_I82545EM; + else if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_82543GC) + adapterType = NetworkAdapterType_I82543GC; #if VBOX_API_VERSION >= 3001 - } else if (STRCASEEQ(def->nets[i]->model , "virtio")) { - adapterType = NetworkAdapterType_Virtio; + else if (def->nets[i]->model == VIR_DOMAIN_NIC_MODEL_VIRTIO) + adapterType = NetworkAdapterType_Virtio; #endif /* VBOX_API_VERSION >= 3001 */ - } - } else { + else adapterType = NetworkAdapterType_Am79C973; - } adapter->vtbl->SetAdapterType(adapter, adapterType); diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index c604bd2..0409b0b 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2597,10 +2597,10 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def) /* Setup virDomainNetDef */ if (connectionType == NULL || STRCASEEQ(connectionType, "bridged")) { (*def)->type = VIR_DOMAIN_NET_TYPE_BRIDGE; - (*def)->model = virtualDev; + (*def)->model = virDomainNICModelTypeFromString(virtualDev); (*def)->data.bridge.brname = networkName; - virtualDev = NULL; + VIR_FREE(virtualDev); networkName = NULL; } else if (STRCASEEQ(connectionType, "hostonly")) { /* FIXME */ @@ -2610,16 +2610,16 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def) goto cleanup; } else if (STRCASEEQ(connectionType, "nat")) { (*def)->type = VIR_DOMAIN_NET_TYPE_USER; - (*def)->model = virtualDev; + (*def)->model = virDomainNICModelTypeFromString(virtualDev); - virtualDev = NULL; + VIR_FREE(virtualDev); } else if (STRCASEEQ(connectionType, "custom")) { (*def)->type = VIR_DOMAIN_NET_TYPE_BRIDGE; - (*def)->model = virtualDev; + (*def)->model = virDomainNICModelTypeFromString(virtualDev); (*def)->data.bridge.brname = networkName; (*def)->ifname = vnet; - virtualDev = NULL; + VIR_FREE(virtualDev); networkName = NULL; vnet = NULL; } else { @@ -3697,27 +3697,28 @@ virVMXFormatEthernet(virDomainNetDefPtr def, int controller, virBufferAsprintf(buffer, "ethernet%d.present = \"true\"\n", controller); /* def:model -> vmx:virtualDev, vmx:features */ - if (def->model != NULL) { - if (STRCASENEQ(def->model, "vlance") && - STRCASENEQ(def->model, "vmxnet") && - STRCASENEQ(def->model, "vmxnet2") && - STRCASENEQ(def->model, "vmxnet3") && - STRCASENEQ(def->model, "e1000")) { + if (def->model) { + const char * model = virDomainNICModelTypeToString(def->model); + if (STRCASENEQ(model, "vlance") && + STRCASENEQ(model, "vmxnet") && + STRCASENEQ(model, "vmxnet2") && + STRCASENEQ(model, "vmxnet3") && + STRCASENEQ(model, "e1000")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Expecting domain XML entry 'devices/interface/model' " "to be 'vlance' or 'vmxnet' or 'vmxnet2' or 'vmxnet3' " - "or 'e1000' but found '%s'"), def->model); + "or 'e1000' but found '%s'"), model); return -1; } - if (STRCASEEQ(def->model, "vmxnet2")) { + if (STRCASEEQ(model, "vmxnet2")) { virBufferAsprintf(buffer, "ethernet%d.virtualDev = \"vmxnet\"\n", controller); virBufferAsprintf(buffer, "ethernet%d.features = \"15\"\n", controller); } else { virBufferAsprintf(buffer, "ethernet%d.virtualDev = \"%s\"\n", - controller, def->model); + controller, model); } } diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c index 83b7c74..0bf69a7 100644 --- a/src/xenxs/xen_sxpr.c +++ b/src/xenxs/xen_sxpr.c @@ -591,7 +591,7 @@ xenParseSxprNets(virDomainDefPtr def, if (tmp && !(net->data.ethernet.ipaddr = strdup(tmp))) goto no_memory; - } + } tmp = sexpr_node(node, "device/vif/vifname"); /* If vifname is specified in xend config, include it in net @@ -615,13 +615,12 @@ xenParseSxprNets(virDomainDefPtr def, } if (model && - !(net->model = strdup(model))) - goto no_memory; + (net->model = virDomainNICModelTypeFromString(model)) < 0) + goto cleanup; if (!model && type && - STREQ(type, "netfront") && - !(net->model = strdup("netfront"))) - goto no_memory; + STREQ(type, "netfront")) + net->model = VIR_DOMAIN_NIC_MODEL_NETFRONT; if (VIR_REALLOC_N(def->nets, def->nnets + 1) < 0) goto no_memory; @@ -2002,16 +2001,18 @@ xenFormatSxprNet(virConnectPtr conn, virBufferEscapeSexpr(buf, "(vifname '%s')", def->ifname); if (!hvm) { - if (def->model != NULL) - virBufferEscapeSexpr(buf, "(model '%s')", def->model); + if (def->model) + virBufferEscapeSexpr(buf, "(model '%s')", + virDomainNICModelTypeToString(def->model)); } else { - if (def->model != NULL && STREQ(def->model, "netfront")) { + if (def->model == VIR_DOMAIN_NIC_MODEL_NETFRONT) { virBufferAddLit(buf, "(type netfront)"); } else { - if (def->model != NULL) { - virBufferEscapeSexpr(buf, "(model '%s')", def->model); + if (def->model) { + virBufferEscapeSexpr(buf, "(model '%s')", + virDomainNICModelTypeToString(def->model)); } /* * apparently (type ioemu) breaks paravirt drivers on HVM so skip diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c index 73ba06b..f308542 100644 --- a/src/xenxs/xen_xm.c +++ b/src/xenxs/xen_xm.c @@ -779,13 +779,12 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, goto no_memory; if (model[0] && - !(net->model = strdup(model))) - goto no_memory; + (net->model = virDomainNICModelTypeFromString(model)) < 0) + goto cleanup; if (!model[0] && type[0] && - STREQ(type, "netfront") && - !(net->model = strdup("netfront"))) - goto no_memory; + STREQ(type, "netfront")) + net->model = VIR_DOMAIN_NIC_MODEL_NETFRONT; if (vifname[0] && !(net->ifname = strdup(vifname))) @@ -1387,16 +1386,18 @@ static int xenFormatXMNet(virConnectPtr conn, } if (!hvm) { - if (net->model != NULL) - virBufferAsprintf(&buf, ",model=%s", net->model); + if (net->model) + virBufferAsprintf(&buf, ",model=%s", + virDomainNICModelTypeToString(net->model)); } else { - if (net->model != NULL && STREQ(net->model, "netfront")) { + if (net->model == VIR_DOMAIN_NIC_MODEL_NETFRONT) { virBufferAddLit(&buf, ",type=netfront"); } else { - if (net->model != NULL) - virBufferAsprintf(&buf, ",model=%s", net->model); + if (net->model) + virBufferAsprintf(&buf, ",model=%s", + virDomainNICModelTypeToString(net->model)); /* * apparently type ioemu breaks paravirt drivers on HVM so skip this -- 1.7.11.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list