]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Partially convert to net model enum
authorCole Robinson <crobinso@redhat.com>
Fri, 18 Jan 2019 14:59:02 +0000 (09:59 -0500)
committerCole Robinson <crobinso@redhat.com>
Tue, 16 Apr 2019 17:11:08 +0000 (13:11 -0400)
This converts the qemu driver to the net model enum, for all
the model values that we have hardcoded for various checks,
which adds e1000e, virtio-transitional, virtio-non-transitional,
usb-net, spapr-vlan, lan9118, smc91c111

Because the qemu driver has historically also allowed the raw
model string onto the qemu command line, this isn't a full
conversion. Unwinding that will require more thought. However
for all new driver code we should be adding explicit enum
values for any model name we have special handling for.

Remove the now unused virDomainNetStreqModelString

Acked-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
src/qemu/qemu_domain_address.c

index b17427634fe2d71f397dc2b8623d2660c77dcba9..7146b6fa15caa8d16ee61102c420f224997a1992 100644 (file)
@@ -513,6 +513,13 @@ VIR_ENUM_IMPL(virDomainNetModel,
               "rtl8139",
               "virtio",
               "e1000",
+              "e1000e",
+              "virtio-transitional",
+              "virtio-non-transitional",
+              "usb-net",
+              "spapr-vlan",
+              "lan9118",
+              "scm91c111",
 );
 
 VIR_ENUM_IMPL(virDomainNetBackend,
@@ -29515,15 +29522,6 @@ virDomainNetSetModelString(virDomainNetDefPtr net,
     return 0;
 }
 
-int
-virDomainNetStreqModelString(const virDomainNetDef *net,
-                             const char *model)
-{
-    if (net->model)
-        return net->model == virDomainNetModelTypeFromString(model);
-    return STREQ_NULLABLE(net->modelstr, model);
-}
-
 int
 virDomainNetStrcaseeqModelString(const virDomainNetDef *net,
                                  const char *model)
@@ -29536,9 +29534,9 @@ virDomainNetStrcaseeqModelString(const virDomainNetDef *net,
 bool
 virDomainNetIsVirtioModel(const virDomainNetDef *net)
 {
-    return (virDomainNetStreqModelString(net, "virtio") ||
-            virDomainNetStreqModelString(net, "virtio-transitional") ||
-            virDomainNetStreqModelString(net, "virtio-non-transitional"));
+    return (net->model == VIR_DOMAIN_NET_MODEL_VIRTIO ||
+            net->model == VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL ||
+            net->model == VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL);
 }
 
 
index b73dbf11daffc4db3d1622f3197a79bbd4d055e2..fc16e1c7d63fb709cf00f323fc9b0afd14c9807e 100644 (file)
@@ -846,6 +846,13 @@ typedef enum {
     VIR_DOMAIN_NET_MODEL_RTL8139,
     VIR_DOMAIN_NET_MODEL_VIRTIO,
     VIR_DOMAIN_NET_MODEL_E1000,
+    VIR_DOMAIN_NET_MODEL_E1000E,
+    VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL,
+    VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL,
+    VIR_DOMAIN_NET_MODEL_USB_NET,
+    VIR_DOMAIN_NET_MODEL_SPAPR_VLAN,
+    VIR_DOMAIN_NET_MODEL_LAN9118,
+    VIR_DOMAIN_NET_MODEL_SMC91C111,
 
     VIR_DOMAIN_NET_MODEL_LAST
 } virDomainNetModelType;
@@ -3126,8 +3133,6 @@ bool virDomainNetGetActualTrustGuestRxFilters(virDomainNetDefPtr iface);
 const char *virDomainNetGetModelString(const virDomainNetDef *net);
 int virDomainNetSetModelString(virDomainNetDefPtr et,
                                const char *model);
-int virDomainNetStreqModelString(const virDomainNetDef *net,
-                                 const char *model);
 int virDomainNetStrcaseeqModelString(const virDomainNetDef *net,
                                      const char *model);
 bool virDomainNetIsVirtioModel(const virDomainNetDef *net);
index 6ccec70749913d518e548f01f26a8e8c42df2ecb..fc403a0ffd8f226264d548c954cb53a0c3acecbe 100644 (file)
@@ -488,7 +488,6 @@ virDomainNetResolveActualType;
 virDomainNetSetDeviceImpl;
 virDomainNetSetModelString;
 virDomainNetStrcaseeqModelString;
-virDomainNetStreqModelString;
 virDomainNetTypeFromString;
 virDomainNetTypeSharesHostView;
 virDomainNetTypeToString;
index 2f0858e7009537f5a586688433e58e41ca78a53b..9df7b7e8eafecc234ff81be19327881d142f523e 100644 (file)
@@ -489,10 +489,8 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
             break;
 
         case VIR_DOMAIN_DEVICE_NET:
-            has_tmodel = virDomainNetStreqModelString(device.data.net,
-                                                      "virtio-transitional");
-            has_ntmodel = virDomainNetStreqModelString(device.data.net,
-                                                       "virtio-non-transitional");
+            has_tmodel = device.data.net->model == VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL;
+            has_ntmodel = device.data.net->model == VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL;
             break;
 
         case VIR_DOMAIN_DEVICE_HOSTDEV:
index 61b25abe5f6e8ec7e531b59a7f3b8c3575822cc9..0882bf8fd05a6f2d0a422bebc388b74830f3bd66 100644 (file)
@@ -6224,49 +6224,49 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
  * is NULL this function may return NULL if the default model depends on the
  * capabilities.
  */
-static const char *
+static int
 qemuDomainDefaultNetModel(const virDomainDef *def,
                           virQEMUCapsPtr qemuCaps)
 {
     if (ARCH_IS_S390(def->os.arch))
-        return "virtio";
+        return VIR_DOMAIN_NET_MODEL_VIRTIO;
 
     if (def->os.arch == VIR_ARCH_ARMV6L ||
         def->os.arch == VIR_ARCH_ARMV7L ||
         def->os.arch == VIR_ARCH_AARCH64) {
         if (STREQ(def->os.machine, "versatilepb"))
-            return "smc91c111";
+            return VIR_DOMAIN_NET_MODEL_SMC91C111;
 
         if (qemuDomainIsARMVirt(def))
-            return "virtio";
+            return VIR_DOMAIN_NET_MODEL_VIRTIO;
 
         /* Incomplete. vexpress (and a few others) use this, but not all
          * arm boards */
-        return "lan9118";
+        return VIR_DOMAIN_NET_MODEL_LAN9118;
     }
 
     /* virtio is a sensible default for RISC-V virt guests */
     if (qemuDomainIsRISCVVirt(def))
-        return "virtio";
+        return VIR_DOMAIN_NET_MODEL_VIRTIO;
 
     /* In all other cases the model depends on the capabilities. If they were
      * not provided don't report any default. */
     if (!qemuCaps)
-        return NULL;
+        return VIR_DOMAIN_NET_MODEL_UNKNOWN;
 
     /* Try several network devices in turn; each of these devices is
      * less likely be supported out-of-the-box by the guest operating
      * system than the previous one */
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_RTL8139))
-        return "rtl8139";
+        return VIR_DOMAIN_NET_MODEL_RTL8139;
     else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_E1000))
