[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [ PATCH ] fix multiple veth problem for OpenVZ



Dear all

This is to fix multiple veth problem.
NETIF setting was overwritten after first CT because any CT could not be found by character name.


---
 src/openvz/openvz_conf.c   |   38 ++++++++++++++++++++++++++++++++++++++
 src/openvz/openvz_conf.h   |    1 +
 src/openvz/openvz_driver.c |    2 +-
 3 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 43bbaf2..9fb9f7e 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -948,3 +948,41 @@ static int openvzAssignUUIDs(void)
     VIR_FREE(conf_dir);
     return 0;
 }
+
+
+/*
+ * Return CTID from name
+ *
+ */
+
+int openvzGetVEID(char *name) {
+
+    char cmd[64];
+    int veid;
+    FILE *fp;
+
+    strcpy( cmd, VZLIST );
+    strcat( cmd, " " );
+    strcat( cmd, name );
+    strcat( cmd, " -ovpsid -H" );
+
+    if ((fp = popen(cmd, "r")) == NULL) {
+        openvzError(NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("popen failed"));
+        return -1;
+    }
+
+    if (fscanf(fp, "%d\n", &veid ) != 1) {
+        if (feof(fp))
+            return -1;
+
+        openvzError(NULL, VIR_ERR_INTERNAL_ERROR,
+                    "%s", _("Failed to parse vzlist output"));
+        goto cleanup;
+    }
+
+    return veid;
+
+ cleanup:
+    fclose(fp);
+    return -1;
+}
diff --git a/src/openvz/openvz_conf.h b/src/openvz/openvz_conf.h
index 00e18b4..518c267 100644
--- a/src/openvz/openvz_conf.h
+++ b/src/openvz/openvz_conf.h
@@ -66,5 +66,6 @@ void openvzFreeDriver(struct openvz_driver *driver);
 int strtoI(const char *str);
 int openvzSetDefinedUUID(int vpsid, unsigned char *uuid);
 unsigned int openvzGetNodeCPUs(void);
+int openvzGetVEID(char *name);
 
 #endif /* OPENVZ_CONF_H */
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 196fd8c..879b5d0 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -667,7 +667,7 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
     if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) {
         virBuffer buf = VIR_BUFFER_INITIALIZER;
         char *dev_name_ve;
-        int veid = strtoI(vpsid);
+        int veid = openvzGetVEID(vpsid);
 
         //--netif_add ifname[,mac,host_ifname,host_mac]
         ADD_ARG_LIT("--netif_add") ;
-- 
1.5.2.2

-----
Yuji Nishida
nishidy nict go jp



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]