[libvirt] [PATCH] network: don't allow multiple default portgroups
Laine Stump
laine at laine.org
Sun Oct 21 15:06:07 UTC 2012
On 10/20/2012 12:49 PM, Eric Blake wrote:
> On 10/20/2012 02:45 AM, Laine Stump wrote:
>> This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=868483
>>
>> virNetworkUpdate, virNetworkDefine, and virNetworkCreate all three
>> allow network definitions to contain multiple <portgroup> elements
>> with default='yes'. Only a single default portgroup should be allowed
>> for each network.
>>
>> This patch updates networkValidate() (called by both
>> virNetworkCreate() and virNetworkDefine()) and
>> virNetworkDefUpdatePortGroup (called by virNetworkUpdate() to not
>> allow multiple default portgroups.
>> ---
>> src/conf/network_conf.c | 35 ++++++++++++++++++++++++++---------
>> src/network/bridge_driver.c | 12 ++++++++++++
>> 2 files changed, 38 insertions(+), 9 deletions(-)
> ACK.
>
>> @@ -2787,11 +2790,25 @@ virNetworkDefUpdatePortGroup(virNetworkDefPtr def,
>> goto cleanup;
>> }
>>
>> + /* if there is already a different default, we can't make this
>> + * one the default.
>> + */
>> + if (command != VIR_NETWORK_UPDATE_COMMAND_DELETE &&
>> + portgroup.isDefault &&
>> + foundDefault >= 0 && foundDefault != foundName) {
>> + virReportError(VIR_ERR_OPERATION_INVALID,
>> + _("a different portgroup entry in "
>> + "network '%s' is already set as the default. "
>> + "Only one default is allowed."),
> How does one change which group is the default? Via back-to-back change
> commands, the first which removes the default flag from the old name,
> and the second adding the new name with the new default flag? I think
> that works, so it doesn't stop this patch.
>
> However, I wonder if you want a followup patch to add a flag to the
> overall API that allows one to forcefully change the default to the new
> element by also removing the default flag from the old group, all in one
> API call. It would be needed if there is ever a reason where having a
> window with no default is unacceptable, so atomically moving the default
> in one API call becomes important to close such a window, but I'm having
> a hard time convincing myself whether we even care about such a race.
Good point, and a good proposal for how to close it. I'm also not sure
if that will ever be important (to date I've only found two people who
actually even *use* portgroups so far (one of them just yesterday), but
we should probably do that just to avoid future surprises.
I'm pushing this patch as-is, though, and adding your suggestion to my
to-do list.
More information about the libvir-list
mailing list