summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2008-09-23 04:31:13 +0000
committerHisham Muhammad <hisham@gobolinux.org>2008-09-23 04:31:13 +0000
commita5dfaa23932a6bac1463dda677a51cfc37928ba4 (patch)
tree1f6d3c800ca4fda2db0eb2baaa994517bd71c486
parent6beb27d803abfca36fe731c575151cd1891b5b04 (diff)
Add Linux-VServer support,
contributed by Jonathan Sambrook and Benedikt Bohm
-rw-r--r--ChangeLog5
-rw-r--r--Process.c19
-rw-r--r--Process.h6
-rw-r--r--ProcessList.c34
-rw-r--r--configure.ac11
5 files changed, 75 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d025d3ad..31b80fae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
+What's new in version 0.8.1
+
+* Linux-VServer support
+ (thanks to Jonathan Sambrook and Benedikt Bohm)
+
What's new in version 0.8
* Ability to change sort column with the mouse by
diff --git a/Process.c b/Process.c
index b6e64b86..89a80c33 100644
--- a/Process.c
+++ b/Process.c
@@ -49,6 +49,9 @@ typedef enum ProcessField_ {
#ifdef HAVE_OPENVZ
VEID, VPID,
#endif
+ #ifdef HAVE_VSERVER
+ VXID,
+ #endif
#ifdef HAVE_TASKSTATS
RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE,
#endif
@@ -124,6 +127,9 @@ typedef struct Process_ {
unsigned int veid;
unsigned int vpid;
#endif
+ #ifdef HAVE_VSERVER
+ unsigned int vxid;
+ #endif
#ifdef HAVE_TASKSTATS
unsigned long long io_rchar;
unsigned long long io_wchar;
@@ -159,6 +165,9 @@ char *Process_fieldNames[] = {
#ifdef HAVE_OPENVZ
"VEID", "VPID",
#endif
+#ifdef HAVE_VSERVER
+ "VXID",
+#endif
#ifdef HAVE_TASKSTATS
"RCHAR", "WCHAR", "SYSCR", "SYSCW", "RBYTES", "WBYTES", "CNCLWB",
"IO_READ_RATE", "IO_WRITE_RATE", "IO_RATE",
@@ -178,6 +187,9 @@ char *Process_fieldTitles[] = {
#ifdef HAVE_OPENVZ
" VEID ", " VPID ",
#endif
+#ifdef HAVE_VSERVER
+ " VXID ",
+#endif
#ifdef HAVE_TASKSTATS
" RD_CHAR ", " WR_CHAR ", " RD_SYSC ", " WR_SYSC ", " IO_RD ", " IO_WR ", " IO_CANCEL ",
" IORR ", " IOWR ", " IO ",
@@ -388,6 +400,9 @@ static void Process_writeField(Process* this, RichString* str, ProcessField fiel
case VEID: snprintf(buffer, n, "%5u ", this->veid); break;
case VPID: snprintf(buffer, n, "%5u ", this->vpid); break;
#endif
+ #ifdef HAVE_VSERVER
+ case VXID: snprintf(buffer, n, "%5u ", this->vxid); break;
+ #endif
#ifdef HAVE_TASKSTATS
case RCHAR: snprintf(buffer, n, "%10llu ", this->io_rchar); break;
case WCHAR: snprintf(buffer, n, "%10llu ", this->io_wchar); break;
@@ -556,6 +571,10 @@ int Process_compare(const void* v1, const void* v2) {
case VPID:
return (p1->vpid - p2->vpid);
#endif
+ #ifdef HAVE_VSERVER
+ case VXID:
+ return (p1->vxid - p2->vxid);
+ #endif
#ifdef HAVE_TASKSTATS
case RCHAR: diff = p2->io_rchar - p1->io_rchar; goto test_diff;
case WCHAR: diff = p2->io_wchar - p1->io_wchar; goto test_diff;
diff --git a/Process.h b/Process.h
index 204ccfbf..3cac7311 100644
--- a/Process.h
+++ b/Process.h
@@ -51,6 +51,9 @@ typedef enum ProcessField_ {
#ifdef HAVE_OPENVZ
VEID, VPID,
#endif
+ #ifdef HAVE_VSERVER
+ VXID,
+ #endif
#ifdef HAVE_TASKSTATS
RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE,
#endif
@@ -126,6 +129,9 @@ typedef struct Process_ {
unsigned int veid;
unsigned int vpid;
#endif
+ #ifdef HAVE_VSERVER
+ unsigned int vxid;
+ #endif
#ifdef HAVE_TASKSTATS
unsigned long long io_rchar;
unsigned long long io_wchar;
diff --git a/ProcessList.c b/ProcessList.c
index a32e6ec6..13a7adcd 100644
--- a/ProcessList.c
+++ b/ProcessList.c
@@ -639,6 +639,40 @@ static bool ProcessList_processEntries(ProcessList* this, char* dirname, Process
fclose(status);
}
#endif
+
+ #ifdef HAVE_VSERVER
+ snprintf(statusfilename, MAX_NAME, "%s/%s/status", dirname, name);
+ status = ProcessList_fopen(this, statusfilename, "r");
+ if (status == NULL)
+ goto errorReadingProcess;
+ else {
+ char buffer[256];
+ process->vxid = 0;
+ while (!feof(status)) {
+ char* ok = fgets(buffer, 255, status);
+ if (!ok)
+ break;
+
+ if (String_startsWith(buffer, "VxID:")) {
+ int vxid;
+ int ok = ProcessList_read(this, buffer, "VxID:\t%d", &vxid);
+ if (ok >= 1) {
+ process->vxid = vxid;
+ }
+ }
+ #if defined HAVE_ANCIENT_VSERVER
+ else if (String_startsWith(buffer, "s_context:")) {
+ int vxid;
+ int ok = ProcessList_read(this, buffer, "s_context:\t%d", &vxid);
+ if (ok >= 1) {
+ process->vxid = vxid;
+ }
+ }
+ #endif
+ }
+ fclose(status);
+ }
+ #endif
snprintf(statusfilename, MAX_NAME, "%s/%s/cmdline", dirname, name);
status = ProcessList_fopen(this, statusfilename, "r");
diff --git a/configure.ac b/configure.ac
index e8cb7ea8..4aba11fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,6 +69,17 @@ if test "x$enable_openvz" = xyes; then
AC_DEFINE(HAVE_OPENVZ, 1, [Define if openvz support enabled.])
fi
+AC_ARG_ENABLE(vserver, [AC_HELP_STRING([--enable-vserver], [enable VServer support])], ,enable_vserver="no")
+if test "x$enable_vserver" = xyes; then
+ AC_DEFINE(HAVE_VSERVER, 1, [Define if vserver support enabled.])
+fi
+
+AC_ARG_ENABLE(ancient_vserver, [AC_HELP_STRING([--enable-ancient-vserver], [enable ancient VServer support (implies --enable-vserver)])], ,enable_ancient_vserver="no")
+if test "x$enable_ancient_vserver" = xyes; then
+ AC_DEFINE(HAVE_VSERVER, 1, [Define if vserver support enabled.])
+ AC_DEFINE(HAVE_ANCIENT_VSERVER, 1, [Define if ancient vserver support enabled.])
+fi
+
AC_ARG_ENABLE(taskstats, [AC_HELP_STRING([--enable-taskstats], [enable per-task IO Stats (taskstats kernel sup required)])], ,enable_taskstats="yes")
if test "x$enable_taskstats" = xyes; then
AC_DEFINE(HAVE_TASKSTATS, 1, [Define if taskstats support enabled.])

© 2014-2024 Faster IT GmbH | imprint | privacy policy