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

[Xen-devel] [PATCH 3 of 3] [xen-detect] Add arguments to print out only outputs we are interested in



# HG changeset patch
# User konrad@xxxxxxxxxxxxxxxxxxx
# Date 1261498156 18000
# Node ID 04c067941b17bdc679ffdc2f6c81f8e2f78e9cc5
# Parent  7bd805a543da685a3dba7b8b0c4e3e7052c863b3
[xen-detect] Add arguments to print out only outputs we are interested in.

This is quite usefull in scripts where you can do
if xen-detect -P || modprobe xen-<some module>

And do not have to parse the output - instead you will get
the output only if the condition exists.

diff -r 7bd805a543da -r 04c067941b17 tools/misc/xen-detect.c
--- a/tools/misc/xen-detect.c   Mon Dec 21 18:51:43 2009 -0500
+++ b/tools/misc/xen-detect.c   Tue Dec 22 11:09:16 2009 -0500
@@ -29,6 +29,12 @@
 #include <string.h>
 #include <setjmp.h>
 #include <signal.h>
+#include <unistd.h>
+
+/* Which outputs should be displayed. */
+int disp_HVM = 1;
+int disp_PV = 1;
+int disp_NOXEN = 1;
 
 static void cpuid(uint32_t idx,
                   uint32_t *eax,
@@ -66,8 +72,9 @@
 
  found:
     cpuid(base + 1, &eax, &ebx, &ecx, &edx, pv_context);
-    printf("Running in %s context on Xen v%d.%d.\n",
-           pv_context ? "PV" : "HVM", (uint16_t)(eax >> 16), (uint16_t)eax);
+    if ((pv_context &&  disp_PV) || (!pv_context && disp_HVM))
+        printf("Running in %s context on Xen v%d.%d.\n",
+                pv_context ? "PV" : "HVM", (uint16_t)(eax >> 16), 
(uint16_t)eax);
 
     return pv_context ? 1 : 2;
 }
@@ -78,10 +85,42 @@
     longjmp(sigill_jmp, 1);
 }
 
-int main(void)
+static void usage(void)
+{
+    printf("usage:\n\n");
+    printf("  xen_detect [options]\n\n");
+    printf("options:\n");
+    printf("   -P,  print output if running in PV context.\n");
+    printf("   -H,  print output if running in HVM context.\n");
+    printf("   -N,  print output if not running in any Xen context.\n");
+};
+
+int main(int argc, char **argv)
 {
     /* 0 - no Xen, 1 - PV Xen, 2 - HVM Xen */
     int rc = 0;
+    int ch;
+
+    while ((ch = getopt(argc, argv, "PHN?h")) != -1 ) {
+        switch (ch) {
+        case 'h':
+        case '?':
+                usage();
+                return(-1);
+        case 'H':
+                disp_HVM = 1;
+                disp_PV = disp_NOXEN = 0;
+                break;
+        case 'P':
+                disp_PV = 1;
+                disp_HVM = disp_NOXEN = 0;
+                break;
+        case 'N':
+                disp_NOXEN = 1;
+                disp_PV = disp_HVM = 0;
+                break;
+        }
+    }
 
     /* Check for execution in HVM context. */
     if ( (rc = check_for_xen(0)) )
@@ -97,6 +136,7 @@
          && (rc = check_for_xen(1)) )
         return rc;
 
-    printf("Not running on Xen.\n");
+    if (disp_NOXEN)
+        printf("Not running on Xen.\n");
     return 0;
 }



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.