]> xenbits.xensource.com Git - libvirt.git/commitdiff
openvswitch: Delete port if it exists while adding a new one
authorChunhe Li <lichunhe@huawei.com>
Mon, 14 Jul 2014 10:37:50 +0000 (12:37 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 14 Jul 2014 10:49:30 +0000 (12:49 +0200)
If the openvswitch service is stopped, and is followed by destroying a
VM, the openvswitch bridge translates into a state where it doesn't
recover the port configuration. While it successfully fetches data
from the internal DB, since the corresponding virtual interface does
not exists anymore the whole recovery process fails leaving restarted
VM with inability to connect to the bridge. The following set of
commands will trigger the problem:

virsh start vm
service openvswitch-switch stop
virsh destroy vm
service openvswitch-switch start
virsh start vm

Signed-off-by: Chunhe Li <lichunhe@huawei.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/util/virnetdevopenvswitch.c

index 9bcbfb19f41d5763eb3b8b25019766b3b56c7979..8ea1def86c58568ec7d775a63c925a258fe57558 100644 (file)
@@ -84,8 +84,8 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
 
     cmd = virCommandNew(OVSVSCTL);
 
-    virCommandAddArgList(cmd, "--timeout=5", "--", "--may-exist", "add-port",
-                        brname, ifname, NULL);
+    virCommandAddArgList(cmd, "--timeout=5", "--", "--if-exists", "del-port",
+                         ifname, "--", "add-port", brname, ifname, NULL);
 
     if (virtVlan && virtVlan->nTags > 0) {