]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: clarify what is returned for actual bandwidth and vlan
authorLaine Stump <laine@laine.org>
Mon, 17 Feb 2014 12:36:18 +0000 (14:36 +0200)
committerLaine Stump <laine@laine.org>
Tue, 25 Feb 2014 13:55:19 +0000 (15:55 +0200)
In practice, if a virDomainNetDef has a virDomainActualNetDef
allocated, the ActualNetDef will *always* contain the bandwidth and
vlan data from the NetDef (unless there was also a portgroup involved
- see networkAllocateActualDevice()).

However, virDomainNetGetActual(Bandwidth|Vlan)() were coded to make it
appear as if it might be possible to have a valid bandwidth/vlan in
the NetDef, but a NULL in the ActualNetDef. Believing this un-truth
could lead to writing unnecessarily defensive code when dealing with
the virDomainGetActual*() functions, so this patch makes it more
obvious:

   If there is an ActualNetDef, it will always have a copy of the
   various appropriate bits from its parent NetDef, and the
   virDomainGetActual* function will *always* return the data from the
   ActualNetDef, not from the NetDef.

The reason for this effective-NOP patch is that a subsequent patch to
change virDomainNetDefFormat will rely on the above rule.

src/conf/domain_conf.c

index 064a40e366cdb8102ab76aaaff54581538c72fbb..e239102e2f2c08df741f97e66ac955e0a07627c4 100644 (file)
@@ -18638,8 +18638,11 @@ virDomainNetGetActualVirtPortProfile(virDomainNetDefPtr iface)
 virNetDevBandwidthPtr
 virDomainNetGetActualBandwidth(virDomainNetDefPtr iface)
 {
+    /* if there is an ActualNetDef, *always* return
+     * its bandwidth rather than the NetDef's bandwidth.
+     */
     if (iface->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
-        iface->data.network.actual && iface->data.network.actual->bandwidth) {
+        iface->data.network.actual) {
         return iface->data.network.actual->bandwidth;
     }
     return iface->bandwidth;
@@ -18648,13 +18651,18 @@ virDomainNetGetActualBandwidth(virDomainNetDefPtr iface)
 virNetDevVlanPtr
 virDomainNetGetActualVlan(virDomainNetDefPtr iface)
 {
+    virNetDevVlanPtr vlan = &iface->vlan;
+
+    /* if there is an ActualNetDef, *always* return
+     * its vlan rather than the NetDef's vlan.
+     */
     if (iface->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
-        iface->data.network.actual &&
-        iface->data.network.actual->vlan.nTags > 0)
-        return &iface->data.network.actual->vlan;
-    if (iface->vlan.nTags > 0)
-        return &iface->vlan;
-    return 0;
+        iface->data.network.actual)
+        vlan = &iface->data.network.actual->vlan;
+
+    if (vlan->nTags > 0)
+        return vlan;
+    return NULL;
 }
 
 /* Return listens[i] from the appropriate union for the graphics