[libvirt] [PATCH 3/5] net: use virDomainNICModelType{From|To}String functions
John Ferlan
jferlan at redhat.com
Mon Jan 14 14:25:44 UTC 2013
oops - one more ...
On 01/13/2013 10:34 AM, Guannan Ren wrote:
> ---
> 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;
Should this be?
enum virDomainNICModel model;
for consistency.
> 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
>
More information about the libvir-list
mailing list