[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[Libvir] [PATCH]1/3 OpenVZ driver : Cleanups
- From: Shuveb Hussain <shuveb binarykarma com>
- To: LibVirt-Dev <Libvir-list redhat com>
- Cc:
- Subject: [Libvir] [PATCH]1/3 OpenVZ driver : Cleanups
- Date: Thu, 19 Jul 2007 18:27:00 +0530
Cleanup patch, also adds utils.c and utils.h to Makefile.am
--
Shuveb Hussain
Unix is very user friendly. It is just a
little choosy about who its friends are
http://www.binarykarma.com
Index: include/libvirt/virterror.h
===================================================================
RCS file: /data/cvs/libvirt/include/libvirt/virterror.h,v
retrieving revision 1.27
diff -u -a -r1.27 virterror.h
--- include/libvirt/virterror.h 13 Jul 2007 08:26:57 -0000 1.27
+++ include/libvirt/virterror.h 19 Jul 2007 12:48:04 -0000
@@ -51,6 +51,7 @@
VIR_FROM_NET, /* Error when operating on a network */
VIR_FROM_TEST, /* Error from test driver */
VIR_FROM_REMOTE, /* Error from remote driver */
+ VIR_FROM_OPENVZ, /* Error from OpenVZ driver */
} virErrorDomain;
Index: src/Makefile.am
===================================================================
RCS file: /data/cvs/libvirt/src/Makefile.am,v
retrieving revision 1.45
diff -u -a -r1.45 Makefile.am
--- src/Makefile.am 17 Jul 2007 13:27:26 -0000 1.45
+++ src/Makefile.am 19 Jul 2007 12:48:04 -0000
@@ -49,7 +49,8 @@
qemu_driver.c qemu_driver.h \
qemu_conf.c qemu_conf.h \
openvz_conf.c openvz_conf.h \
- openvz_driver.c openvz_driver.h
+ openvz_driver.c openvz_driver.h \
+ util.c util.h
SERVER_SOURCES = \
../qemud/protocol.h ../qemud/protocol.c \
Index: src/openvz_conf.c
===================================================================
RCS file: /data/cvs/libvirt/src/openvz_conf.c,v
retrieving revision 1.2
diff -u -a -r1.2 openvz_conf.c
--- src/openvz_conf.c 17 Jul 2007 14:40:26 -0000 1.2
+++ src/openvz_conf.c 19 Jul 2007 12:48:04 -0000
@@ -57,7 +57,8 @@
errmsg, info);
}
-struct openvz_vm *openvzFindVMByID(const struct openvz_driver *driver, int id) {
+struct openvz_vm
+*openvzFindVMByID(const struct openvz_driver *driver, int id) {
struct openvz_vm *vm = driver->vms;
while (vm) {
@@ -69,7 +70,8 @@
return NULL;
}
-struct openvz_vm *openvzFindVMByUUID(const struct openvz_driver *driver,
+struct openvz_vm
+*openvzFindVMByUUID(const struct openvz_driver *driver,
const unsigned char *uuid) {
struct openvz_vm *vm = driver->vms;
@@ -82,7 +84,8 @@
return NULL;
}
-struct openvz_vm *openvzFindVMByName(const struct openvz_driver *driver,
+struct openvz_vm
+*openvzFindVMByName(const struct openvz_driver *driver,
const char *name) {
struct openvz_vm *vm = driver->vms;
@@ -96,7 +99,8 @@
}
/* Free all memory associated with a struct openvz_vm object */
-void openvzFreeVMDef(struct openvz_vm_def *def) {
+void
+openvzFreeVMDef(struct openvz_vm_def *def) {
struct ovz_quota *quota = def->fs.quota;
struct ovz_ip *ip = def->net.ips;
struct ovz_ns *ns = def->net.ns;
@@ -124,8 +128,9 @@
* Parses a libvirt XML definition of a guest, and populates the
* the openvz_vm struct with matching data about the guests config
*/
-static struct openvz_vm_def *openvzParseXML(virConnectPtr conn,
- xmlDocPtr xml) {
+static struct openvz_vm_def
+*openvzParseXML(virConnectPtr conn,
+ xmlDocPtr xml) {
xmlNodePtr root = NULL;
xmlChar *prop = NULL;
xmlXPathContextPtr ctxt = NULL;
@@ -249,7 +254,7 @@
FILE *fp;
int veid, ret;
char status[16];
- char uuidstr[(VIR_UUID_BUFLEN * 2) + 1];
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
struct openvz_vm *vm;
struct openvz_vm **pnext;
struct openvz_driver *driver;
@@ -296,15 +301,9 @@
snprintf(vmdef->name, OPENVZ_NAME_MAX, "%i", veid);
openvzGetVPSUUID(veid, uuidstr);
- ret = sscanf(uuidstr, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- (unsigned int *)&vmdef->uuid[0], (unsigned int *)&vmdef->uuid[1], (unsigned int *)&vmdef->uuid[2],
- (unsigned int *)&vmdef->uuid[3], (unsigned int *)&vmdef->uuid[4], (unsigned int *)&vmdef->uuid[5],
- (unsigned int *)&vmdef->uuid[6], (unsigned int *)&vmdef->uuid[7], (unsigned int *)&vmdef->uuid[8],
- (unsigned int *)&vmdef->uuid[9], (unsigned int *)&vmdef->uuid[10], (unsigned int *)&vmdef->uuid[11],
- (unsigned int *)&vmdef->uuid[12], (unsigned int *)&vmdef->uuid[13], (unsigned int *)&vmdef->uuid[14],
- (unsigned int *)&vmdef->uuid[15]);
+ ret = virUUIDParse(uuidstr, vmdef->uuid);
- if(ret != 16) {
+ if(ret == -1) {
error(conn, VIR_ERR_INTERNAL_ERROR, "UUID in config file malformed");
return NULL;
}
@@ -315,7 +314,8 @@
return vm;
}
-char *openvzLocateConfDir(void)
+static char
+*openvzLocateConfDir(void)
{
const char *conf_dir_list[] = {"/etc/vz/conf", "/usr/local/etc/conf", NULL};
int i=0;
@@ -330,9 +330,8 @@
}
/* Richard Steven's classic readline() function */
-
-static
-int openvz_readline(int fd, char *ptr, int maxlen)
+int
+openvz_readline(int fd, char *ptr, int maxlen)
{
int n, rc;
char c;
@@ -356,7 +355,8 @@
return n;
}
-int openvzGetVPSUUID(int vpsid, char *uuidbuf)
+static int
+openvzGetVPSUUID(int vpsid, char *uuidbuf)
{
char conf_file[PATH_MAX];
char line[1024];
@@ -385,7 +385,7 @@
sscanf(line, "%s %s\n", iden, uuid);
if(!strcmp(iden, "#UUID:")) {
- strncpy(uuidbuf, uuid, (VIR_UUID_BUFLEN * 2) +1);
+ strncpy(uuidbuf, uuid, VIR_UUID_STRING_BUFLEN);
break;
}
}
@@ -396,10 +396,11 @@
* assign if not present.
*/
-int openvzSetUUID(int vpsid)
+static int
+openvzSetUUID(int vpsid)
{
char conf_file[PATH_MAX];
- char uuid[(VIR_UUID_BUFLEN * 2) + 1];
+ char uuid[VIR_UUID_STRING_BUFLEN];
unsigned char new_uuid[VIR_UUID_BUFLEN];
char *conf_dir;
int fd, ret, i;
@@ -418,7 +419,7 @@
if(uuid[0] == (int)NULL) {
virUUIDGenerate(new_uuid);
- bzero(uuid, (VIR_UUID_BUFLEN * 2) + 1);
+ bzero(uuid, VIR_UUID_STRING_BUFLEN);
for(i = 0; i < VIR_UUID_BUFLEN; i ++)
sprintf(uuid + (i * 2), "%02x", (unsigned char)new_uuid[i]);
Index: src/openvz_conf.h
===================================================================
RCS file: /data/cvs/libvirt/src/openvz_conf.h,v
retrieving revision 1.1
diff -u -a -r1.1 openvz_conf.h
--- src/openvz_conf.h 17 Jul 2007 13:27:26 -0000 1.1
+++ src/openvz_conf.h 19 Jul 2007 12:48:04 -0000
@@ -94,8 +94,8 @@
struct openvz_vm *next;
};
-char *openvzLocateConfDir(void);
-int readline(int fd, char *ptr, int maxlen);
+static char *openvzLocateConfDir(void);
+int openvz_readline(int fd, char *ptr, int maxlen);
static void error (virConnectPtr conn, virErrorNumber code, const char *info);
struct openvz_vm *openvzFindVMByID(const struct openvz_driver *driver, int id);
struct openvz_vm *openvzFindVMByUUID(const struct openvz_driver *driver,
@@ -108,7 +108,7 @@
const char *displayName);
struct openvz_vm *openvzGetVPSInfo(virConnectPtr conn);
void openvzGenerateUUID(unsigned char *uuid);
-int openvzGetVPSUUID(int vpsid, char *uuidbuf);
-int openvzSetUUID(int vpsid);
+static int openvzGetVPSUUID(int vpsid, char *uuidbuf);
+static int openvzSetUUID(int vpsid);
int openvzAssignUUIDs(void);
#endif /* OPENVZ_CONF_H */
Index: src/openvz_driver.c
===================================================================
RCS file: /data/cvs/libvirt/src/openvz_driver.c,v
retrieving revision 1.1
diff -u -a -r1.1 openvz_driver.c
--- src/openvz_driver.c 17 Jul 2007 13:27:26 -0000 1.1
+++ src/openvz_driver.c 19 Jul 2007 12:48:04 -0000
@@ -52,6 +52,7 @@
#include "event.h"
#include "buf.h"
+#include "util.h"
#include "openvz_driver.h"
#include "openvz_conf.h"
@@ -284,6 +285,11 @@
if (strcmp(name, "openvz:///system"))
return VIR_DRV_OPEN_DECLINED;
}
+ /* See if we are running an OpenVZ enabled kernel */
+ if(access("/proc/vz/veinfo", F_OK) == -1 ||
+ access("/proc/user_beancounters", F_OK) == -1) {
+ return VIR_DRV_OPEN_DECLINED;
+ }
conn->privateData = &ovz_driver;
@@ -323,19 +329,25 @@
static int openvzListDomains(virConnectPtr conn, int *ids, int nids) {
int got = 0;
- int veid;
- FILE *fp;
+ int veid, pid, outfd, errfd;
+ int ret;
+ char buf[32];
+ const char *cmd[] = {VZLIST, "-ovpsid", "-H" , NULL};
- if((fp = popen(VZLIST " -o vpsid -H 2> /dev/null", "r")) == NULL){
- error(conn, VIR_ERR_INTERNAL_ERROR, "Could not popen " VZLIST);
+ ret = virExec(conn, (char **)cmd, &pid, &outfd, &errfd);
+ if(ret == -1) {
+ error(conn, VIR_ERR_INTERNAL_ERROR, "Could not exec " VZLIST);
return (int)NULL;
}
- while(!(feof(fp)) && got < nids){
- fscanf(fp, "%d\n", &veid);
+ while(got < nids){
+ ret = openvz_readline(outfd, buf, 32);
+ if(!ret) break;
+ sscanf(buf, "%d", &veid);
ids[got] = veid;
got ++;
}
+ waitpid(pid, NULL, 0);
return got;
}
@@ -347,23 +359,27 @@
static int openvzListDefinedDomains(virConnectPtr conn,
char **const names, int nnames) {
int got = 0;
- FILE *fp;
- int veid;
+ int veid, pid, outfd, errfd, ret;
char vpsname[OPENVZ_NAME_MAX];
+ char buf[32];
+ const char *cmd[] = {VZLIST, "-ovpsid", "-H", NULL};
/* the -S options lists only stopped domains */
- if((fp = popen(VZLIST " -S -o vpsid -H 2> /dev/null", "r")) == NULL){
- error(conn, VIR_ERR_INTERNAL_ERROR, "Could not popen " VZLIST);
+ ret = virExec(conn, (char **)cmd, &pid, &outfd, &errfd);
+ if(ret == -1) {
+ error(conn, VIR_ERR_INTERNAL_ERROR, "Could not exec " VZLIST);
return (int)NULL;
}
- while(!(feof(fp)) && got < nnames){
- fscanf(fp, "%d\n", &veid);
+ while(got < nnames){
+ ret = openvz_readline(outfd, buf, 32);
+ if(!ret) break;
+ sscanf(buf, "%d\n", &veid);
sprintf(vpsname, "%d", veid);
names[got] = strdup(vpsname);
got ++;
}
-
+ waitpid(pid, NULL, 0);
return got;
}
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]