69 lines
2.9 KiB
Diff
69 lines
2.9 KiB
Diff
|
|
From 3b5a24866bf5fae387de70be8cb65e29b31a3a6d Mon Sep 17 00:00:00 2001
|
||
|
|
From: liumengqiu <liumengqiu1@huawei.com>
|
||
|
|
Date: Thu, 11 Aug 2022 20:04:09 +0800
|
||
|
|
Subject: [PATCH 10/22] virNetDevOpenvswitchUpdateVlan: fix vlan tag update
|
||
|
|
error
|
||
|
|
|
||
|
|
We try to update vlan tag by running virsh update-device command,
|
||
|
|
libvirtd will report ovs-vsctl arguments error. Vlan tag update
|
||
|
|
funtion does't consider the xml with no vlan configured circumstances.
|
||
|
|
|
||
|
|
The steps to reproduce the problem:
|
||
|
|
1 define and start domain with its vlan configured as:
|
||
|
|
<interface type='bridge'>
|
||
|
|
<mac address='52:54:00:9e:bb:ac'/>
|
||
|
|
<source bridge='ovs-br0'/>
|
||
|
|
<vlan>
|
||
|
|
<tag id='10'/>
|
||
|
|
</vlan>
|
||
|
|
<virtualport type='openvswitch'>
|
||
|
|
</virtualport>
|
||
|
|
<target dev='vnet4.0'/>
|
||
|
|
<model type='virtio'/>
|
||
|
|
<driver name='vhost'/>
|
||
|
|
</interface>
|
||
|
|
2 define and run virsh update-device command with no vlan configured as:
|
||
|
|
<interface type='bridge'>
|
||
|
|
<mac address='52:54:00:9e:bb:ac'/>
|
||
|
|
<source bridge='ovs-br0'/>
|
||
|
|
<virtualport type='openvswitch'>
|
||
|
|
</virtualport>
|
||
|
|
<target dev='vnet4.0'/>
|
||
|
|
<model type='virtio'/>
|
||
|
|
<driver name='vhost'/>
|
||
|
|
</interface>
|
||
|
|
#virsh update-device dom-id novlan.xml
|
||
|
|
3 virsh command returned error, and we got an error in libvirtd.log:
|
||
|
|
error : virCommandWait:2584 : internal error: exit status 1: ovs-vsctl: 'set' command requires at least 3 arguments
|
||
|
|
. Child process (ovs-vsctl --timeout=5 -- --if-exists clear Port vnet4.0 tag -- --if-exists clear Port vnet4.0 trunk
|
||
|
|
-- --if-exists clear Port vnet4.0 vlan_mode -- --if-exists set Port vnet4.0) unexpected
|
||
|
|
error : virNetDevOpenvswitchUpdateVlan:540 : internal error: Unable to set vlan configuration on port vnet4.0
|
||
|
|
|
||
|
|
Signed-off-by: Tu Qiang <tu.qiang35@zte.com.cn>
|
||
|
|
Signed-off-by: Yi Wang <wang.yi59@zte.com.cn>
|
||
|
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||
|
|
---
|
||
|
|
src/util/virnetdevopenvswitch.c | 6 ++++--
|
||
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
|
||
|
|
index f961777411..5de8c7f5cf 100644
|
||
|
|
--- a/src/util/virnetdevopenvswitch.c
|
||
|
|
+++ b/src/util/virnetdevopenvswitch.c
|
||
|
|
@@ -547,8 +547,10 @@ int virNetDevOpenvswitchUpdateVlan(const char *ifname,
|
||
|
|
virCommandAddArgList(cmd,
|
||
|
|
"--", "--if-exists", "clear", "Port", ifname, "tag",
|
||
|
|
"--", "--if-exists", "clear", "Port", ifname, "trunk",
|
||
|
|
- "--", "--if-exists", "clear", "Port", ifname, "vlan_mode",
|
||
|
|
- "--", "--if-exists", "set", "Port", ifname, NULL);
|
||
|
|
+ "--", "--if-exists", "clear", "Port", ifname, "vlan_mode", NULL);
|
||
|
|
+
|
||
|
|
+ if (virtVlan && virtVlan->nTags > 0)
|
||
|
|
+ virCommandAddArgList(cmd, "--", "--if-exists", "set", "Port", ifname, NULL);
|
||
|
|
|
||
|
|
if (virNetDevOpenvswitchConstructVlans(cmd, virtVlan) < 0)
|
||
|
|
return -1;
|
||
|
|
--
|
||
|
|
2.33.0
|
||
|
|
|