On Aug 30, 2012, at 10:23 PM, Daniel Veillard wrote:
On Thu, Aug 30, 2012 at 04:38:06PM -0400, Kyle Mestery wrote:
> The introduction of the new VLAN code, along with the fix
> from 5e465df6be8bcb00f0b4bff831e91f4042fae272, caused the
> addition of OVS ports to fail with the following message:
>
> ovs-vsctl: 00002|vsctl|ERR|: missing column name
>
> This fix takes into account the VLAN arguments are optional,
> and correctly sets up the command line to run the "ovs-vsctl"
> command to add ports to the OVS bridge.
>
> Signed-off-by: Kyle Mestery <kmestery(a)cisco.com>
> CC: Eric Blake <eblake(a)redhat.com>
> ---
> V2:
> - Use virBufferUse() to check if a buffer is in use. Found
> by Eric Blake.
> ---
> src/util/virnetdevopenvswitch.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
> index 00271a0..764f478 100644
> --- a/src/util/virnetdevopenvswitch.c
> +++ b/src/util/virnetdevopenvswitch.c
> @@ -104,9 +104,15 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char
*ifname,
> }
>
> cmd = virCommandNew(OVSVSCTL);
> +
> + virCommandAddArgList(cmd, "--", "--may-exist",
"add-port",
> + brname, ifname, NULL);
> +
> + if (virBufferUse(&buf) != 0)
> + virCommandAddArgList(cmd, virBufferCurrentContent(&buf), NULL);
> +
> if (ovsport->profileID[0] == '\0') {
> - virCommandAddArgList(cmd, "--", "--may-exist",
"add-port",
> - brname, ifname, virBufferCurrentContent(&buf),
> + virCommandAddArgList(cmd,
> "--", "set", "Interface",
ifname, attachedmac_ex_id,
> "--", "set", "Interface",
ifname, ifaceid_ex_id,
> "--", "set", "Interface",
ifname, vmid_ex_id,
> @@ -114,8 +120,7 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char
*ifname,
> "external-ids:iface-status=active",
> NULL);
> } else {
> - virCommandAddArgList(cmd, "--", "--may-exist",
"add-port",
> - brname, ifname, virBufferCurrentContent(&buf),
> + virCommandAddArgList(cmd,
> "--", "set", "Interface",
ifname, attachedmac_ex_id,
> "--", "set", "Interface",
ifname, ifaceid_ex_id,
> "--", "set", "Interface",
ifname, vmid_ex_id,
Okay, ACK,
pushed, thanks !
Still there is something which looks wrong, if we don't have a profileID
why do we end up with "" instead of NULL ? I'm seeing various tests for
profileID[0] over conf/*.c and util/*.c , and that sounds wrong to me.
if there is no data, store NULL ! Then test for profileID instead of
profileID[0]. Then there is no risk of a crash because abscence of data
led to NULL instead of an empty string, the code is more resilient !
I expect a followup patch cleaning this up, but after 0.10.1 ...
thanks !
Thanks Daniel, I'll work on the followup patch today.
Kyle
Daniel