conf: clarify what is returned for actual bandwidth and vlan

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.
This commit is contained in:
Laine Stump 2014-02-17 14:36:18 +02:00
parent 60f70542f9
commit 6d4ffae4fc
1 changed files with 15 additions and 7 deletions

View File

@ -18638,8 +18638,11 @@ virDomainNetGetActualVirtPortProfile(virDomainNetDefPtr iface)
virNetDevBandwidthPtr virNetDevBandwidthPtr
virDomainNetGetActualBandwidth(virDomainNetDefPtr iface) 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 && 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->data.network.actual->bandwidth;
} }
return iface->bandwidth; return iface->bandwidth;
@ -18648,13 +18651,18 @@ virDomainNetGetActualBandwidth(virDomainNetDefPtr iface)
virNetDevVlanPtr virNetDevVlanPtr
virDomainNetGetActualVlan(virDomainNetDefPtr iface) 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 && if (iface->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
iface->data.network.actual && iface->data.network.actual)
iface->data.network.actual->vlan.nTags > 0) vlan = &iface->data.network.actual->vlan;
return &iface->data.network.actual->vlan;
if (iface->vlan.nTags > 0) if (vlan->nTags > 0)
return &iface->vlan; return vlan;
return 0; return NULL;
} }
/* Return listens[i] from the appropriate union for the graphics /* Return listens[i] from the appropriate union for the graphics