-        return "e1000";
+        return VIR_DOMAIN_NET_MODEL_E1000;
     else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_NET))
-        return "virtio";
+        return VIR_DOMAIN_NET_MODEL_VIRTIO;
 
     /* We've had no luck detecting support for any network device,
      * but we have to return something: might as well be rtl8139 */
-    return "rtl8139";
+    return VIR_DOMAIN_NET_MODEL_RTL8139;
 }
 
 
@@ -6722,11 +6722,8 @@ qemuDomainDeviceNetDefPostParse(virDomainNetDefPtr net,
                                 virQEMUCapsPtr qemuCaps)
 {
     if (net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
-        !virDomainNetGetModelString(net)) {
-        if (virDomainNetSetModelString(net,
-                       qemuDomainDefaultNetModel(def, qemuCaps)) < 0)
-            return -1;
-    }
+        !virDomainNetGetModelString(net))
+        net->model = qemuDomainDefaultNetModel(def, qemuCaps);
 
     return 0;
 }
index 289e056ebad41374562c9dbffed42a54a4bc1d8e..4b99e8ca93c87787faa227135f0bf6b4a1c35f2f 100644 (file)
@@ -230,7 +230,7 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def)
     for (i = 0; i < def->nnets; i++) {
         virDomainNetDefPtr net = def->nets[i];
 
-        if (virDomainNetStreqModelString(net, "spapr-vlan"))
+        if (net->model == VIR_DOMAIN_NET_MODEL_SPAPR_VLAN)
             net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
 
         if (qemuDomainAssignSpaprVIOAddress(def, &net->info, VIO_ADDR_NET) < 0)
@@ -699,18 +699,18 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
          * addresses for other hostdev devices.
          */
         if (net->type == VIR_DOMAIN_NET_TYPE_HOSTDEV ||
-            virDomainNetStreqModelString(net, "usb-net")) {
+            net->model == VIR_DOMAIN_NET_MODEL_USB_NET) {
             return 0;
         }
 
-        if (virDomainNetStreqModelString(net, "virtio") ||
-            virDomainNetStreqModelString(net, "virtio-non-transitional"))
+        if (net->model == VIR_DOMAIN_NET_MODEL_VIRTIO ||
+            net->model == VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL)
             return virtioFlags;
 
-        if (virDomainNetStreqModelString(net, "virtio-transitional"))
+        if (net->model == VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL)
             return pciFlags;
 
-        if (virDomainNetStreqModelString(net, "e1000e"))
+        if (net->model == VIR_DOMAIN_NET_MODEL_E1000E)
             return pcieFlags;
 
         return pciFlags;